🔥

CloudFrontのアクセスログ保存用S3バケットが作成できない

2023/07/28に公開

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) が無効になる。

https://aws.amazon.com/jp/blogs/aws/heads-up-amazon-s3-security-changes-are-coming-in-april-of-2023/

  • CloudFront 標準ログに使用するS3バケットでは、ACLを「FULL_CONTROL」で有効にする必要がある。

2023 年 4 月以降、CloudFront 標準ログに使用される新しい S3 バケットの S3 アクセスコントロールリスト (ACL) を有効にする必要があります。ACL は、バケット作成のステップ中、またはバケットが作成された後に有効にできます。

バケットの S3 アクセスコントロールリスト (ACL) は FULL_CONTROL を付与する必要があります。

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html#AccessLogsBucketAndFileOwnership

対策

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バケットの用途に沿った設計を意識していこうと思いました!

参考

https://dev.classmethod.jp/articles/cloudfront-access-log-dont-choose-no-acl-s3-bucket/

Discussion