【正解】C
【0からの解説】
①前提知識
IAM のロールには、基本ロール(オーナー・編集者・閲覧者)、事前定義ロール(サービスごとに Google が用意したもの。例: roles/compute.instanceAdmin.v1)、カスタムロール(必要な権限だけを自分で選んで作るもの)の 3 種類があります。ロールは「権限(permission)」の集合で、Compute Engine の VM 操作では compute.instances.start(起動)、compute.instances.stop(停止)、compute.instances.reset(リセット)、compute.instances.delete(削除)、compute.instances.setMetadata(メタデータ変更)などの個別の権限があります。事前定義ロールに必要な権限の組み合わせがない場合は、カスタムロールで最小権限を実現するのが Google の推奨です。
②要件と制約語の整理
・既存 VM の起動・停止・リセットだけをできるようにする
・削除、ネットワーク・構成の変更は禁止
・「必要最小限の権限」=最小権限の原則
③正解の理由
compute.instances.start / stop / reset のみを含むカスタムロールを作成してプロジェクトで付与すれば、許可したい 3 つの操作だけが可能になり、削除や設定変更に必要な権限は一切含まれません。最小権限を最も正確に実現できます。補足として、コンソールでインスタンスの一覧を見て操作するには compute.instances.list や compute.instances.get などの読み取り権限も合わせて含めるのが実務上一般的ですが、その場合も削除・変更系の権限は含めません。
【誤りの選択肢】
A:roles/writer という Compute Engine 用の事前定義ロールは存在しません。仮に書き込み系の広いロールを付けて resource.type 条件で VM に限定しても、条件で絞れるのは「どのリソースに対して」であり、「どの操作を」許すかは絞れません。VM の削除や設定変更もできてしまい、要件に反します。
B:roles/compute.instanceAdmin.v1 は VM の作成・削除・メタデータやディスクの変更など幅広い権限を含みます。IAM 条件(IAM Conditions)はリソース名・リソースタイプ・日時などの属性に基づいてロール付与全体の有効・無効を決める仕組みで、ロールに含まれる個別の権限を除外する機能はありません。そのため delete を外すことはできず、ネットワークや構成の変更も防げません(権限単位で禁止したい場合は IAM 拒否ポリシーという別の仕組みになりますが、それでも過剰な付与であることに変わりはありません)。
D:roles/compute.viewer は読み取り専用のロールで、start / stop / reset の権限を含みません。コンソールで操作を指示しても、権限不足で起動・停止・リセットは失敗します。
【参考】
カスタムロールの作成と管理 | Identity and Access Management (IAM)Compute Engine IAM のロールと権限IAM Conditions の概要 | Identity and Access Management (IAM)