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:ListHostedZonesroute53:ListResourceRecordSetsrds:Describe*elasticache:Describe*.

不过,如果您不使用所有这些服务,您可以通过将值设置为 Falseec2.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": "*"
        }
    ]
}