有人通过IAM角色找出了在ansible上运行EC2动态库存脚本(ec2.py
)所需的最低IAM策略吗?
到目前为止,除了在ansible的官方文档中指定boto
库的凭据之外,我还没有看到这方面的具体参考,但是,在生产环境中,我很少使用密钥对从EC2实例访问AWS服务,而是我已经接受了IAM角色在该案例场景中的使用。
我已经尝试过允许ec2:Describe*
操作的策略,但它似乎对于脚本似乎不够,因为它始终与Unauthorized operation
一起退出。
你能救我吗?
我刚刚创建了一个演示策略,创建了一个新角色并使用了该新策略,然后创建了一个使用该新角色的新实例。
演示政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Demo201505282045",
"Effect": "Allow",
"Action": [
"ec2:Describe*",
"route53:ListHostedZones",
"route53:ListResourceRecordSets"
],
"Resource": "*"
}
]
}
我必须添加route53,因为我使用route53选项(ec2.ini中的route53 = true
),但除此之外它工作正常。
如果您仍然遇到问题,请尝试从命令行(./ec2.py
)运行ec2.py,因为这通常会在直接运行时提供合理的错误消息。
该脚本还会查看RDS和弹性。可以在ec2.ini中禁用它们,但如果不这样做,则以下策略似乎足以运行动态库存。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Demo201505282045", "Effect": "Allow", "Action": [ "ec2:Describe*", "route53:ListHostedZones", "route53:ListResourceRecordSets", "rds:Describe*", "elasticache:Describe*" ], "Resource": "*" } ] }
该脚本还检查Route53,RDS和ElastiCache配置,因此需要访问ec2:Describe*
,route53:ListHostedZones
,route53:ListResourceRecordSets
,rds:Describe*
和elasticache:Describe*
。
尽管如此,如果你不使用所有这些服务,你可以通过设置False
相关的group_by_*
变量的值来选择性地禁用它们在ec2.ini文件中的检查:这将跳过这些配置的获取,这两者都允许你最小化允许该角色的操作(例如:仅限ec2:Describe*
)并减少脚本的整体查询时间。