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
どんな変更があったか
すべての新しい 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