-
Notifications
You must be signed in to change notification settings - Fork 4.5k
aws-s3: blockPublicAccess has a counterintuitive behaviour #32811
Description
Describe the bug
When a bucket is created without specifying the blockPublicAccess property:
const myBucket = new Bucket(this, "MyBucket");It is equivalent to explicitly setting all BlockPublicAccess options to true:
const myBucket = new Bucket(this, "MyBucket", {
blockPublicAccess: new BlockPublicAccess({
blockPublicAcls: true,
ignorePublicAcls: true,
blockPublicPolicy: true,
restrictPublicBuckets: true,
}),
});This might lead you to assume that all BlockPublicAccess options default to true. However, that's not the case. For example, if you deploy a bucket like this:
const myBucket = new Bucket(this, "MyBucket", {
blockPublicAccess: new BlockPublicAccess({
blockPublicPolicy: false,
restrictPublicBuckets: false,
}),
});You would get this configuration:
This happens because all options within BlockPublicAccess are undefined by default, which is equivalent to false.
This behavior is counterintuitive. If you do not define blockPublicAccess, all options default to true. However, if you define a BlockPublicAccess, any unspecified options default to false.
This seemingly paradoxical situation stems from a change introduced a couple of years ago.
Regression Issue
- Select this option if this issue appears to be a regression.
Last Known Working CDK Version
No response
Expected Behavior
see above.
Current Behavior
see above.
Reproduction Steps
see above.
Possible Solution
No response
Additional Information/Context
No response
CDK CLI Version
2.174.1
Framework Version
No response
Node.js Version
22.12.0
OS
Ubuntu 24.04.1
Language
TypeScript
Language Version
No response
Other information
No response
