G-gen の渡邉@norry です。Compute Engine VM にアタッチするサービスアカウントと、VM のアクセススコープの概念について整理しました。
はじめに
Google Cloud(旧称 GCP)の Compute Engine では、VM を作成する時にデフォルトで Compute Engine のデフォルトサービスアカウントがアタッチされます。
このサービスアカウントの権限とアクセススコープの範囲によっては、意図しないセキュリティホールが生まれる可能性があります。例えば、悪意を持った第三者が仮想マシンから gcloud コマンドを操作して新たな仮想マシンを起動し、暗号通貨の採掘(クリプトマイニング)を行うなどの事故が考えられます。
今回の記事では、改めて Compute Engine におけるサービスアカウントとアクセススコープの概念を整理します。
前提知識
サービスアカウントとアクセススコープ
Compute Engine におけるサービスアカウントとアクセススコープの基礎知識については、以下の記事の サービスアカウントとアクセススコープ の項をご参照ください。
アクセススコープは、サービスアカウントの権限に「フタをする」ような挙動をすると考えれば分かりやすくなります。
当記事では、上記の点について検証します。
IAM
Google Cloud のリソースと IAM の関係性については、以下の記事を参照してください。
検証
「デフォルトのアクセス権を許可」の場合
VM を新規作成します。アタッチするサービスアカウントとして、Compute Engine default service account を選択します。アクセススコープ設定は デフォルトのアクセス権を許可 を選択します。

VM 作成後に、詳細画面の セキュリティとアクセス のブロックの下にある、API と ID の管理 の項目で、VM にアタッチされているサービスアカウントと、設定されているアクセススコープが確認できます。さらに、Show detials を押下すると、アクセススコープの詳細が確認できます。

デフォルトのアクセス権を許可 だと、Compute Engine API や BigQuery API へのアクセス許可は無効となっている事が分かります。反対に、許可されているのは Cloud Logging(旧称 Stackdriver Logging)や、Cloud Monitoring(旧称 Stackdriver Monitoring)への書き込みです。これは、Cloud Logging へログを送信したり、Cloud Monitoring へメトリクスを送信できることを意味しています。また、Cloud Storage(画面上は「ストレージ」と記載)への読み取りも許可されています。
この状態で VM に SSH 接続し、gcloud コマンドで VM を作成することを試みます。
norry@instance-1:~$ gcloud compute instances create instance-2 Did you mean zone [asia-northeast2-a] for instance: [instance-2] (Y/n)? Y ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Request had insufficient authentication scopes.
リクエストの認証スコープが不足している(Request had insufficient authentication scopes.)と表示され、VM が作成出来ませんでした。アクセススコープで制限されているため、このようなエラーとなります。
「すべての Cloud API に完全アクセス権を許可」の場合
次にアクセススコープを すべての Cloud API に完全アクセス権を許可 にします。この設定では、アクセススコープではアクセス先 API を制限しない状態になります。この設定にした場合、サービスアカウントが権限を持ってさえいれば、すべての操作が実行できます。
VM のアクセススコープを変更するには一度 VM を停止する必要があります。

設定変更が完了したら、再度 VM に SSH 接続し、gcloud コマンドで VM を作成してみます。
norry@instance-1:~$ gcloud compute instances create instance-2 Did you mean zone [asia-northeast2-a] for instance: [instance-2] (Y/n)? Y Created [https://www.googleapis.com/compute/v1/projects/xxxxxx/zones/asia-northeast2-a/instances/instance-2]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS instance-2 asia-northeast2-a n1-standard-1 RUNNING
上記のように、VM の作成が成功しました。アクセススコープではアクセス先 API が絞られていないためです。サービスアカウントが VM 作成権限を持っているので、操作が成功しました。
次に、アクセススコープが すべての Cloud API に完全アクセス権を許可 であっても、サービスアカウントが権限を持っていない操作は行えないことを、念のために確認します。
VM のアクセススコープは すべての Cloud API に完全アクセス権を許可 のままで、サービスアカウントの IAM ロールを編集者から閲覧者へ変更します。

再度 VM に SSH 接続し、gcloud コマンドにて VM を作成してみます。
norry@instance-1:~$ gcloud compute instances create instance-3 Did you mean zone [asia-northeast2-a] for instance: [instance-3] (Y/n)? ERROR: (gcloud.compute.instances.create) Could not fetch resource:
上記のように、サービスアカウントが権限を持っていない操作が拒否されることが確認できました。
まとめと補足
IAM の権限とアクセススコープ
サービスアカウントの持つ権限と、VM のアクセススコープ設定の状態ごとの、操作実行可否を表に表すと以下のとおりです。
| アクセススコープ : デフォルト |
アクセススコープ : すべての Cloud API |
|
|---|---|---|
| サービスアカウント : 編集者 |
✕ (アクセススコープで拒否) | ◯ (両方で許可) |
| サービスアカウント : 閲覧者 |
✕ (アクセススコープで拒否) | ✕ (IAM で拒否) |
VM のアクセススコープ設定が デフォルトのアクセス権を許可 では Compute Engine API への操作が無効なので、サービスアカウントに十分な権限があっても新たに VM を作成する事が出来ませんでした。
反対に、VM のアクセススコープ設定が すべての Cloud API に完全アクセス権を許可 であっても、サービスアカウントに権限がなければ VM を作ることはできません。
VM のアクセススコープ設定は、サービスアカウントの権限に「フタをする」ような挙動をすると考えればよいでしょう。
最小権限の原則を意識する
情報システムの権限管理においては、アカウントに対しては必要最小限の権限だけ与えるべきだという「最小権限の原則」が基本となります。
しかしながら、Compute Engine デフォルトのサービスアカウントが自動的に作成される際には、プロジェクトレベルで編集者(roles/editor)ロールが付与されてしまいます。
編集者は、強力なロールです。何も意識しなければ、VM のアクセススコープは デフォルトのアクセス権を許可 のはずなので、操作可能範囲はある程度制限されていますが、意図せずアクセススコープを すべての Cloud API に完全アクセス権を許可 などに設定してしまうと、かなり広い範囲の操作が可能になってしまいますため、十分注意が必要です。
この仕様への対処として、組織のポリシーで以下を設定することができます。
| 制約名 | ID | 説明 |
|---|---|---|
| デフォルトのサービス アカウントに対する IAM ロールの自動付与の無効化 | constraints/iam.automaticIamGrantsForDefaultServiceAccounts | 有効化することでデフォルト Compute Engine サービスアカウント作成時に編集者権限が付与されなくなる |
なお上記の制約は、2024年初頭以降に新しく作成された Google Cloud 組織では、はじめから有効化されている場合があります。
組織のポリシーについては、以下の記事も参照してください。
渡邉 宣之 (記事一覧)
クラウドソリューション部
AI/ML、アプリケーションモダナイゼーション、データ分析基盤の構築、クラウド管理運用やネットワークなどインフラ系は何でも、Google Workspace 活用も推進中
週末フォトグラファーで、観葉植物や塊根植物にハマっていて種から育ててます。