Col*_*ean 7 amazon-web-services terraform
我有一个针对AWS部署的Terraform配置.当使用有权做任何事情的IAM用户时(即{actions: ["*"], resources: ["*"]}.
为了实现Terraform配置的自动化应用,我想确定最初应用配置并影响后续更改所需的最小权限集.我特别想避免在政策中给予过多的权限,例如{actions: ["s3:*"], resources: ["*"]}.
到目前为止,我只是运行terraform apply直到发生错误.我查看输出或terraform日志输出以查看API调用失败,然后将其添加到部署用户策略中.EC2和S3特别令人沮丧,因为动作的名称似乎不一定与API方法名称一致.我有几个小时的时间用简单的方式告诉我多久了.
有没有更有效的方法来做到这一点?
如果Terraform建议我需要什么许可/行动,那将是非常好的,但这是Hashicorp最好的产品增强.
Avn*_*rSo 36
这是另一种方法,类似于上面所说的,但没有进入 CloudTrail -
TF_LOG=trace terraform apply --auto-approve &> log.logcat log.log | grep "DEBUG: Request" 您将获得所有使用的 AWS 操作的列表。
Ste*_*ing 32
虽然我仍然相信这种超级严格的政策将是一种持续的痛苦,并可能会扼杀生产力(但可能取决于项目),但现在有一个工具可以做到这一点。
iamlive使用 AWS 开发工具包的客户端监控功能根据执行的 API 调用创建最小策略。由于 Terraform 使用 AWS SDK,因此这也适用于此。
与我之前(和已接受的)答案相反,iamlive 甚至应该正确执行实际的 IAM 操作,这不一定与 API 调用 1:1 匹配(并且将由 CloudTrail 记录)。
为了让它与 terraform 一起工作,你应该这样做export AWS_CSM_ENABLED=true
BMW*_*BMW 10
我处理的方法是,首先允许该服务的所有权限(*),然后在不需要时拒绝其中一些权限。
例如
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSpecifics",
"Action": [
"ec2:*",
"rds:*",
"s3:*",
"sns:*",
"sqs:*",
"iam:*",
"elasticloadbalancing:*",
"autoscaling:*",
"cloudwatch:*",
"cloudfront:*",
"route53:*",
"ecr:*",
"logs:*",
"ecs:*",
"application-autoscaling:*",
"logs:*",
"events:*",
"elasticache:*",
"es:*",
"kms:*",
"dynamodb:*"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "DenySpecifics",
"Action": [
"iam:*User*",
"iam:*Login*",
"iam:*Group*",
"iam:*Provider*",
"aws-portal:*",
"budgets:*",
"config:*",
"directconnect:*",
"aws-marketplace:*",
"aws-marketplace-management:*",
"ec2:*ReservedInstances*"
],
"Effect": "Deny",
"Resource": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果 terraform 不需要或者您的公司不使用某些 aws 服务,您可以轻松调整拒绝会话中的列表。
编辑 2022 年 2 月:使用 iamlive 和客户端监控有更好的方法。请看我的另一个回答。
因为我猜没有完美的解决方案,所以把这个答案当作我头脑风暴的结果。至少对于初始权限设置,我可以想象以下内容:
首先允许所有内容,然后处理 CloudTrail 日志以查看在terraform apply/destroy周期中进行了哪些 API 调用。
之后,您更新 IAM 策略以准确包含这些调用。
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |