ACL Behavior of S3 Objects After Enabling and Then Disabling S3 Block Public Access
Overview
For an S3 bucket that has Block Public Access disabled, I will verify whether
enabling Block Public Access and then disabling it again has any effect on
the ACLs of the objects.
Conclusion First
I was able to confirm that the behavior matches what is described in the official documentation.
For an S3 object with ACL = public-read, enabling Block Public Access makes public access
unavailable, and then disabling Block Public Access makes public access available again.
In the AWS console, the Everyone Read permission disappears when Block Public Access is enabled,
which is momentarily alarming, but I confirmed that it returns to its original state when
Block Public Access is disabled.
Official Documentation Reference
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-control-block-public-access.html
Block Public Access settings don’t change existing policies or ACLs. Therefore, removing a Block Public Access setting causes a bucket or object with a public policy or ACL to again become publicly accessible.
In other words, enabling Block Public Access and then disabling it has no effect on the object’s ACL.
What to Try
- Create an S3 bucket with Block Public Access disabled
- Upload a file with acl = public-read to S3
- Confirm that the file can be accessed via its S3 object URL
- Enable Block Public Access on S3
- Confirm that the file cannot be accessed via its S3 object URL
- Disable Block Public Access on S3
- Confirm that the file can be accessed via its S3 object URL
Trying It Out
Create a test S3 bucket with Terraform
1 | resource "aws_s3_bucket" "test" { |
Upload a File with acl = public-read
1 | $ echo "public read" > public_read.txt |
With acl = public-read, I can confirm that the object is in a public state accessible by anyone.


Verify Access via the S3 Object URL
1 | // Since acl = public-read, the S3 object URL is accessible |
Enable S3 Block Public Access
1 | resource "aws_s3_bucket_public_access_block" "test" { |
Confirm that Block Public Access has been enabled

The Everyone Read permission on public_read.txt has disappeared

private.txt is unchanged

I confirmed that attempting to access both public_read.txt and private.txt returns 403 Forbidden.
1 | $ curl -I https://test-by-kenzo-tanaka.s3.ap-northeast-1.amazonaws.com/public_read.txt |
Disable S3 Block Public Access Again
Disable Block Public Access once more.
1 | resource "aws_s3_bucket_public_access_block" "test" { |
Confirm that Block Public Access has been disabled

Confirm that the Everyone Read permission on public_read.txt has been restored

private.txt is unchanged

I was able to confirm that public_read.txt becomes publicly accessible again,
while private.txt remains not publicly accessible.
1 | $ curl -I https://test-by-kenzo-tanaka.s3.ap-northeast-1.amazonaws.com/public_read.txt |
Summary
As stated in the conclusion, I was able to confirm that the behavior matches the official documentation.
That’s all.
I hope this is helpful.
ACL Behavior of S3 Objects After Enabling and Then Disabling S3 Block Public Access
https://kenzo0107.github.io/en/2023/04/05/s3-bucket-public-access-block/