AWS CDK(v2)でS3 Bucket作成時に、`API: s3:PutBucketPolicy Access Denied`が出たらみる記事

S3バケットのデフォルト設定が変更されたため、新しいバケットを作成する際にエラーが発生しました。エラーの原因は、バケットポリシーの設定に関するエラーでした。AWSは、新しいバケットに対してデフォルトでS3パブリックアクセスブロックを有効にし、ACLを無効にする設定を導入しました。CDKを使用してバケットを作成する場合は、blockPublicAccessパラメータを追加して設定する必要があります。これにより、問題が解決しました。

広告ここから
広告ここまで

目次

    S3バケットのデフォルト設定が変わった関係で、パラメータを1つ追加する必要がありました。

    遭遇したエラー

    Webサイトを配置するためのバケットを作ろうとしていました。

        const websiteBucket = new Bucket(this, 'SonikStaticAssets', {
          websiteIndexDocument: 'index.html',
          publicReadAccess: true,
        });

    しかしこの定義は、CloudFormationでエラーが発生します。

    CdkSonikAppStack: deploying... [1/1]
    CdkSonikAppStack: creating CloudFormation changeset...
    10:08:29 PM | CREATE_FAILED        | AWS::S3::BucketPolicy       | SonikStaticAssetsPolicy8AA45F84
    API: s3:PutBucketPolicy Access Denied
    
    
     ❌  CdkSonikAppStack failed: Error: The stack named CdkSonikAppStack failed to deploy: UPDATE_ROLLBACK_COMPLETE: API: s3:PutBucketPolicy Access Denied

    どんな変更があったか

    https://aws.amazon.com/jp/about-aws/whats-new/2022/12/amazon-s3-automatically-enable-block-public-access-disable-access-control-lists-buckets-april-2023/

    すべての新しい S3 バケットに対して自動的に S3 パブリックアクセスブロックが有効になり、S3 アクセスコントロールリスト (ACL) は無効にされます。これらのデフォルト設定は導入されると、AWS CLI、API、SDK、AWS CloudFormation などの作成方法に関係なく、すべての新しいバケットに適用されるようになります。

    とのころで、CDKはCloudFormationなのできっちり対象に入っています。

    blockPublicAccessを追加する

    blockPublicAccess: BlockPublicAccess.BLOCK_ACLSを追加してやりましょう。

        const websiteBucket = new Bucket(this, 'SonikStaticAssets', {
          websiteIndexDocument: 'index.html',
          publicReadAccess: true,
          blockPublicAccess: BlockPublicAccess.BLOCK_ACLS,
        });

    成功しました。

    CdkSonikAppStack: creating CloudFormation changeset...
    
     ✅  CdkSonikAppStack
    
    ✨  Deployment time: 118.93s

    参考にした記事

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark