Ansibleの_./ec2.py --list --refresh-cache
_を使用してAWS EC2インスタンスを一覧表示しようとしています。
ドキュメントを介して、私はこのチェックリストを実行しました:
pip
とboto
をインストールする~/.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
_
「./ec2.py --list」への応答として「Forbidden」を取得していました。 RDSを使用していないときにバグのように見え、RDSリソースを説明するクエリ要求が行われます(このプラグインのデフォルトです)。次のようにec2.iniでリクエストを無効にするだけです:
rds = False
Elasticacheを使用していない場合は、これもFalseに設定する必要があります。なのでコメント解除
elasticache = False
これを省略して、次のようにファイルec2.ini
を作成できます。
[ec2]
elasticache = False
と実行:EC2_INI_PATH=ec2.ini ./ec2.py --list
この正確な問題を解決しました。私の場合、Ansible AIMユーザーは、単一のAWSゾーン内に完全な管理者権限で作成されました。この実験では、以前に未使用のゾーンを選択しました:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "ec2:*",
"Resource": "*",
"Effect": "Allow",
"Condition": {
"StringEquals": {
"ec2:Region": "us-east-2"
}
}
}
]
}
RDS
とelasticache
を無効にすることに加えて(ここの他の回答で説明されているように)、ec2.iniを単一ゾーンに制限しました。
regions = us-east-2
これは「アクセス禁止」パズルの最後のピースでした。
Ansibleからインスタンスを一覧表示できるようにするには、IAMユーザーとグループをAmazonEC2FullAccess
ポリシー(またはec2:Describe*
アクションを含むその他のポリシー)にアタッチする必要があることがわかりました。
もちろん、elasticcache
およびrds
設定フラグをfalse
に設定することに関する他の回答も必要でしたが、失敗して次の応答が得られました:ERROR: "Forbidden", while: getting RDS instances
またはERROR: "Forbidden", while: getting ElastiCache clusters
。