説明
block_public_aclsは、公開権限を付与する新しいACLリクエストを拒否する保護機能です。この保護が適用されずACLが有効なバケットでは、誤ったACLによってアクセス範囲が広がるおそれがあります。
バケットの一つの設定だけで実際の公開状態は決まりません。アカウントなどのより厳しいパブリックアクセスブロック設定と、Object OwnershipによるACLの無効化も確認してください。
想定される影響
- 公開ACLが有効に権限を付与していると、意図しない利用者がバケットやオブジェクトにアクセスできる場合があります。
- 不要な読み取り権限によって、バックアップ、ログ、文書が漏えいするおそれがあります。
対処方法
aws_s3_bucket_public_access_blockでblock_public_acls = trueを設定してください。- 既存の公開ACLによる権限も無効にするには、
ignore_public_aclsを確認してください。新しい公開ACLのブロックでは既存ACLは削除されません。 - ACLが不要ならObject Ownershipで無効にし、バケットポリシーを含む他の権限も確認してください。
例
以下は、バケット単位の一つの設定を比較する例です。新しいバケットでは既定でACLが無効であり、他のレベルの制限も適用されるため、変更前の設定だけで公開状態とは判断できません。バケット名は実際に使う名前に置き換えてください。
変更前
hcl
resource "aws_s3_bucket" "example" {
bucket = "example"
}
resource "aws_s3_bucket_public_access_block" "example" {
bucket = aws_s3_bucket.example.id
block_public_acls = false
block_public_policy = true
ignore_public_acls = false
}
変更後
hcl
resource "aws_s3_bucket" "example" {
bucket = "example"
}
resource "aws_s3_bucket_public_access_block" "example" {
bucket = aws_s3_bucket.example.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = false
}
説明:
変更後は新しい公開ACLリクエストをブロックします。ignore_public_acls = falseは残っているため、既存の公開ACLによる権限と他のアクセス経路を別途確認してください。