バケットレベルのパブリックアクセスブロックの有効化手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では S3 バケットのパブリックアクセスブロック設定 に関するセキュリティポリシーと具体的な修復手順を解説します。

ポリシーの説明
Amazon S3 の Security Hub コントロール – AWS Security Hub
このコントロールは、前の Amazon S3 パブリックアクセス設定が S3 汎用バケットのアカウントレベルで設定されているかどうかをチェックします: 1 つ以上のブロックパブリックアクセス設定が
false
に設定されている場合、このコントロールは失敗します。
Amazon S3 の Security Hub コントロール ‑ S3‑1 は、アカウントレベルの「S3 Block Public Access」4項目がすべて true
であることを検査します。個々のバケットでブロックしていても、アカウント全体で1つでも false
が残っていればコントロールは失敗します。
パブリックアクセスを許可すると、機密データが漏洩したり、不正なアップロードや削除が行われたりするリスクが高まります。S3バケットには様々なデータが保存されるため、厳格なアクセス制御が必要です。
修復方法
ステップ1
- AWSマネジメントコンソールにログインし、S3コンソールを開きます。
- ブロックパブリックアクセス (アカウント設定) 編集
- 4項目すべてを オン にし 保存
ステップ2
各バケットにて以下の設定を行ってください
- AWSマネジメントコンソールにログインし、S3コンソールを開きます。
- 修正対象のバケットを選択し、「アクセス許可」タブを開きます。
- 「パブリックアクセスをブロック (バケット設定)」セクションで、「編集」をクリックします。
- 「パブリックアクセスをすべてブロック」をオンにし、「変更を保存」をクリックします。

Terraformでの修復手順
以下は 最小構成 の抜粋です。既存バケットにも適用したい場合はaws_s3_bucket_public_access_block
を追加してください。
# --- Account 全体のブロック ---
resource "aws_s3_account_public_access_block" "this" {
block_public_acls = true
ignore_public_acls = true
block_public_policy = true
restrict_public_buckets = true
}
# --- KMS キー ---
resource "aws_kms_key" "s3_encryption" {
description = "KMS key for S3 encryption"
enable_key_rotation = true
policy = jsonencode({
Version = "2012-10-17"
Statement = [
# ① ルート利用者
{
Sid = "Enable IAM User Permissions"
Effect = "Allow"
Principal = { AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root" }
Action = "kms:*"
Resource = "*"
},
# ② S3 からの暗号化/復号リクエストを許可
{
Sid = "Allow S3 Use of the Key"
Effect = "Allow"
Principal = { Service = "s3.amazonaws.com" }
Action = [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]
Resource = "*"
}
]
})
}
# --- Secure Bucket ---
resource "aws_s3_bucket" "secure" {
bucket = "secure-${var.environment}-${data.aws_caller_identity.current.account_id}"
force_destroy = false
}
resource "aws_s3_bucket_public_access_block" "secure" {
bucket = aws_s3_bucket.secure.id
block_public_acls = true
ignore_public_acls = true
block_public_policy = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "secure" {
bucket = aws_s3_bucket.secure.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.s3_encryption.arn
}
bucket_key_enabled = true
}
}
監視について S3 には「公開バケット数」を直接示す組み込みメトリクスはありません。 AWS Config ルール(例: s3-bucket-public-read-prohibited)や Security Hub の検出結果を SNS → CloudWatch アラームで通知する方法が一般的です。
AWS CLI での修正手順例
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws s3control put-public-access-block \\
--account-id "$ACCOUNT_ID" \\
--public-access-block-configuration 'BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true'
最後に
今回は、S3バケットのパブリックアクセスブロック設定について解説しました。パブリックアクセスを許可すると、データ漏洩や不正アクセスのリスクが高まります。必ずパブリックアクセスをブロックし、厳格なアクセス制御を実施してください。
この問題の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。