giselleevita/terraform-aws-iam-baseline
GitHub: giselleevita/terraform-aws-iam-baseline
一个专注最小权限原则的Terraform模块,用于创建仅限特定S3桶只读访问的IAM角色。
Stars: 1 | Forks: 0
# terraform-aws-iam-baseline



有关设计基本原理和限制,请参阅 [docs/CASE_STUDY.md](docs/CASE_STUDY.md)。
本仓库有意将范围限定于一个可审查的 IAM 模式:创建一个具有特定存储桶所需最小 S3 读取权限的可代入服务角色。它并不声称是一个完整的 AWS 账户基线。
## 审阅者快速入门
要进行快速的技术审查:
1. 检查 `main.tf` 以验证 S3 访问权限是否仅限于一个存储桶 ARN 及其对象。
2. 检查 `variables.tf` 以查看模块输入和验证。
3. 通过现有的 CI 工作流运行 `terraform fmt -check`、`terraform validate`、`tflint` 和 `tfsec`。
4. 阅读 [docs/CASE_STUDY.md](docs/CASE_STUDY.md) 以了解设计基本原理和限制。
## 创建内容
```
flowchart TD
Service[AWS service principal] --> Role[IAM role]
Role --> Policy[S3 read-only policy]
Policy --> Bucket[Specific S3 bucket]
Policy --> Objects[Objects in that bucket]
```
| 控制 | 实现 |
|---|---|
| 存储桶范围访问 | `s3:ListBucket` 仅限于 `arn:aws:s3:::` |
| 对象读取访问 | `s3:GetObject` 和 `s3:GetObjectVersion` 仅限于 `arn:aws:s3:::/*` |
| 显式信任边界 | 只有已配置的 AWS 服务主体才能代入该角色 |
| 输入验证 | 存储桶名称、角色名称和受信任主体必须非空 |
| 可审查的策略 | IAM 策略文档由 Terraform 数据源生成 |
## 未实现功能
此模块目前未实现:
- IAM 账户密码策略
- 对人工用户的 MFA 强制执行
- AWS Organizations SCP
- CloudTrail 设置
- 区域锁定
- Access Analyzer 集成
- 用户或组生命周期管理
这些控制项是有用的账户基线功能,但超出了本模块当前实现的范围。
## 用法
```
module "s3_read_role" {
source = "./"
bucket_name = "my-audit-evidence-bucket"
role_name = "audit-evidence-reader"
trusted_service_principals = [
"ec2.amazonaws.com"
]
tags = {
Environment = "dev"
Owner = "security"
}
}
```
## 要求
- Terraform >= 1.5
- AWS provider >= 5.0
- 用于创建角色、策略和策略附加的 IAM 权限
## 输出
| 输出 | 描述 |
|---|---|
| `policy_arn` | 生成的 S3 只读 IAM 策略的 ARN |
| `role_name` | 附加了该策略的 IAM 角色的名称 |
## 后续改进
要将其转变为真正的 AWS IAM 基线,请添加:
- 账户密码策略
- 针对交互式用户的 MFA 强制执行策略
- 用于 IAM、CloudTrail、Config 和 Security Hub 审查的只读审计角色
- 可选的区域限制策略/SCP 示例
- 针对策略内容的 Terraform 测试
- Access Analyzer 验证说明
## 许可证
MIT
标签:AWS, DPI, EC2, ECS, IaC, IAM, S3, Terraform, Terraform模块, 只读权限, 存储桶策略, 安全合规, 最小权限原则, 权限基线, 漏洞探索, 网络代理, 角色授权, 身份与访问管理