S3 のパブリックアクセスブロック有効後、無効にした際の S3 Object の ACL の挙動
概要
パブリックアクセスのブロックが無効となっている S3 Bucket で
パブリックアクセスのブロックを有効化しその後、無効化した際に
Object の ACL に影響があるか確認します。
まず結論
公式ドキュメントに記載がある通りであることが確認できた。
ACL = public-read の S3 Object が
パブリックアクセスブロックを有効化するとパブリックアクセスが不可となり
その後、パブリックアクセスブロックを無効化するとパブリックアクセス可能となることが確認できた。
AWS コンソール上だとパブリックアクセスブロック有効化時に
Everyone Read の権限が消えるので一瞬ドキッとするが、
無効化した際に元に戻ることが確認できた。
公式ドキュメント参照
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-control-block-public-access.html
ブロックパブリックアクセス設定は既存のポリシーまたは ACL を変更しません。そのため、ブロックパブリックアクセス設定を削除しても、パブリックポリシーまたは ACL を持つバケットまたはオブジェクトは再びパブリックにアクセス可能になります。
パブリックアクセスのブロックを有効化し、その後、無効にしてもオブジェクトの ACL には影響がない、
とのこと。
試すこと
- パブリックアクセスブロック無効の S3 Bucket 作成
- acl = public-read のファイルを S3 にアップロード
- ファイルに S3 Object URL でアクセスできることを確認
- S3 のパブリックアクセスブロックを有効化
- ファイルに S3 Object URL でアクセスできないことを確認
- S3 のパブリックアクセスブロックを無効化
- ファイルに S3 Object URL でアクセスできることを確認
試してみた
terraform でテスト用の S3 Bucket 作成
1 | resource "aws_s3_bucket" "test" { |
acl = public-read でファイルアップロード
1 | $ echo "public read" > public_read.txt |
acl = public-read とした場合誰でもアクセスできる公開状態であることを確認できる。
S3 Object URL へのアクセス可否の確認
1 | // acl = public-read にしているので S3 Object URL にアクセスできる |
S3 パブリックアクセスブロックを有効化する
1 | resource "aws_s3_bucket_public_access_block" "test" { |
パブリックアクセスブロックが有効化されたことを確認
public_read.txt の Everyone の Read が消えている
private.txt は特に変わらず
public_read.txt, private.txt いずれもアクセスを試みるも 403 Forbidden となることを確認
1 | $ curl -I https://test-by-kenzo-tanaka.s3.ap-northeast-1.amazonaws.com/public_read.txt |
再び S3 パブリックアクセスブロックを無効化する
再度パブリックアクセスブロックを無効化する
1 | resource "aws_s3_bucket_public_access_block" "test" { |
パブリックアクセスのブロックが無効化されたことを確認
public_read.txt の Everyone の Read が復活していることを確認
private.txt は変わらず
public_read.txt はパブリックアクセスが可能となり
private.txt はパブリックアクセスが不可であることが確認できました。
1 | $ curl -I https://test-by-kenzo-tanaka.s3.ap-northeast-1.amazonaws.com/public_read.txt |
総評
結論に記載した通り、公式ドキュメントの通りであることが確認できました。
以上
参考になれば幸いです。
S3 のパブリックアクセスブロック有効後、無効にした際の S3 Object の ACL の挙動
https://kenzo0107.github.io/2023/04/04/2023-04-05-s3-bucket-public-access-block/