説明
Cloud Storageバケットの一覧は、保存データの用途と管理責任を整理する資料です。バケットの存在自体は脆弱性ではなく、明示的な暗号化ブロックがなくても保存データは既定で暗号化されます。
想定される影響
公開アクセスが不要なバケットに広い権限を与えると、データの漏えいや意図しない変更につながるおそれがあります。不完全なインベントリでは、こうした設定を見落としやすくなります。
対処方法
バケットの責任者を記録し、ACLやIAMでallUsers、allAuthenticatedUsersへの権限付与が必要か確認してください。暗号化キーの管理と保持方針も用途に合わせて確認してください。
例
以下は公開メンバーを使う構成と、指定グループに読み取り権限を与える構成の抜粋です。変数とリソース参照には実際のKMSキーの完全な識別子を指定し、キーの権限は別途設定してください。
変更前
hcl
resource "google_storage_bucket_access_control" "public_rule" {
bucket = google_storage_bucket.bucket.name
role = "READER"
entity = "allUsers"
}
resource "google_storage_bucket" "bucket" {
name = "static-content-bucket"
location = "US"
}
resource "google_storage_bucket_iam_binding" "binding" {
bucket = google_storage_bucket.bucket2.name
role = "roles/storage.admin"
members = [
"allUsers",
]
}
resource "google_storage_bucket" "bucket2" {
name = "static-content-bucket-2"
location = "US"
encryption {
default_kms_key_name = var.bucket_kms_key
}
}
変更後
hcl
resource "google_storage_bucket" "logs_bucket" {
name = "team-app-logs-prod"
location = "US"
uniform_bucket_level_access = true
encryption {
default_kms_key_name = google_kms_crypto_key.bucket_key.id
}
labels = {
service = "app"
env = "prod"
}
}
resource "google_storage_bucket_iam_member" "ops_reader" {
bucket = google_storage_bucket.logs_bucket.name
role = "roles/storage.objectViewer"
member = "group:ops@example.com"
}