Cloud Storage IAMバインディングの権限の見直し

Cloud Storageのロールが必要な主体だけに付与されているかを確認し、不要な公開権限を削除してください。

説明

Cloud StorageのIAMバインディングは、membersに指定した主体にロールを付与します。allUsersはGoogleアカウントの有無を問わずすべての人を含み、allAuthenticatedUsersも自分のプロジェクトの利用者だけには限定されません。これらの主体に必要以上のロールを付与すると、意図しないデータアクセスを許可する可能性があります。

空のメンバー一覧は、それ自体で匿名アクセスを許可するものではありません。バインディングが必要か、意図した利用者が抜けていないかを確認してください。実際のアクセスは、ロール、継承された権限、IAMポリシー、ACL、公開アクセスの防止設定を併せて確認する必要があります。

想定される影響

  • 公開主体に読み取り権限が適用されると、ファイル、バックアップ、ログが意図した範囲を超えて公開される可能性があります。
  • 書き込みや管理権限も許可すると、不要なオブジェクトの変更・削除やバケット設定の変更を許すおそれがあります。

対処方法

  • 公開アクセスが不要な場合はallUsersとallAuthenticatedUsersを削除し、必要なユーザー、グループ、サービスアカウントに最小限のロールだけを付与してください。空の一覧を埋めるためだけに任意の主体を追加せず、不要なバインディングは削除してください。
  • google_storage_bucket_iam_bindingはそのロールのメンバー一覧を管理するため、必要な既存メンバーを維持し、Terraformの計画を確認してください。
  • 公開アクセスの防止設定と、ほかのIAMポリシーやACLも確認し、必要なアクセスと拒否すべきアクセスをテストしてください。均一なバケットレベルのアクセスを有効にするだけでは、公開IAM権限は削除されません。

例

google_storage_bucket.defaultを別途定義し、例のアカウントjane@example.comを必要な実際のアカウントに置き換えてください。既存の構成に適用する場合は、リソース名の変更も含めてTerraformの計画を確認してください。

変更前

hcl
resource "google_storage_bucket_iam_binding" "public_binding" {
  bucket  = google_storage_bucket.default.name
  role    = "roles/storage.admin"
  members = ["user:jane@example.com", "allUsers"]
}

allUsersに、バケットとオブジェクトを管理できるroles/storage.adminを付与しています。公開アクセスの防止設定などで遮断されていなければ、必要な範囲を大幅に超える公開権限になる可能性があります。

変更後

hcl
resource "google_storage_bucket_iam_binding" "restricted_binding" {
  bucket  = google_storage_bucket.default.name
  role    = "roles/storage.admin"
  members = [
    "user:jane@example.com",
  ]
}

公開主体を削除し、特定のユーザーだけを残しています。そのユーザーには引き続きroles/storage.adminが付与されるため、業務上必要なロールかを確認し、可能であればより限定したロールを使ってください。

参考資料