概要
S3にバケット指定で書き込み権限(PutObject)を付与する場合、JSONで編集してたらちょっと引っかかってしまったのでそのメモ。超絶小ネタ。
失敗した権限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::waneal-test" } ] }
$ aws s3 cp hige.txt s3://waneal-test/higehigehige.txt --profile s3-test-user upload failed: ./hige.txt to s3://waneal-test/higehigehige.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
バケットに権限追加しとけばいいだろと思ってましたがだめでした。
成功した権限
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::waneal-test/*" } ] }
$ aws s3 cp hige.txt s3://waneal-test/higehige.txt --profile s3-test-user upload: ./hige.txt to s3://waneal-test/higehige.txt
PutObject
はobjectまで見る権限なので /*
で指定する必要あり。他の権限についても resource
までなのか object
までなのかを意識する必要がある
感想、メモ
GUIからポチポチやるときは失敗しないけど、TerraformでJSON設定するときはポカリそう。いきなり本番に適用せざるを得ない場合はちゃんとIAM Policy Simulatorで検証すべし。