boto3でS3バケットのブロックパブリックアクセスを設定する
昔々に作ったS3バケットは、ブロックパブリックアクセスがデフォルトでオフになっています(だったはず……)。この設定をオンにしようと思いましたが、対象のS3バケットがたくさんあるのでboto3を使って簡単に設定してみました。
おすすめの方
- boto3でS3バケットのブロックパブリックアクセスを設定したい方
ブロックパブリックアクセスがオフになっている
まずは現状を確認しておきます。
ちなみに、AWS Security Hubでも検出されています。
スクリプトを作成し、実行する
import boto3
s3 = boto3.client("s3")
# 何らかの理由で操作権限が無いバケットなどがあるとき、バケット名を記載する
SKIP_BUCKET_NAMES = [
"xxx",
]
def main():
bucket_names = list_bucket_names()
for bucket_name in bucket_names:
if bucket_name in SKIP_BUCKET_NAMES:
print(f"Skip: {bucket_name}")
continue
print(f"Put public access block: {bucket_name}")
put_public_access_block(bucket_name)
def list_bucket_names() -> list[str]:
resp = s3.list_buckets()
return [bucket["Name"] for bucket in resp["Buckets"]]
def put_public_access_block(bucket_name: str):
s3.put_public_access_block(
Bucket=bucket_name,
PublicAccessBlockConfiguration={
"BlockPublicAcls": True,
"IgnorePublicAcls": True,
"BlockPublicPolicy": True,
"RestrictPublicBuckets": True,
},
)
if __name__ == "__main__":
main()
実行します。
python app.py
スクリプトの実行結果を確認する
S3バケットの設定
「パブリックアクセスをすべてブロック」になっていました。
AWS Security Hub
約1日後、AWS Security Hubを確認するとすべてPASSになっていました。コントロールステータスも成功になっています。
さいごに
S3バケットのブロックパブリックアクセスを設定するスクリプトを作成&実行してみました。
どなたかの参考になれば幸いです。