Google Cloud Storageバケットのインベントリ

バケットの用途とアクセス権限を併せて記録してください。

説明

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"
}

参考資料