状況
EC2 上のバッチで aws s3 ls を実行すると Unable to locate credentials と出る。バッチ用の IAM ロールを作り、S3 の読み取りを許可するポリシーを付けてある。
最も疑わしいのは?
- Aロールのポリシーに s3:ListBucket が無い
- Bバケットポリシーがロールを拒否している
- Cロールがインスタンスプロファイルとして EC2 に付いていない
- DS3 バケットが別のリージョンにある
正答
- A
- B
- C
- D
解説
Unable to locate credentials は、CLI が認証情報をどこからも見つけられず、AWS への要求をまだ送っていないことを示す。権限やバケットポリシーの問題(A・B)なら、要求が届いたうえで AccessDenied が返るはずで、症状が合わない。リージョンの違いも、認証情報の有無とは関係しない(D)。ロールを作ってポリシーを付けただけでは EC2 から使えず、インスタンスプロファイルとしてインスタンスに関連付けて初めて、インスタンスメタデータから一時的な認証情報を取得できる。ここでアクセスキーをサーバーに置いて回避するのは、漏洩の危険を増やすので避ける。
この問題を含む AWS のテストを制限時間つきで解く
AWSクイズへ