カスタム イメージへのアクセスを管理する


ユーザーがカスタム イメージを作成、削除、使用、共有できるようにするには、ユーザーに Identity and Access Management(IAM)の適切なロールを付与する必要があります。このドキュメントでは、カスタム イメージの作成と管理に必要な IAM 権限と、ユーザーにイメージを提供する方法について説明します。

Compute Engine リソースへのアクセス権限の付与に関する一般情報については、Compute Engine リソースへのアクセスの管理をご覧ください。IAM については、IAM のドキュメントをご覧ください。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud のサービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

      必要なロール

      カスタム イメージへのアクセスを管理するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

      ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

      これらの事前定義ロールには、カスタム イメージへのアクセスを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

      必要な権限

      カスタム イメージへのアクセスを管理するには、次の権限が必要です。

      • ユーザーまたはサービス アカウントに、カスタム イメージの作成と共有に必要な権限を付与するには、次の操作を行います。
        • プロジェクトに対する resourcemanager.projects.getIamPolicy
        • プロジェクトに対する resourcemanager.projects.setIamPolicy
      • ユーザーまたはサービス アカウントにカスタム イメージの削除に必要な権限を付与するには:
        • プロジェクトに対する resourcemanager.projects.getIamPolicy
        • プロジェクトに対する resourcemanager.projects.setIamPolicy
        • 画像の compute.images.getIamPolicy
        • 画像に対する compute.images.setIamPolicy
      • ユーザーまたはサービス アカウントのカスタム イメージへのアクセス権を取り消すには:
        • プロジェクトに対する resourcemanager.projects.getIamPolicy
        • プロジェクトに対する resourcemanager.projects.setIamPolicy
      • 共有イメージを使用して VM を作成するには:
        • プロジェクトに対する compute.instances.create
        • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
        • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
        • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
        • レガシー ネットワークを VM に割り当てる: プロジェクトに対する compute.networks.use
        • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
        • レガシー ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.useExternalIp
        • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
        • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
        • VM の VM インスタンス メタデータを設定する: プロジェクトに対する compute.instances.setMetadata
        • VM にタグを設定する: VM に対する compute.instances.setTags
        • VM にラベルを設定する: VM に対する compute.instances.setLabels
        • VM が使用するサービス アカウントを設定する: VM に対する compute.instances.setServiceAccount
        • VM に新しいディスクを作成する: プロジェクトに対する compute.disks.create
        • 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する compute.disks.use
        • 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する compute.disks.useReadOnly

      カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

      制限事項

      イメージについては、特殊なメンバータイプ allUsers にロールを付与することはできません。

      カスタム イメージを作成する権限を付与する

      ユーザーに、組織またはプロジェクトでのカスタム イメージの作成を可能にする権限を付与できます。

      Compute Engine には、事前定義された Compute ストレージ管理者ロールroles/compute.storageAdmin)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの作成のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。

      • 新しいイメージの作成を許可する compute.images.create
      • プロジェクト内のイメージの一覧表示を許可する compute.images.list
      • compute.disks.use(ディスクからイメージを作成する場合)
      • compute.disks.list(プロジェクト内のすべてのディスクを一覧表示する場合)

      ユーザーに組織レベルでカスタム イメージを作成する権限を付与した場合、そのユーザーは組織内の任意のプロジェクトのカスタム イメージを作成できます。

      コンソール

      1. Google Cloud コンソール で、プロジェクトまたは組織の [IAM] ページに移動します。

        IAM に移動

      2. 新しいメンバーを追加するには、[ アクセスを許可] をクリックします。

      3. [新しいプリンシパル] フィールドに、アクセスを付与する ID のメールアドレスを入力します。

        次に例を示します。

        • Google アカウントのメールアドレス: test-user@gmail.com
        • Google グループ: admins@googlegroups.com
        • サービス アカウント: server@example.gserviceaccount.com
        • Google Workspace ドメイン: example.com
      4. [ロールを選択] リストで、[Compute Engine] > [Compute ストレージ管理者] を選択します。カスタムロールを作成した場合は、そのロールを選択します。

      5. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      6. 変更を保存します。

      gcloud

      組織レベルで roles/compute.storageAdmin ロールを付与するには、gcloud organizations add-iam-policy-binding コマンドを使用します。

      gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
          --member='MEMBER' \
          --role='roles/compute.storageAdmin'
      

      プロジェクト レベルで roles/compute.storageAdmin ロールを付与するには、gcloud projects add-iam-policy-binding コマンドを使用します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member='MEMBER' \
          --role='roles/compute.storageAdmin'
      

      次のように置き換えます。

      • ORGANIZATION_ID または PROJECT_ID: 組織 ID またはプロジェクト ID。たとえば、my-organization-1my-project-1 です
      • MEMBER: ロールを付与する有効な ID

        次に例を示します。

        • Google アカウントのメールアドレス: user:user@gmail.com
        • Google グループ: group:admins@googlegroups.com
        • サービス アカウント: serviceAccount:server@example.gserviceaccount.com
        • Google Workspace ドメイン: domain:example.com

      REST

      1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy メソッドを使用します。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
        

        PROJECT_ID は、プロジェクト ID に置き換えます(例: my-project-1)。

        組織の場合は、organizations.getIamPolicy メソッドを使用します。

        POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
        

        ORGANIZATION_ID は、組織 ID に置き換えます(例: 123456578920)。

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

      2. メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com

        たとえば、roles/compute.storageAdmin ロールを group:admins@example.com に付与するには、次のバインディングをポリシーに追加します。

        {
         "members": [
           "group:admins@example.com"
         ],
         "role":"roles/compute.storageAdmin"
        }
        
      3. setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。

        たとえば、ポリシーをプロジェクト レベルで設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
        

        PROJECT_ID の部分は、プロジェクト ID で置き換えます。

      カスタム イメージを削除する権限を付与する

      必要に応じて、次の権限をユーザーに付与できます。

      • 特定のイメージを削除する
      • 特定のプロジェクトが所有するイメージを削除する
      • 組織内の任意のプロジェクトからイメージを削除する

      プロジェクト レベルで権限を付与すると、ユーザーはそのプロジェクトが所有するすべてのイメージを削除できます。組織レベルで権限を付与すると、プロジェクトに関係なく、ユーザーは組織が所有する任意のイメージを削除できます。

      Compute Engine には、事前定義された Compute ストレージ管理者ロールroles/compute.storageAdmin)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの削除のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。

      • イメージの削除を許可する compute.images.delete
      • compute.images.list(ユーザーがプロジェクトまたは組織内のイメージを一覧表示する必要がある場合)
      • イメージの取得を許可する compute.images.get

      コンソール

      特定のイメージを削除する権限を付与するには、次の手順を行います。

      1. Google Cloud Console で、[イメージ] ページに移動します。

        [イメージ] に移動

      2. 権限を付与する対象のイメージを選択します。

      3. [権限] 列を展開するには、[情報パネルを表示] をクリックします。

      4. 1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。

      5. [新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。

        次に例を示します。

        • Google アカウントのメールアドレス: test-user@gmail.com
        • Google グループ: admins@googlegroups.com
        • サービス アカウント: server@example.gserviceaccount.com
        • Google Workspace ドメイン: example.com
      6. [ロール] リストで、[Compute Engine] の上にポインタを置いて [ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。

      7. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      8. 変更を保存します。

      プロジェクトまたは組織のイメージを削除する権限を付与する手順は次のとおりです。

      1. プロジェクトまたは組織の [IAM] ページに移動します。

        IAM に移動

      2. [ アクセスを許可] をクリックします。

      3. [新しいプリンシパル] フィールドに、アクセスを付与する ID のメールアドレスを入力します。次に例を示します。

        • Google アカウントのメールアドレス: test-user@gmail.com
        • Google グループ: admins@googlegroups.com
        • サービス アカウント: server@example.gserviceaccount.com
        • Google Workspace ドメイン: example.com
      4. [ロール] リストで、[Compute Engine] の上にポインタを置いて [ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。

      5. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      6. 変更を保存します。

      gcloud

      組織レベルでイメージを削除する権限を付与するには、gcloud organizations add-iam-policy-binding コマンドを使用します。

      gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
          --member='MEMBER' \
          --role='ROLE'
      

      プロジェクト レベルでイメージを削除する権限を付与するには、gcloud projects add-iam-policy-binding コマンドを使用します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member='MEMBER' \
          --role='ROLE'
      

      特定のイメージを削除する権限を付与するには、gcloud compute images add-iam-policy-binding コマンドを使用します。

      gcloud compute images add-iam-policy-binding IMAGE_NAME \
          --member='MEMBER' \
          --role='ROLE'
      

      次のように置き換えます。

      • ORGANIZATION_IDPROJECT_ID、または IMAGE_NAME: 12 桁の数値の組織 ID、プロジェクト ID、またはイメージ名。たとえば、123456578920my-project-1my-custom-image です。
      • MEMBER: ロールを付与する有効な ID

        次に例を示します。

        • Google アカウントのメールアドレス: user:user@gmail.com
        • Google グループ: group:admins@googlegroups.com
        • サービス アカウント: serviceAccount:server@example.gserviceaccount.com
        • Google Workspace ドメイン: domain:example.com
      • ROLE: この ID に割り当てるロール。たとえば、roles/compute.storageAdmin ロール、または roles/customImageDeletionRole などのカスタムロール。

      REST

      1. リソースのそれぞれの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy メソッドを使用します。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
        

        PROJECT_ID の部分は、プロジェクト ID で置き換えます。

        組織の場合は、organizations.getIamPolicy メソッドを使用します。

        POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
        

        ORGANIZATION_ID の部分は、12 桁の数値の組織 ID で置き換えます。

        特定のイメージの場合は、images.getIamPolicy メソッドを使用します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: プロジェクト ID
        • IMAGE_NAME: イメージの名前

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

      2. メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com

        たとえば、roles/compute.storageAdmin ロールを user:test-email@example.com に付与するには、次のバインディングをポリシーに追加します。

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

        たとえば、ポリシーをプロジェクト レベルで設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
        

        PROJECT_ID をプロジェクト ID で置き換えます。

      組織内でカスタム イメージを共有する権限を付与する

      プロジェクトが組織に属している場合、その組織に他にもプロジェクトがあり、プロジェクトごとに異なるアクセスレベルが設定されている場合があります。カスタム イメージを作成すると、組織内の他のプロジェクトの他のユーザーとイメージを共有できます。

      Compute Engine には、イメージの管理に使用できる次の IAM 事前定義ロールが用意されています。

      • Compute イメージ ユーザー(roles/compute.imageUser): リクエストで、イメージに対する他の権限がなくても、イメージを一覧表示し、読み取り、使用する権限
      • Compute ストレージ管理者(roles/compute.storageAdmin): ディスク、イメージ、スナップショットを作成、変更、削除する権限

      または、独自のカスタム IAM ロールを作成することもできます。

      ベスト プラクティスとして、これらのイメージをホストする専用の単一のプロジェクトにすべてのカスタム イメージを保存することをおすすめします。これにより、イメージを管理しやすくなるとともに、特定のチームにそのチームに必要なイメージのみへのアクセス権限を付与できます。チームにイメージ プロジェクト全体へのアクセス権限を付与することもできますが、イメージ プロジェクト全体へのチームアクセスは最小権限の原則に反するため、この方法はおすすめしません。

      次の例は、グループを追加して、そのグループのユーザーがイメージにアクセスできるようにする方法を示しています。

      コンソール

      1. Google Cloud Console で、[イメージ] ページに移動します。

        [イメージ] に移動

      2. 他のユーザーと共有するイメージを選択します。

      3. [権限] 列を展開するには、[情報パネルを表示] をクリックします。

      4. 1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。

      5. [新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。

        次に例を示します。

        • Google アカウントのメールアドレス: test-user@gmail.com
        • Google グループ: admins@googlegroups.com
        • サービス アカウント: server@example.gserviceaccount.com
        • Google Workspace ドメイン: example.com
      6. [ロール] リストで、[Compute Engine] の上にポインタを置いて、[イメージ ユーザー] または [ストレージ管理者] を選択するか、カスタムロールを選択します。

      7. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      8. 変更を保存します。

      ユーザーが Google Cloud コンソール で共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。

      1. Google Cloud コンソールの [IAM] ページに移動します。

        IAM に移動

      2. [ アクセスを許可] をクリックします。

      3. [新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。次に例を示します。

        • Google アカウントのメールアドレス: test-user@gmail.com
        • Google グループ: admins@googlegroups.com
        • サービス アカウント: server@example.gserviceaccount.com
        • Google Workspace ドメイン: example.com
      4. [ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。

      5. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      6. 変更を保存します。

      gcloud

      特定のイメージの IAM ポリシーを更新するには、gcloud compute images add-iam-policy-binding コマンドを使用します。

      gcloud compute images add-iam-policy-binding IMAGE_NAME \
          --member='MEMBER' \
          --role='ROLE'
      

      次のように置き換えます。

      • IMAGE_NAME: イメージの名前(例: custom-centos-8
      • MEMBER: ロールを付与する有効な ID

        次に例を示します。

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com
      • ROLE: この ID を割り当てるロール(roles/compute.imageUserroles/compute.storageAdmin、カスタムロールなど)

      必要に応じて、これらの共有イメージを images.list リクエストで表示するには、gcloud projects add-iam-policy-binding コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member='MEMBER' \
          --role='roles/viewer'
      

      REST

      1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy メソッドを使用します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

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

      2. メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com

        たとえば、roles/compute.imageUsertest-email@example.com に付与するには、次のバインディングをポリシーに追加します。

        {
         "members": [
           "user:test-email@example.com"
         ],
         "role":"roles/compute.imageUser"
        }
        
      3. setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、project.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

      (省略可能)ユーザーが images.list リクエストでこれらの共有イメージを表示できるようにするには、projects.setIamPolicy メソッドを使用して、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)をユーザーに付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。

      POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
      

      組織間でカスタム イメージを共有する権限を付与する

      カスタム イメージのカタログを作成すると、組織外部のパートナー、ユーザー、請負業者とイメージを共有するのに役立ちます。組織外部のユーザーとイメージを共有するには、組織外部のユーザーをイメージ ユーザーとしてプロジェクトに追加します。

      コンソール

      1. Google Cloud Console で、[イメージ] ページに移動します。

        [イメージ] に移動

      2. 他のユーザーと共有するイメージを選択します。

      3. [権限] 列を展開するには、[情報パネルを表示] をクリックします。

      4. 1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。

      5. [新しいプリンシパル] フィールドに、イメージを共有するグループのメールアドレスを入力します。例: admins@example.com

      6. [ロール] リストで、[Compute Engine] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。

      7. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      8. 変更を保存します。

      ユーザーが Google Cloud コンソール で共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。

      1. Google Cloud コンソールの [IAM] ページに移動します。

        IAM に移動

      2. [ アクセスを許可] をクリックします。

      3. [新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。例: admins@example.com

      4. [ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。

      5. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      6. 変更を保存します。

      gcloud

      ユーザーに roles/compute.imageUser ロールを付与するには、gcloud compute images add-iam-policy-binding コマンドを使用します。

      gcloud compute images add-iam-policy-binding IMAGE_NAME \
          --member='MEMBER' \
          --role='roles/compute.imageUser'
      

      次のように置き換えます。

      • IMAGE_NAME: イメージの名前(例: custom-centos-8
      • MEMBER: ロールを付与する有効な ID(group:admins@example.com など)

      必要に応じて、これらの共有イメージを images.list リクエストで表示するには、gcloud projects add-iam-policy-binding コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member='MEMBER' \
          --role='roles/viewer'
      

      REST

      1. リソースの getIamPolicy メソッドを使用して、既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy メソッドを使用します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

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

      2. メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。

        • user:test-user@gmail.com
        • group:admins@example.com
        • serviceAccount:test123@example.domain.com
        • domain:example.domain.com

        たとえば、roles/compute.imageUsertest-user@example.com に付与するには、次のバインディングをポリシーに追加します。

        {
          "members": [
            "user:test-user@example.com"
          ],
          "role":"roles/compute.imageUser"
        }
        
      3. setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、images.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

        (省略可能)ユーザーが images.list リクエストでこれらの共有イメージを表示できるようにするには、projects.setIamPolicy メソッドを使用して、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer)をユーザーに付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
        

      カスタム イメージを一般公開する権限を付与する

      組織またはプロジェクトに属しているユーザーであるかどうかに関係なく、すべての認証済み Compute Engine ユーザーとカスタム イメージを共有できます。

      すべての認証済みユーザーと共有できるのは、イメージなどの共有リソースのみです。プロジェクトまたは組織をすべての認証済みユーザーと共有することはできません。この制限事項(およびリソース階層)は、組織が誤ってプロジェクト全体を認証済み Compute Engine ユーザーと共有しないようにするためのものです。

      次の例は、すべての認証済み Compute Engine ユーザーに、カスタム イメージに対する Compute イメージ ユーザーのロール(roles/compute.imageUser)を付与する方法を示しています。

      gcloud

      イメージを公開するには、gcloud compute images add-iam-policy-binding コマンドを使用します。

      gcloud compute images add-iam-policy-binding IMAGE_NAME \
          --member='allAuthenticatedUsers' \
          --role='roles/compute.imageUser'
      

      IMAGE_NAME はリソースの名前(例: my_image)に置き換えます。

      REST

      1. getIamPolicy メソッドを使用して既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy メソッドを使用します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

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

      2. メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。

        {
         "members": [
           "allAuthenticatedUsers"
         ],
         "role":"roles/compute.imageUser"
        }
        
      3. setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、images.setIamPolicy メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクトのプロジェクト ID
        • IMAGE_NAME: イメージの名前

      マネージド インスタンス グループにイメージへのアクセス権限を付与する

      Compute Engine を使用して、マネージドまたは非マネージドの VM グループを作成できます。マネージド インスタンス グループ(MIG)を作成すると、Compute Engine は Google API サービス エージェントを使用して Compute Engine API を呼び出し、異常な VM の再作成や更新など、そのグループに関連するアクションを実行します。

      他のプロジェクトのイメージを使用して MIG を作成する場合は、MIG を作成するプロジェクトに属する API サービス アカウントに Compute イメージ ユーザー ロール(roles/compute.imageUser)を付与します。次に例を示します。

      1. プロジェクト A で、プロジェクト B が所有するイメージを使用して MIG を作成するとします。
      2. プロジェクト B がプロジェクト A のサービス アカウントに Compute イメージ ユーザー ロールを付与します。
      3. これにより、プロジェクト A でプロジェクト B のイメージを使用して MIG を作成できます。

      Compute イメージ ユーザー ロールを付与した後、マネージド グループのインスタンス テンプレートの作成時にコンソールまたはイメージの URL を使用して、他のプロジェクトからイメージにアクセスできます。

      サービス アカウントのメールアドレスを取得する

      1. Google Cloud コンソール で、アクセスを付与するサービス アカウントが属するプロジェクトの [IAM] ページに移動します。

        IAM に移動

      2. プロンプトが表示されたら、リストからプロジェクトを選択します。

      3. 次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。

        PROJECT_NUMBER@cloudservices.gserviceaccount.com
        

      サービス アカウントのメールアドレスを取得した後、次のいずれかのセクションに進みます。

      MIG に別のプロジェクト内のすべてのイメージへのアクセス権限を付与する

      サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加して Compute イメージ ユーザーのロール(roles/compute.imageUser)を付与します。

      Console

      1. Google Cloud コンソール で、イメージ プロジェクトの [IAM] ページに移動します。

        IAM に移動

      2. 新しいメンバーを追加するには、[ アクセスを許可] をクリックします。

      3. [新しいプリンシパル] フィールドに、サービス アカウントのメールアドレスを入力します。

      4. [ロール] リストで、[Compute] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。

      5. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      6. [保存] をクリックします。

      7. サービス アカウントのプロジェクトに切り替えます。

      これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      gcloud

      gcloud projects add-iam-policy-binding コマンドを使用して、イメージ プロジェクトからサービス アカウントを追加します。

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' --role='roles/compute.imageUser'
      

      次のように置き換えます。

      • PROJECT_ID: 共有するイメージが含まれるプロジェクトの ID
      • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。

      これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      REST

      1. イメージ プロジェクトの IAM ポリシーを取得するには、projects.getIamPolicy メソッドを使用します。

         POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
         

        PROJECT_ID は、イメージ プロジェクトのプロジェクト ID に置き換えます。

      2. サービス アカウントに roles/compute.imageUser ロールを付与するには、テキスト エディタでポリシーを編集します。

        {
          "bindings": [
             {
              "role": "roles/compute.imageUser",
              "members": [
                "serviceAccount:SERVICE_ACCOUNT_EMAIL"
              ]
            }
          ]
        }
        

        SERVICE_ACCOUNT_EMAIL の部分は、サービス アカウントのメールアドレスで置き換えます。

      3. projects.setIamPolicy を使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
        

        PROJECT_ID の部分は、イメージ プロジェクトのプロダクト ID で置き換えます。

        これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      MIG に別のプロジェクト内の一部のイメージへのアクセス権限を付与する

      サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加し、特定のイメージに対する Compute イメージ ユーザーロール(roles/compute.imageUser)を付与します。

      コンソール

      1. Google Cloud コンソール で、イメージ プロジェクトの [イメージ] ページに移動します。

        [イメージ] に移動

      2. 共有するイメージの横にあるチェックボックスをオンにします。

      3. [権限] 列を展開するには、[情報パネルを表示] をクリックします。

      4. [権限] パネルで、[プリンシパルを追加] をクリックします。

      5. [新しいプリンシパル] フィールドに、イメージを共有するサービス アカウントのメールアドレスを入力します。例: test123@example.domain.com

      6. [ロール] リストで [Compute] を選択し、[Compute イメージ ユーザー] を選択します。

      7. 省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。

      8. [保存] をクリックします。

      9. サービス アカウントのプロジェクトに切り替えます。

      これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      gcloud

      サービス アカウントに特定のイメージへのアクセス権を付与するには、gcloud compute images add-iam-policy-binding コマンドを使用します。

      gcloud compute images add-iam-policy-binding IMAGE_NAME \
          --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
          --role='roles/compute.imageUser'
      

      次のように置き換えます。

      • IMAGE_NAME: 共有するイメージの名前
      • SERVICE_ACCOUNT_EMAIL: サービス アカウントのメールアドレス。

      これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      REST

      1. イメージの IAM ポリシーを取得するには、images.getIamPolicy メソッドを使用します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: イメージ プロジェクトのプロジェクト ID
        • IMAGE_NAME: 共有するイメージの名前
      2. サービス アカウントに roles/compute.imageUser ロールを付与するには、テキスト エディタでポリシーを編集します。

        {
          "bindings": [
             {
              "role": "roles/compute.imageUser",
              "members": [
                "serviceAccount:SERVICE_ACCOUNT_EMAIL"
              ]
            }
          ]
        }
        

        SERVICE_ACCOUNT_EMAIL の部分は、サービス アカウントのメールアドレスで置き換えます。

      3. images.setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: イメージ プロジェクトのプロジェクト ID
        • IMAGE_NAME: 共有するイメージの名前

        これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。

      共有イメージとスナップショットの使用を制御する

      イメージを他のユーザーと共有した後、組織内でそのユーザーがそれらのリソースを使用する場所を制御できます。constraints/compute.storageResourceUseRestrictions 制限を設定して、ユーザーがストレージ リソースの使用を許可されているプロジェクトを定義します。

      これらの制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、resourcemanager.organizationAdmin 役割には、これらの制約を設定する権限があります。

      1. gcloud organization list コマンドを使用して、組織の組織 ID を検索します。

        gcloud organizations list
        
      2. gcloud resource-manager org-policies describe コマンドを使用して、組織の既存のポリシー設定を取得します。

        gcloud resource-manager org-policies describe \
            compute.storageResourceUseRestrictions \
            --organization ORGANIZATION_ID > org-policy.yaml
        

        ORGANIZATION_ID の部分は、12 桁の数値の組織 ID で置き換えます。

      3. テキスト エディタで org-policy.yaml ファイルを開き、compute.storageResourceUseRestrictions 制約を変更します。必要な制限を追加し、また不要になった制限を削除します。ファイルの編集が終了したら、変更を保存します。たとえば、ポリシー ファイルに次の制約エントリを設定できます。

        constraint: compute.storageResourceUseRestrictions
        listPolicy:
          allowedValues:
            - under:organization/organization-id
        
      4. gcloud resource-manager org-policies set-policy コマンドを使用して org-policy.yaml ファイルを組織に適用します。

        gcloud resource-manager org-policies set-policy \
           --organization=ORGANIZATION_ID org-policy.yaml
        

        ORGANIZATION_ID の部分は、12 桁の数値の組織 ID で置き換えます。

      組織ポリシーで制約の構成が完了したら、それらの制約をテストして、必要な制約が作成されることを確認します。

      別のプロジェクトのイメージを使用する

      別のプロジェクト内にあるイメージへのアクセス権限が付与されている場合、そのプロジェクト内のそれらのイメージにアクセスするには、リクエストで該当するイメージ プロジェクトを指定します。

      たとえば、別のプロジェクトの共有イメージを使用して VM を作成するには、次の手順を行います。

      Console

      1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

        [インスタンスの作成] に移動

      2. VM の名前を指定します。詳しくは、リソースの命名規則をご覧ください。
      3. (省略可)この VM のゾーンを変更します。[任意] を選択すると、マシンタイプと可用性に基づいてゾーンが自動的に選択されます。
      4. VM のマシン構成を選択します。
      5. [ブートディスク] セクションで、[変更] をクリックして該当のブートディスクを構成し、次の操作を行います。
        1. [カスタム イメージ] タブを選択します。
        2. イメージ プロジェクトを選択するには、[プロジェクトを選択] をクリックし、次の操作を行います。
          1. イメージを含むプロジェクトを選択します。
          2. [開く] をクリックします。
        3. [イメージ] リストで、インポートするイメージをクリックします。
        4. ブートディスクのタイプとサイズを選択します。
        5. ブートディスクのオプションを確認するには、[選択] をクリックします。
      6. VM への HTTP または HTTPS トラフィックを許可するには、[ファイアウォール] セクションで [HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] を選択します。

        Google Cloud コンソールによってネットワーク タグが VM に追加されます。また、対応する上り(内向き)ファイアウォール ルールが作成され、tcp:80(HTTP)または tcp:443(HTTPS)で受信するすべてのトラフィックが許可されます。このネットワーク タグによってファイアウォール ルールが VM に関連付けられます。詳細については、Cloud Next Generation Firewall のドキュメントでファイアウォール ルールの概要をご覧ください。

      7. VM を起動して作成するには、[作成] をクリックします。

      gcloud

      1. In the Google Cloud console, activate Cloud Shell.

        Activate Cloud Shell

        At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

      2. gcloud compute instances create command を使用して VM を作成し、--image フラグと --image-project フラグを使用してイメージ名とそのイメージが属するプロジェクトを指定します。

        gcloud compute instances create VM_NAME \
                --image=IMAGE \
                --image-project=IMAGE_PROJECT
            

        以下を置き換えます。

        • VM_NAME: 新しい VM の名前
        • IMAGE: イメージの名前
        • IMAGE_PROJECT: イメージが属するプロジェクト

        コマンドが成功すると、gcloud は新しい VM のプロパティを返します。

            Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
            NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
            example-instance     us-central1-b  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

      Terraform

      Terraform で共有イメージを使用して VM を作成するプロセスは、一般公開イメージを使用して VM を作成する場合と同じです。

      1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

        [VM インスタンス] に移動

      2. [インスタンスを作成] をクリックします。
      3. 必要なパラメータを指定します。
      4. ページの上部または下部で [同等のコード] をクリックし、[Terraform] タブをクリックして Terraform コードを表示します。

      REST

      API でカスタム イメージを使用して VM を作成するプロセスは、一般公開イメージを使用して VM を作成する場合と同じです。共有イメージから VM を作成するには、instances.insert メソッドを使用します。

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
      
      {
         "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
         "name":"VM_NAME",
         
         "disks":[
            {
               "initializeParams":{
                  "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
               },
               "boot":true
            }
         ],
         
         
         "networkInterfaces":[
            {
               "network":"global/networks/NETWORK_NAME"
            }
         ],
         
        
         "shieldedInstanceConfig":{
            "enableSecureBoot":"ENABLE_SECURE_BOOT"
         }
      }
      

      以下を置き換えます。

      • PROJECT_ID: VM を作成するプロジェクトの ID
      • ZONE: VM を作成するゾーン
      • MACHINE_TYPE_ZONE: 新しい VM に使用するマシンタイプを含むゾーン
      • MACHINE_TYPE: 新しい VM のマシンタイプ(事前定義またはカスタム
      • VM_NAME: 新しい VM の名前
      • IMAGE_PROJECT: 共有イメージを含むプロジェクトの名前
      • IMAGE または IMAGE_FAMILY: 次のいずれかを指定します。
        • IMAGE: 共有イメージの名前。例: "sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2"
        • IMAGE_FAMILY: カスタム イメージ ファミリーの一部として共有イメージを作成する場合、そのカスタム イメージ ファミリーを指定します。

          これにより、カスタム イメージ ファミリー内の最新の非推奨ではない OS イメージから VM が作成されます。たとえば、"sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family" を指定すると、Compute Engine はカスタム finance-debian-family イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。

      • NETWORK_NAME: VM に使用する VPC ネットワーク。default を指定して、デフォルト ネットワークを使用できます。
      • ENABLE_SECURE_BOOT: 省略可。Shielded VM 機能をサポートしているイメージを選択した場合は、Compute Engine がデフォルトで仮想トラステッド プラットフォーム モジュール(vTPM)整合性モニタリングを有効にします。Compute Engine は、デフォルトではセキュアブートを有効にしません。

        trueenableSecureBoot を指定すると、Compute Engine は 3 つの Shielded VM 機能をすべて有効にした VM を作成します。Compute Engine が VM を起動した後、Shielded VM のオプションを変更するには、VM を停止する必要があります。

      また、別のプロジェクトのイメージからブート永続ディスクを作成することもできます。イメージからブートディスクを作成する方法については、スタンドアロン ブート永続ディスクの作成をご覧ください。

      共有イメージへのアクセス権を取り消す

      ユーザーが Compute Engine リソースにアクセスする必要がなくなったら、Google Cloud コンソール、Google Cloud CLI、または REST を使用して、そのユーザーのアクセス権限を取り消すことができます。

      コンソール

      1. Google Cloud コンソール で、イメージ プロジェクトの [イメージ] ページに移動します。

        [イメージ] に移動

      2. 更新するイメージの横にあるチェックボックスをオンにします。

      3. [権限] 列を展開するには、[情報パネルを表示] をクリックします。

      4. ユーザーを削除するロールを展開します。

      5. そのロールからユーザーを削除するには、[削除] をクリックします。

      gcloud

      イメージに対するロールからユーザーを削除するには、--member フラグと --role フラグを指定した gcloud compute images remove-iam-policy-binding コマンドを使用します。

      gcloud compute images remove-iam-policy-binding IMAGE_NAME \
          --member='MEMBER' \
          --role='ROLE'
      

      次のように置き換えます。

      • IMAGE_NAME: イメージの名前(例: my_image
      • 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 コマンドを使用します。

      REST

      1. images.getIamPolicy メソッドを使用して既存のポリシーを読み取ります。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクト ID
        • IMAGE_NAME: イメージの名前

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

      2. メンバーとそれに関連するロールを削除するには、テキスト エディタでポリシーを編集します。

      3. images.setIamPolicy メソッドを使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。

        POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
        

        次のように置き換えます。

        • PROJECT_ID: このイメージが属するプロジェクト ID
        • IMAGE_NAME: イメージの名前

      次のステップ