S3 ListBucketsの実行に必要なIAM PolicyのAction権限について整理します。
はじめに
おはよう。@bioerrorlogです。
S3のAPIを利用する際のIAM Policy設定にはしばしば悩まされます。 S3から提供されているAPIをそのままIAM Policyの"Action"として指定できないことが多いからです。
例えばS3のListBucketsを実行する際、IAM Policyの"Action"に"s3:ListBuckets"としてそのまま権限を指定することはできません。 IAM PolicyのActionテーブルには"s3:ListBuckets"は定義されていないからです。
[関連記事] IAM Policyの"Action"に指定できる権限の一覧はどこにあるのか
そこで今回は、S3のListBuckets実行に必要なIAM PolicyのAction権限について整理します。
検証方法
Lambdaからboto3のlist_buckets()を実行し、必要なIAM Policy権限を調べます。
Lambdaでは、以下のシンプルなコードを実行します:
import boto3 s3_client = boto3.client('s3') def lambda_handler(event, context): response = s3_client.list_buckets() print(response)
Lambda runtime:
Python 3.8boto3 version:
boto3-1.15.16 botocore-1.18.16
S3 ListBucketsの実行に必要なIAM権限
結論
まず結論から言うと、必要なAction権限は以下の2つです:
- "s3:ListBucket"
- "s3:ListAllMyBuckets"
IAM Policyドキュメントは以下のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListAllMyBuckets" ], "Resource": "*" } ] }
以降、ListBucketsの実行に必要なIAM権限を検証していきます。
検証
まず、S3への権限を何も付与せずにLambdaを実行すると、以下のエラーが出力されます。
[ERROR] ClientError: An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
当然ですが、AccessDeniedエラーが出ました。
次に、試しに"s3:ListBuckets"の権限を指定してみます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBuckets" ], "Resource": "*" } ] }
こちらも当然、同様のAccessDeniedエラーが吐かれました。 "s3:ListBuckets"というActionは定義されていないからです。
次は、"s3:ListBucket"または"s3:ListAllMyBuckets"の権限をそれぞれ単体で付与して実行してみます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "*" } ] }
または
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets" ], "Resource": "*" } ] }
しかし、どちらのケースも同様のAccessDeniedエラーが吐かれました。
そして、次のように"s3:ListBucket"と"s3:ListAllMyBuckets"の両方を許可してみます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:ListAllMyBuckets" ], "Resource": "*" } ] }
これでようやく、エラーなくlist_buckets()
を実行することが出来ました。
おわりに
今回は、S3 ListBucketsの実行に必要なIAM権限をメモしました。
S3から提供されているAPIはそのままIAM Policyの"Action"として指定できないことが多いので、よくIAM Policyの設定には苦労します。 今回はListBuckets APIについて書きましたが、他にも紛らわしい権限設定のAPIがあります。
必要なAction権限をすぐに調べられる仕組みがあればよいのですが、、
もしあれば是非教えて貰いたいです。
[関連記事]
www.bioerrorlog.work
参考
ListBuckets - Amazon Simple Storage Service
S3 — Boto3 Docs 1.17.93 documentation
Actions, resources, and condition keys for Amazon S3 - Service Authorization Reference