Compute Engine リソースへのアクセスの管理

このガイドでは、親リソース(プロジェクト、フォルダ、組織など)ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を実行する方法を説明します。

リソースへのアクセスを許可するには、リソースに Identity and Access Management(IAM)ポリシーを設定します。このポリシーでは、ユーザーやサービス アカウントなどの 1 つ以上のメンバーを 1 つ以上のロールにバインドします。各ロールには、メンバーがリソースを操作できる権限のリストが含まれています。

親リソース(プロジェクトなど)にアクセス権を付与すると、そのすべての子リソース(そのプロジェクト内のすべての VM など)にもアクセス権が付与されることになります。リソースへのアクセスを制限するには、可能であれば、プロジェクト レベル以上のリソースではなく、下位レベルのリソースで IAM ポリシーを設定します。

Compute Engine と関係のないリソースへのアクセス権(たとえば、Google Cloud プロジェクトへのアクセス権)を付与、変更、取り消す方法については、IAM ドキュメントでリソースへのアクセス権の付与、変更、取り消しをご覧ください。

始める前に

サポートされているリソース

Compute Engine では、次のリソースに対するリソースレベルのアクセス制御がサポートされています。

他の Compute Engine リソースはリソースレベルのアクセス制御に対応していないため、他のタイプのリソースへのアクセスについては、プロジェクト、フォルダ、組織レベルで管理する必要があります。組織、フォルダ、プロジェクトについては、リソース階層をご覧ください。

Compute Engine リソースへのアクセス権の付与

リソースに対する IAM のロールをユーザーに付与する前に、特定のリソースに関して付与できるロールの種類を確認してください。詳細については、リソースに対して付与可能なロールの表示をご覧ください。

特定の Compute Engine リソースへのアクセス権をユーザーに付与するには、そのリソースで IAM ポリシーを設定します。

Console

  1. Google Cloud Console で、権限を追加するそれぞれのリソースページに移動します。
  2. 更新するリソースの横にあるチェックボックスをオンにします。
  3. [情報パネルを表示] をクリックして、権限の列を展開します。
  4. [メンバーを追加] フィールドに 1 人以上のメンバーを追加します。
  5. [役割を選択] リストで 1 つ以上の役割を選択します。
  6. [追加] をクリックして変更内容を保存します。

gcloud

リソースに対するロールをメンバーに付与するには、--member フラグと --role フラグを指定して、リソースの add-iam-policy-binding サブコマンドを使用します。

gcloud compute resource-type add-iam-policy-binding resource-name \
    --member='member' \
    --role='role'

以下を置き換えます。

  • resource-type: リソースのタイプ。有効な値は次のとおりです。
    • disks
    • images
    • instances
    • instance-templates
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: リソースの名前。例: my_instance
  • member: ロールを付与する有効な ID。形式は user|group|serviceAccount:email または domain:domain にする必要があります。たとえば、次のようにします。
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • role: この ID を割り当てるロール。

現在ベータ版のリソースへのアクセス権を付与するには、代わりに gcloud beta compute コマンドを使用します。

API

API を使用して IAM ポリシーを変更するには、次の手順を実行します。

  1. リソースのそれぞれの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。たとえば、次の HTTP リクエストでは VM の IAM ポリシーを読み取ります。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    以下を置き換えます。

    • project-id: この VM が属するプロジェクト ID。
    • zone: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/zoneregions/region または global に置き換えます。
    • instance: VM インスタンスの名前。

    Compute Engine からレスポンスとして現在のポリシーが返されます。

  2. テキスト エディタでポリシーを編集して、メンバーおよび関連するロールを追加または削除します。たとえば、compute.admin ロールを email@example.com に付与するには、次の新しいバインディングをポリシーに追加します。

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. setIamPolicy() を使用して、更新したポリシーを書き込みます。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    以下を置き換えます。

    • project-id: この VM が属するプロジェクト ID。
    • zone: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/zoneregions/region または global に置き換えます。
    • instance: VM インスタンスの名前。

    リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

リソースへのアクセス権の取り消し

Compute Engine リソースへのアクセスが不要になったメンバーに対しては、アクセス権を取り消すことをおすすめします。

Console

  1. Google Cloud Console で、権限を追加するそれぞれのリソースページに移動します。
  2. 更新するリソースの横にあるチェックボックスをオンにします。
  3. [情報パネルを表示] をクリックして、権限の列を展開します。
  4. メンバーを削除するリソースに対するロールカードをクリックします。カードが展開され、そのリソースに対するロールを持つメンバーが表示されます。
  5. [削除] をクリックして、そのロールからメンバーを削除します。

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
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: リソースの名前。たとえば、my_instance です。
  • member: 削除する ID。形式は user|group|serviceAccount:email または domain:domain にする必要があります。たとえば、次のようにします。
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • role: ID を削除するロール。

現在ベータ版のリソースへのアクセス権限を取り消すには、代わりに gcloud beta compute コマンドを使用します。

API

API を使用して IAM ポリシーを直接変更するには、次の手順に従います。

  1. リソースのそれぞれの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。たとえば、次の HTTP リクエストでは VM の IAM ポリシーを読み取ります。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    以下を置き換えます。

    • project-id: この VM インスタンスのプロジェクト ID。
    • zone: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/zoneregions/region または global に置き換えます。
    • instance: VM インスタンスの名前。

    Compute Engine からレスポンスとして現在のポリシーが返されます。

  2. テキスト エディタでポリシーを編集して、メンバーを関連するロールから削除します。たとえば、compute.admin のロールから email@example.com を削除します。

    {
      "members": [
        "user:owner@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. setIamPolicy() を使用して、更新したポリシーを書き込みます。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    以下を置き換えます。

    • project-id: この VM が属するプロジェクト ID。
    • zone: VM のゾーン。リージョン リソースまたはグローバル リソースの場合は、zones/zoneregions/region または global に置き換えます。
    • instance: VM インスタンスの名前。

    リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

呼び出し元の権限の有無のテスト

ID が持つ権限がわからない場合は、testIamPermissions API メソッドを使用して、ID に付与されている権限を確認します。

このメソッドに入力パラメータとしてリソース URL と一連の権限を渡すと、呼び出し元に許可されている一連の権限が返されます。このメソッドは、サポートされているリソースのすべてで使用できます。

通常、testIamPermissions は、カスタマイズされたグラフィカル ユーザー インターフェースなど、お客様独自のソフトウェアとの統合を目的としています。一般的に、Google Cloud で権限を直接管理している場合、testIamPermissions は呼び出しません。

たとえば、Compute Engine API を基盤とする GUI を構築し、その GUI にインスタンスを起動する「スタート」ボタンを配置する場合などに、compute.instances.testIamPermissions() を呼び出して、ボタンを有効または無効にするかを決定できます。

リソースに対する呼び出し元の特定の権限の有無をテストするには:

  1. リクエスト本文にチェック対象の権限のリストを含めたリクエストをリソースに送信します。

    たとえば、あるインスタンスの compute.instances.startcompute.instances.stopcompute.instances.delete をチェックする場合は、次のようにします。

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-name/setIamPolicy
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. リクエストにより、呼び出し元で有効になっている権限が返されます。

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

複数のメンバーのリソース アクセス権の変更

複数のメンバーを対象として Compute Engine リソースへのアクセス権を同時に変更する場合は、プログラムで IAM ポリシーを変更する方法に関する推奨事項を確認してください。

次のステップ