結論
正しい書き方はこうっぽい
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::lgtmoon-dev", "arn:aws:s3:::lgtmoon-dev/*" ] } ] }
誤った書き方
最初はこう書いていた。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::lgtmoon-dev" ] } ] }
だってなんかそれっぽいじゃん。
権限の確認方法
権限の確認には AWS CLI を使うと良い。AWS CLI の詳細は割愛。インストール方法は pip install awscli
AWS CLI の S3 関連のコマンドは以下の Qiita が参考になる。
作成した IAM ポリシーを付与したユーザーを作り、access key id と secret access key を生成する。生成した key と secret を ~/.aws.credentials
に追記する。プロファイル名を lgtmoon_dev
とした。
[lgtmoon_dev] aws_access_key_id = aws_secret_access_key = region = ap-northeast-1
aws s3 ls s3://バケット名 --profile プロファイル名
等のコマンドで、権限が正常に付与されていることを確認する。
# バケットに入っているファイル一覧を取得する $ aws s3 ls s3://lgtmoon-dev --profile lgtmoon_dev 2020-12-24 13:05:42 131222 10 # ファイルをアップロードしてみる $ aws s3 cp ~/Downloads/IMG_0755.JPG s3://lgtmoon-dev/test --profile lgtmoon_dev upload: Downloads/IMG_0755.JPG to s3://lgtmoon-dev/test
バケットの中身を見られる権限と、アップロードの権限が付与されていることがわかる。
ファイルの中身を取得する権限など、細かく権限が別れているので、付与している権限をもとに、上記 Qiita に書いてあるコマンドを試し、正しく権限が付与できているかどうか確認する。
例えば、単に aws s3 ls
とするとバケット一覧が取得できるが、この IAM ポリシーではバケット一覧を表示する権限はなく、アクセスが弾かれる。
$ aws s3 ls --profile lgtmoon_dev An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
まとめ
IAM の S3 回りの権限を正しく付与するのは大変。
でも、権限を雑に設定しているほうが危険なので、頑張ってちゃんと設定しよう。