説明
restrict_public_bucketsは、公開ポリシーがあるバケットへのアクセスを、AWSサービスプリンシパルとそのアカウントの権限を持つ利用者に制限する保護機能です。公開アクセスだけでなく、その公開ポリシーに含まれる特定のクロスアカウント権限も遮断する場合があります。
block_public_policyが新しい公開ポリシーの適用をブロックするのに対し、この設定は公開ポリシーがすでにあるバケットのアクセス範囲を制限します。実際のアクセスはポリシーや他のレベルのブロック設定にも左右されるため、一つの設定だけで公開状態は判断できません。
想定される影響
- 公開ポリシーによって、意図しないアカウントや利用者にアクセスが許可されるおそれがあります。
- 不要な読み取り権限でデータが公開され、他の許可された操作によっては変更も可能になります。
対処方法
- 公開アクセスが不要なら、アカウントとバケットで
restrict_public_buckets = trueを設定してください。 - 必要なクロスアカウントアクセスを維持できるよう、既存の公開ポリシーを必要なプリンシパル、操作、リソースに限定し、実際のリクエストを試験してください。
- S3の他のパブリックアクセスブロック設定、ACL、バケットポリシーも併せて確認してください。
例
以下は、アカウント単位の設定を比較する抜粋です。実際のアカウントIDと同じアカウントのバケットを使ってください。バケットポリシーと他のレベルのブロック設定は省略しています。
変更前
hcl
resource "aws_s3_account_public_access_block" "example" {
account_id = 250924516109
}
resource "aws_s3_bucket_public_access_block" "example" {
bucket = aws_s3_bucket.public_bucket.id
block_public_acls = false
block_public_policy = false
ignore_public_acls = false
restrict_public_buckets = false
}
変更後
hcl
resource "aws_s3_account_public_access_block" "example" {
account_id = 250924516109
restrict_public_buckets = true
}
resource "aws_s3_bucket_public_access_block" "example" {
bucket = aws_s3_bucket.public_bucket.id
block_public_acls = false
block_public_policy = false
ignore_public_acls = false
restrict_public_buckets = false
}
説明:
変更後は、公開ポリシーがあるバケットへのアクセスをアカウント単位で制限します。バケットのrestrict_public_buckets = falseでは、この制限は緩和されません。既存のクロスアカウント業務と他のアクセス制御も確認してください。