この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。サービス部の武田です。
Amazon S3のポリシー設定は歴史的な経緯から複雑になっています。特に複雑にしているのがACLの存在ですが、これは2021年のアップデートで無効化できるようになりました。また、 無効化が推奨 されています。
今回Pythonのboto3を使って、ACLを無効化する機会がありましたので共有します。
必要な権限
ACLを無効化する際にはs3:PutBucketOwnershipControls
の権限が必要です。事前に付与されているか、されていない場合は追加することを忘れないでください。
新規バケット作成時に無効化する
新規バケットを作成する際に、ACLを無効化できます。create_bucket
にObjectOwnership
パラメーターが指定できるため、ここにBucketOwnerEnforced
を指定すればOKです。
s3 = boto3.client("s3")
s3.create_bucket(
Bucket="YOUR_BUCKET_NAME",
CreateBucketConfiguration={"LocationConstraint": "ap-northeast-1"},
ObjectOwnership="BucketOwnerEnforced",
)
既存バケットを無効化する
既存のバケットのACLを無効化する場合、put_bucket_ownership_controls
を使用します。OwnershipControls
パラメーターはdictになっており、Rules
でObjectOwnership: BucketOwnerEnforced
を指定します。
s3 = boto3.client("s3")
s3.put_bucket_ownership_controls(
Bucket="YOUR_BUCKET_NAME",
OwnershipControls={
"Rules": [
{"ObjectOwnership": "BucketOwnerEnforced"},
]
},
)
注意する点として、ACLの設定をデフォルトから変更している場合エラーとなります。その場合は少し手間ですが設定を元に戻すなりの対応が必要です。
まとめ
S3バケットのACLは無効化が推奨されています。特別な理由がない限りは無効化して運用をしましょう。