Ansible EC2 动态库存最低 IAM 策略
Ansible EC2 Dynamic inventory minimum IAM policies
是否有人通过 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
) 运行ning ec2.py,因为在直接 运行 时通常会给出合理的错误消息。
该脚本还会查看 RDS 和 elasticache。它们可以在 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
在 ec2.ini 文件中有选择地禁用它们的检查关联的 group_by_*
变量:这将跳过这些配置的获取,既允许您最小化角色允许的操作(例如:仅 ec2:Describe*
)并减少脚本的整体查询时间。
这些是我在检查 CloudTrail 后确定为 ec2.py 所需的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"elasticache:DescribeReplicationGroups",
"ec2:DescribeInstances",
"ec2:DescribeTags",
"rds:DescribeDBInstances",
"elasticache:DescribeCacheClusters"
],
"Resource": "*"
}
]
}
是否有人通过 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
) 运行ning ec2.py,因为在直接 运行 时通常会给出合理的错误消息。
该脚本还会查看 RDS 和 elasticache。它们可以在 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
在 ec2.ini 文件中有选择地禁用它们的检查关联的 group_by_*
变量:这将跳过这些配置的获取,既允许您最小化角色允许的操作(例如:仅 ec2:Describe*
)并减少脚本的整体查询时间。
这些是我在检查 CloudTrail 后确定为 ec2.py 所需的权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"elasticache:DescribeReplicationGroups",
"ec2:DescribeInstances",
"ec2:DescribeTags",
"rds:DescribeDBInstances",
"elasticache:DescribeCacheClusters"
],
"Resource": "*"
}
]
}