説明
広い OAuth スコープである cloud-platform 自体が、すべての Google Cloud 権限を付与するわけではありません。実際の API アクセスにはサービスアカウントの IAM 権限が必要です。Google は通常、cloud-platform と最小限の IAM ロールを組み合わせる方式を推奨しています。
IAM 権限が過剰だと VM 侵害の影響が大きくなります。スコープを狭めるだけでは、すべての認証方式や権限を制御できません。
想定される影響
- 過剰な IAM ロールを持つ VM が侵害されると、複数のリソースに被害が及ぶおそれがあります。
- 必要なスコープを削除すると、正当な API 呼び出しが失敗する場合があります。
対処方法
- 接続されたサービスアカウントを確認し、必要なリソースと操作だけを IAM ロールで許可してください。cloud-platform があるという理由だけで削除しないでください。
- 別の要件で狭いスコープを使う場合は、必要な API と認証方式との互換性を確認してください。変更後は必要な呼び出しが成功し、不要な呼び出しが拒否されることをテストしてください。
例
OAuth スコープだけを比較し、IAM ロールは定義しない例です。古いイメージとネットワークを実際の値に置き換え、サービスアカウントの実効権限を確認してください。変更後は限定スコープが必要な環境での選択肢であり、すべての環境に必要な修正ではありません。
変更前
hcl
resource "google_compute_instance" "vm" {
name = "test"
machine_type = "e2-medium"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {}
}
service_account {
scopes = ["userinfo-email", "compute-ro", "storage-ro", "cloud-platform"]
}
}
変更後
hcl
resource "google_compute_instance" "vm" {
name = "test"
machine_type = "e2-medium"
zone = "us-central1-a"
boot_disk {
initialize_params {
image = "debian-cloud/debian-9"
}
}
network_interface {
network = "default"
access_config {}
}
service_account {
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
}
補足:
- 変更前: cloud-platform を含みますが、実際の権限は IAM ロールに制限されます。
- 変更後: スコープを狭めます。必要な呼び出しが失敗しないか確認してください。最小権限の IAM を代替するものではありません。