🔥
CloudFrontのアクセスログ保存用S3バケットが作成できない
CloudFrontのアクセスログ保存用S3バケットが作成できない
CloudFrontのアクセスログ保存用S3バケットを、CloudFormationで作成した際のトラブルを紹介します。
エラー
「CloudFront ログに指定した S3 バケットでは ACL アクセスが有効になっていません」というメッセージが出ました。
Resource handler returned message: "Invalid request provided: AWS::CloudFront::Distribution: The S3 bucket that you specified for CloudFront logs does not enable ACL access:
原因
CloudFront 標準ログに使用するS3バケットで、ACLを無効にしていたためでした。
- 2023 年 4 月以降に新規作成したバケットは、デフォルトでS3 ブロックパブリックアクセスが有効になり、アクセスコントロール リスト(ACL) が無効になる。
- CloudFront 標準ログに使用するS3バケットでは、ACLを「FULL_CONTROL」で有効にする必要がある。
2023 年 4 月以降、CloudFront 標準ログに使用される新しい S3 バケットの S3 アクセスコントロールリスト (ACL) を有効にする必要があります。ACL は、バケット作成のステップ中、またはバケットが作成された後に有効にできます。
バケットの S3 アクセスコントロールリスト (ACL) は FULL_CONTROL を付与する必要があります。
対策
CloudFormationテンプレートで、ACL有効化の記載を追加しました。
OwnershipControls:
Rules:
- ObjectOwnership: BucketOwnerPreferred
この設定をすることにより、バケット所有者が優先的にオブジェクト所有者となります。
S3バケットを定義している部分の全体像は以下の通りです。
Resources:
createWebSiteS3Bucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Ref CFS3BucketForWebSite
OwnershipControls:
Rules:
- ObjectOwnership: BucketOwnerPreferred
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
WebsiteConfiguration:
IndexDocument: homepage.html
ErrorDocument: error.html
まとめ
S3バケットにおけるデフォルト設定のセキュリティ向上は嬉しいニュースですが、
用途によってはパブリックブロックやACLの設定変更が必要になります。
今後は、S3バケットの用途に沿った設計を意識していこうと思いました!
参考
Discussion