-
Notifications
You must be signed in to change notification settings - Fork 4.5k
aws-s3: The autoDeleteObjects prop of Bucket is too brittle #31358
Description
Describe the bug
We are going to deploy this CDK stack and observe the behavior.
const uniqueId = this.node.addr.substring(0, 8);
const myBucket = new Bucket(this, "MyBucket", {
bucketName: `my-bucket-${uniqueId}`,
enforceSSL: true,
removalPolicy: RemovalPolicy.DESTROY,
autoDeleteObjects: true,
});
const myBucketPolicy = new BucketPolicy(this, "MyBucketPolicy", {
bucket: myBucket,
});
const myUser = new User(this, "MyUser", {
userName: "my-user",
});
myBucketPolicy.document.addStatements(
new PolicyStatement({
effect: Effect.ALLOW,
principals: [myUser],
actions: ["s3:GetObject", "s3:ListBucket"],
resources: [myBucket.bucketArn, `${myBucket.bucketArn}/*`],
}),
);Regression Issue
- Select this option if this issue appears to be a regression.
Last Known Working CDK Version
No response
Expected Behavior
I expected the cdk deploy to fail immediately due to a conflict between the autoDeleteObjects custom resource and the BucketPolicy we defined. Since only one bucket policy can exist at a time, the system should have detected this conflict and prevented the deployment.
Current Behavior
However, the stack deploys successfully without any error.
Inspecting the S3 bucket policy shows that the BucketPolicy we explicitly created overrides the one generated by autoDeleteObjects:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::533267016779:user/my-user"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket-c812be60",
"arn:aws:s3:::my-bucket-c812be60/*"
]
}
]
}When attempting to destroy the stack with cdk destroy, it fails because the Lambda function linked to autoDeleteObjects custom resource lacks the necessary permissions to delete the S3 bucket. This occurs because the BucketPolicy we defined overrides the policy that grants the required permissions.
Reproduction Steps
see above
Possible Solution
The CDK should enforce a check to prevent defining a BucketPolicy that overrides the permissions needed by the autoDeleteObjects custom resource. Although the deployment works, it leads to conflicts during stack destruction due to missing permissions.
Additional Information/Context
No response
CDK CLI Version
2.156.0
Framework Version
No response
Node.js Version
20.17.0
OS
Ubuntu 22.04.3 LTS
Language
TypeScript
Language Version
No response
Other information
No response
