Ansible AWS 动态清单:`./ec2.py --list` 未经授权

Ansible AWS 动态清单:`./ec2.py --list` 未经授权

我正在尝试使用 Ansible./ec2.py --list --refresh-cache列出我的 AWS EC2 实例。

通过文档,我已经完成了以下清单:

  • AWS(文档来自亚马逊的控制对 Amazon EC2 资源的访问&错误代码
    • 创建 IAM 用户和相应的 IAM 组
    • 将该用户与该组关联
    • 为 IAM 集团添加了非常开放的政策*
  • 命令行界面(文档来自 Ansible 的动态库存
    • 安装pipboto
    • 创建一个~/.boto文件aws_access_key_id,其中包含aws_secret_access_key我从 AWS IAM 用户的访问凭证中收到的内容
    • 安装ec2.pyec2.ini同一路径,保持两个文件不变
    • 跑步./ec2.py --list --refresh-cache

*我的政策:

{
  "Statement": [
    {
      "Sid": "Stmt1427001800780",
      "Action": "*",
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

我这样做了,并希望能够列出ec2.py基本上通过其路由的EC2 实例boto,但实际上我看到了Error connecting to AWS backend. You are not authorized to perform this operation。然而,我能够ssh通过直接进入我的 EC2 实例ssh ubuntu@[ip]

我真的快要崩溃了。我到底做错了什么?

编辑:根据@EEAA 的建议添加一些新信息

当我使用pprint.pprint(e)亚马逊的回应时:

EC2ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>UnauthorizedOperation</Code><Message>You are not authorized to perform this operation.</Message></Error></Errors><RequestID>b985d559-c410-4462-8b10-e0819fd81f12</RequestID></Response>

我的~/.boto配置如下:

[Credentials]
aws_access_key_id = removed
aws_secret_access_key = removed

答案1

我收到的响应是“Forbidden”作为对“./ec2.py --list”的响应。这看起来像是在不使用 RDS 时发出描述 RDS 资源的查询请求(这是此插件的默认设置)时出现的错误。只需在 ec2.ini 中禁用该请求即可,如下所示:

    rds = False

答案2

如果不使用 ElasticCache,您也必须将其设置为 False。因此取消注释

elasticache = False

答案3

我发现有必要将 IAM 用户和组附加到AmazonEC2FullAccess策略(或任何其他包含ec2:Describe*操作的策略,以允许从 Ansible 列出实例。

当然,还需要设置elasticcacherds配置标志的其他答案false,否则我得到的是以下响应:ERROR: "Forbidden", while: getting RDS instancesERROR: "Forbidden", while: getting ElastiCache clusters

答案4

刚刚解决了这个确切的问题。在我的例子中,Ansible AIM 用户是在单个 AWS 区域内创建的,具有完全管理员权限。我为这个实验选择了以前未使用的区域:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:*",
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "ec2:Region": "us-east-2"
                }
            }
        }
    ]
}

除了禁用(如此处其他答案中所述)之外,我还将 ec2.ini 限制为单个区域RDSelasticache

regions = us-east-2

这是“禁止访问”拼图的最后一块。

相关内容