web-dev-qa-db-ja.com

Ansible AWS動的インベントリ: `./ec2.py --list`無許可

Ansibleの_./ec2.py --list --refresh-cache_を使用してAWS EC2インスタンスを一覧表示しようとしています。

ドキュメントを介して、私はこのチェックリストを実行しました:

  • [〜#〜] aws [〜#〜](Amazonのドキュメント Amazon EC2リソースへのアクセスの制御エラーコード
    • IAMユーザーと対応するIAMグループを作成する
    • そのユーザーをそのグループに関連付けました
    • IAMグループに非常にオープンなポリシーを追加しました*
  • [〜#〜] cli [〜#〜](Ansibleのドキュメント Dynamic Inventory
    • pipbotoをインストールする
    • AWS IAMユーザーのアクセス認証情報から受け取った_~/.boto_と_aws_access_key_id_を含む_aws_secret_access_key_ファイルを作成します
    • _ec2.py_および_ec2.ini_を同じパスにインストールし、両方のファイルをそのままにしました
    • _./ec2.py --list --refresh-cache_を実行します

*私の方針:

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

私はそれを行い、基本的にbotoを経由する_ec2.py_を介してEC2インスタンスを一覧表示できると期待していましたが、実際には_Error connecting to AWS backend. You are not authorized to perform this operation_を確認しました。ただし、_ssh ubuntu@[ip]_を介してEC2インスタンスに直接sshを付けることはできます。

ここの壁に頭をぶつけている。何が悪いのですか?

編集:@EEAAの提案に従って新しい情報を追加します

Amazonの応答で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
_
4
Morgan Delaney

「./ec2.py --list」への応答として「Forbidden」を取得していました。 RDSを使用していないときにバグのように見え、RDSリソースを説明するクエリ要求が行われます(このプラグインのデフォルトです)。次のようにec2.iniでリクエストを無効にするだけです:

    rds = False
7
caffeinate_me

Elasticacheを使用していない場合は、これもFalseに設定する必要があります。なのでコメント解除

elasticache = False
6
Jishnu Kinwar

これを省略して、次のようにファイルec2.iniを作成できます。

[ec2]
elasticache = False

と実行:EC2_INI_PATH=ec2.ini ./ec2.py --list

ベース: https://aws.Amazon.com/blogs/apn/getting-started-with-ansible-and-dynamic-Amazon-ec2-inventory-management/

0
Jorge Arias

この正確な問題を解決しました。私の場合、Ansible AIMユーザーは、単一のAWSゾーン内に完全な管理者権限で作成されました。この実験では、以前に未使用のゾーンを選択しました:

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

RDSelasticacheを無効にすることに加えて(ここの他の回答で説明されているように)、ec2.iniを単一ゾーンに制限しました。

regions = us-east-2

これは「アクセス禁止」パズルの最後のピースでした。

0
Andy Malakov

Ansibleからインスタンスを一覧表示できるようにするには、IAMユーザーとグループをAmazonEC2FullAccessポリシー(またはec2:Describe*アクションを含むその他のポリシー)にアタッチする必要があることがわかりました。

もちろん、elasticcacheおよびrds設定フラグをfalseに設定することに関する他の回答も必要でしたが、失敗して次の応答が得られました:ERROR: "Forbidden", while: getting RDS instancesまたはERROR: "Forbidden", while: getting ElastiCache clusters

0
Vineet Reynolds