このページでは、親リソース(プロジェクト、フォルダ、組織など)ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を実行する方法を説明します。
リソースへのアクセスを許可するには、リソースに Identity and Access Management(IAM)ポリシーを設定します。このポリシーでは、ユーザーやサービス アカウントなどの 1 つ以上のメンバーを 1 つ以上のロールにバインドします。各ロールには、メンバーがリソースを操作できる権限のリストが含まれています。
親リソース(プロジェクトなど)にアクセス権を付与すると、そのすべての子リソース(そのプロジェクト内のすべての VM など)にもアクセス権が付与されることになります。リソースへのアクセスを制限するには、可能であれば、プロジェクト レベル以上のリソースではなく、下位レベルのリソースで IAM ポリシーを設定します。
Compute Engine と関係のないリソースへのアクセス権(たとえば、Google Cloud プロジェクトへのアクセス権)を付与、変更、取り消す方法については、IAM ドキュメントでリソースへのアクセス権の付与、変更、取り消しをご覧ください。
始める前に
- IAM の概要を確認します。
- Compute Engine のアクセス制御の概要を読みます。
- Compute Engine の IAM ロールをよく理解します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
必要なロール
Compute Engine リソースへのアクセスを管理するために必要な権限を取得するには、リソースに対する Compute 管理者(roles/compute.admin
)IAM ロールの付与を管理者に依頼してくださいロールの付与の詳細については、アクセス権の管理をご覧ください。
この事前定義ロールには、Compute Engine リソースへのアクセスの管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
Compute Engine リソースへのアクセスを管理するには、次の権限が必要です。
-
リソースへのアクセス権を付与または取り消す:
- プロジェクトに対する
compute.projects.get
-
リソースに対する
compute.RESOURCE_TYPE.get
-
リソースに対する
compute.RESOURCE_TYPE.getIamPolicy
-
リソースに対する
compute.RESOURCE_TYPE.setIamPolicy
- プロジェクトに対する
-
呼び出し元の権限をテストする: リソースに対する
compute.RESOURCE_TYPE.getIamPolicy
RESOURCE_TYPE はアクセスを管理するリソースに置き換えます。たとえば、
instances
、instanceTemplates
、images
です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
サポートされているリソース
リソースレベルのアクセス制御をサポートする Compute Engine リソースの一覧を表示するには、IAM ポリシーを受け入れるリソースタイプと Compute Engine 用のフィルタをご覧ください。
リソースレベルのアクセス制御をサポートしていない Compute Engine リソースの場合は、これらのリソースへのアクセスをプロジェクト フォルダ レベル、または組織レベルで管理する必要があります。組織、フォルダ、プロジェクトについては、リソース階層をご覧ください。
Compute Engine リソースへのアクセスの許可
プリンシパル(ユーザーやサービス アカウントなど)は、Compute Engine リソースにアクセスできます。ID はプリンシパルのプロパティです。通常、プリンシパルの ID は、アカウントに関連付けられたメールアドレスで表されます。
リソースに対する IAM のロールをプリンシパルに付与する前に、特定のリソースに関して付与できるロールの種類を確認してください。詳細については、リソースに対して付与可能なロールの表示をご覧ください。
特定の Compute Engine リソースへのアクセス権を付与するには、そのリソースで IAM ポリシーを設定します。
コンソール
- Google Cloud Console で、権限を追加するそれぞれのリソースページに移動します。
- インスタンスの場合は、[VM インスタンス] ページに移動します。
- ゾーンディスクとリージョン ディスクの場合は、[ディスク] ページに移動します。
- スナップショットの場合は、[スナップショット] ページに移動します。
- イメージの場合は、[イメージ] ページに移動します。
- インスタンス テンプレートの場合は、[インスタンス テンプレート] ページに移動します。
- マシンイメージの場合は、[マシンイメージ] ページに移動します。
- 予約の場合は、[予約] ページに移動します。
- 単一テナントノードの場合は、[単一テナントノード] ページに移動します。
- 更新するリソースの横にあるチェックボックスをオンにします。
- リソースページに基づいて、次の手順を行います。
- VM インスタンスの場合は、[ 権限] をクリックします。
- 他のすべてのリソースについては、次の操作を行います。
- 情報パネルが表示されているかどうかを確認します。表示されていない場合は、[情報パネルを表示] をクリックします。
- [権限] タブを選択します。
- [ プリンシパルを追加] をクリックします。
- プリンシパルの ID を追加し、必要なロールを選択します。
- 変更を保存するには、[保存] をクリックします。
gcloud
リソースに対するロールをプリンシパルに付与するには、--member
フラグと --role
フラグを指定して、そのリソースの add-iam-policy-binding
サブコマンドを使用します。
gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \ --member='PRINCIPAL' \ --role='ROLE'
次のように置き換えます。
RESOURCE_TYPE
: リソースのタイプ。有効な値は次のとおりです。disks
images
instances
instance-templates
machine-images
reservations
sole-tenancy node-groups
sole-tenancy node-templates
snapshots
RESOURCE_NAME
: リソースの名前。例:my_instance
PRINCIPAL
: ロールを付与するプリンシパルの有効な ID。形式はuser|group|serviceAccount:EMAIL_ADDRESS
またはdomain:DOMAIN_ADDRESS
にする必要があります。例:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
: このプリンシパルを割り当てるロール。
プレビュー版のリソースへのアクセス権を付与する場合は、代わりに gcloud beta compute
コマンドを使用します。
REST
API を使用して IAM ポリシーを変更するには、次の手順を実行します。
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。たとえば、次の HTTP リクエストでは VM の IAM ポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: この VM が属するプロジェクトのプロジェクト ID。ZONE
: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/ZONE
をregions/REGION
またはglobal
に置き換えます。VM_NAME
: VM インスタンスの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、プリンシパルとそれに関連するロールを追加または削除します。たとえば、
compute.admin
ロールを email@example.com に付与するには、次の新しいバインディングをポリシーに追加します。{ "members": [ "user:email@example.com" ], "role":"roles/compute.admin" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: この VM が属するプロジェクトのプロジェクト ID。ZONE
: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/ZONE
をregions/REGION
またはglobal
に置き換えます。VM_NAME
: VM インスタンスの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
リソースへのアクセス権の取り消し
Compute Engine リソースへのアクセスが不要になったプリンシパルに対しては、アクセス権を取り消すことをおすすめします。
コンソール
- Google Cloud Console で、権限を追加するそれぞれのリソースページに移動します。
- インスタンスの場合は、[VM インスタンス] ページに移動します。
- ゾーンディスクとリージョン ディスクの場合は、[ディスク] ページに移動します。
- スナップショットの場合は、[スナップショット] ページに移動します。
- イメージの場合は、[イメージ] ページに移動します。
- インスタンス グループの場合は、[インスタンス グループ] ページに移動します。
- インスタンス テンプレートの場合は、[インスタンス テンプレート] ページに移動します。
- マシンイメージの場合は、[マシンイメージ] ページに移動します。
- 予約の場合は、[予約] ページに移動します。
- 単一テナントノードの場合は、[単一テナントノード] ページに移動します。
- 更新するリソースの横にあるチェックボックスをオンにします。
- リソースページに基づいて、次の手順を行います。
- VM インスタンスの場合は、[ 権限] をクリックします。
- 他のすべてのリソースについては、次の操作を行います。
- 情報パネルが表示されているかどうかを確認します。表示されていない場合は、[情報パネルを表示] をクリックします。
- [権限] タブを選択します。
- プリンシパルを削除するロールカードをクリックします。カードが展開され、そのリソースに対するロールを持つユーザーが表示されます。
- そのロールからプリンシパルを削除するには、[ 削除] をクリックします。
gcloud
リソースのプリンシパルからロールを削除するには、--member
フラグと --role
フラグを指定して、リソースの remove-iam-policy-binding
サブコマンドを使用します。
gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
RESOURCE_TYPE
: リソースのタイプ。有効な値は次のとおりです。disks
images
instances
instance-templates
machine-images
reservations
sole-tenancy node-groups
sole-tenancy node-templates
snapshots
RESOURCE_NAME
: リソースの名前。例:my_instance
PRINCIPAL
: プリンシパルの有効な ID。形式はuser|group|serviceAccount:EMAIL_ADDRESS
またはdomain:DOMAIN_ADDRESS
にする必要があります。例:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
: プリンシパルを削除するロール。
プレビューのリソースへのアクセス権限を取り消すには、代わりに gcloud beta compute
コマンドを使用します。
REST
API を使用して IAM ポリシーを直接変更するには、次の手順に従います。
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。たとえば、次の HTTP リクエストでは VM の IAM ポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: この VM が属するプロジェクトのプロジェクト ID。ZONE
: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/ZONE
をregions/REGION
またはglobal
に置き換えます。VM_NAME
: VM インスタンスの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、メンバーを関連するロールから削除します。たとえば、
compute.admin
のロールから email@example.com を削除します。{ "members": [ "user:owner@example.com" ], "role":"roles/compute.admin" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: この VM が属するプロジェクトのプロジェクト ID。ZONE
: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/ZONE
をregions/REGION
またはglobal
に置き換えます。VM_NAME
: VM インスタンスの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
呼び出し元の権限の有無のテスト
ID が持つ権限がわからない場合は、testIamPermissions
API メソッドを使用して、ID に付与されている権限を確認します。
このメソッドに入力パラメータとしてリソース URL と一連の権限を渡すと、呼び出し元に許可されている一連の権限が返されます。このメソッドは、サポートされているリソースのすべてで使用できます。
通常、testIamPermissions
は、カスタマイズされたグラフィカル ユーザー インターフェースなど、お客様独自のソフトウェアとの統合を目的としています。一般的に、Google Cloud で権限を直接管理している場合、testIamPermissions
は呼び出しません。
たとえば、Compute Engine API を基盤とする GUI を構築し、その GUI にインスタンスを起動する「スタート」ボタンを配置する場合などに、compute.instances.testIamPermissions()
を呼び出して、ボタンを有効または無効にするかを決定できます。
リソースに対する呼び出し元の特定の権限の有無をテストするには:
リクエスト本文にチェック対象の権限のリストを含めたリクエストをリソースに送信します。
たとえば、あるインスタンスの
compute.instances.start
、compute.instances.stop
、compute.instances.delete
をチェックする場合は、次のようにします。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/testIamPermissions { "permissions": [ "compute.instances.start", "compute.instances.stop", "compute.instances.delete" ] }
リクエストにより、呼び出し元で有効になっている権限が返されます。
{ "permissions": [ "compute.instances.start", "compute.instances.stop" ] }
複数のメンバーのリソース アクセス権の変更
複数のメンバーを対象として Compute Engine リソースへのアクセス権を同時に変更する場合は、プログラムで IAM ポリシーを変更する方法に関する推奨事項を確認してください。
次のステップ
- IAM を使用してカスタム イメージへのアクセスを管理する方法を学習する。
- サービス アカウントの詳細を確認する。
- Compute Engine IAM のロールの詳細を確認する。
- Compute Engine IAM の事前定義ロールに含まれる権限の詳細を確認する。
- カスタムロールの作成と管理の方法を確認する。