S3の公開バケットに対するアクセス制限の確認

公開ポリシーがあるバケットへの不要な外部アクセスを制限してください。

説明

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では、この制限は緩和されません。既存のクロスアカウント業務と他のアクセス制御も確認してください。

参考資料