説明
デフォルトの Compute Engine サービスアカウントは IAM ポリシーによって広範な権限を持つ場合がありますが、デフォルトであるだけですべての API 権限を持つわけではありません。必要なリソースにアクセスを限定した専用アカウントは、権限の確認を容易にします。
アカウント名を変えるだけでは最小権限になりません。割り当てられた IAM ロールと、そのアカウントを使用できる主体を併せて確認してください。
想定される影響
- 侵害された VM から、接続したアカウントの権限範囲へ被害が広がるおそれがあります。
- 複数のワークロードで共有すると、権限変更の影響や利用主体を把握しにくくなる場合があります。
対処方法
- Google Cloud API を使う VM には、
service_account.emailで適切な専用アカウントを指定し、最小限の IAM ロールを付与してください。API アクセスが不要なら、アカウントを接続する必要自体を検討してください。 - デフォルトアカウントの Editor などの広範な実効権限と依存ワークロードを確認してから、不要な権限を削減してください。即時の削除や無効化で既存サービスを停止させないようにしてください。
例
古いイメージ、ネットワーク、メールアドレスは実際の値に置き換えてください。IAM ロールは省略しており、スコープだけで権限は付与されません。cloud-platform と最小限の 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 {
email = "123456789-compute@developer.gserviceaccount.com"
scopes = ["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 {
email = "app-runtime@my-project.iam.gserviceaccount.com"
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
}
補足:
- 変更前: デフォルトアカウントと cloud-platform スコープを使います。実際の権限は IAM ロールなどにも依存します。
- 変更後: 専用アカウントと狭いスコープを指定します。ワークロードに必要な IAM ロールは別途確認してください。