-
Couldn't load subscription status.
- Fork 4.3k
Description
Describe the bug
The latest release (v2.59.0) caused a breaking change within our CDK app for already existing buckets with server access logging enabled. The buckets are using a shared bucket as a target for logs. In version v2.8.0, this caused no issue when deploying with CDK. However, since this release our CDK deployment fails early with the following error:
RuntimeError: Cannot enable log delivery to this bucket because the bucket's ACL has been set and can't be changed
Expected Behavior
In v2.8.0, a CDK deployment with the provided bucket properties will not fail deployment. We observed ACLs not impacting an ability of the source bucket to write logs to the server access log target bucket.
Current Behavior
Deployment of the app fails with the error:
Traceback (most recent call last):
File "/codebuild/output/src389656955/src/slingshot/cdk/app.py", line 92, in <module>
s3_qa_buckets_stack = S3QaBucketsStack(
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/jsii/_runtime.py", line 111, in __call__
inst = super().__call__(*args, **kwargs)
File "/codebuild/output/src389656955/src/slingshot/cdk/stacks/s3_qa_buckets_stack.py", line 31, in __init__
qa_source_files_bucket = s3.Bucket(
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/jsii/_runtime.py", line 111, in __call__
inst = super().__call__(*args, **kwargs)
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/aws_cdk/aws_s3/__init__.py", line 16759, in __init__
jsii.create(self.__class__, self, [scope, id, props])
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/jsii/_kernel/__init__.py", line 336, in create
response = self.provider.create(
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/jsii/_kernel/providers/process.py", line 363, in create
return self._process.send(request, CreateResponse)
File "/root/.pyenv/versions/3.9.12/lib/python3.9/site-packages/jsii/_kernel/providers/process.py", line 340, in send
raise RuntimeError(resp.error) from JavaScriptError(resp.stack)
RuntimeError: Cannot enable log delivery to this bucket because the bucket's ACL has been set and can't be changed
Reproduction Steps
Here is the definition of our target access logs bucket:
access_logs_bucket = s3.Bucket(
scope=self,
id='accessLogsS3Bucket',
bucket_name='access-logs-bucket',
access_control=s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL,
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
encryption=s3.BucketEncryption.S3_MANAGED,
object_ownership=s3.ObjectOwnership.BUCKET_OWNER_ENFORCED,
public_read_access=False,
removal_policy=RemovalPolicy.RETAIN,
versioned=True
)
And this is the definition of the bucket failing the deployment:
s3.Bucket(
scope=self,
id='sourceFilesS3Bucket',
bucket_name='qa-bucket',
access_control=s3.BucketAccessControl.BUCKET_OWNER_FULL_CONTROL,
block_public_access=s3.BlockPublicAccess.BLOCK_ALL,
encryption=s3.BucketEncryption.S3_MANAGED,
object_ownership=s3.ObjectOwnership.BUCKET_OWNER_ENFORCED,
public_read_access=False,
removal_policy=RemovalPolicy.RETAIN,
server_access_logs_bucket=access_logs_bucket,
server_access_logs_prefix='qa-bucket/serverAccessLogging_',
versioned=False
)
Possible Solution
No response
Additional Information/Context
No response
CDK CLI Version
v2.45.0
Framework Version
2.59.0
Node.js Version
16.13.0
OS
Windows
Language
Python
Language Version
3.8.0
Other information
No response