他のプロジェクトのイメージの使用

このページでは、別のプロジェクトのオペレーティング システム イメージを使用して、Deployment Manager が Compute Engine 仮想マシンのインスタンスを作成できるようにプロジェクトを構成する方法について説明します。

たとえば、Awesome Project という名前のプロジェクトがあり、そこで Deployment Manager が VM インスタンスの作成と管理をするとします。ここで、Database Images という名前の別のプロジェクトに属するプライベート イメージを使用するとします。 このイメージへのアクセス権を付与するには、Database Images の所有者が IAM 役割 roles/compute.imageUser を Awesome Project の Google API サービス アカウントに付与する必要があります。これで、Awesome Project が Database Images プロジェクトのイメージを使用できるようになります。

この方法を使用すると、他のプロジェクトのイメージについてもマネージド インスタンス グループのアクセス権を付与できます。

始める前に

制限事項

この機能を使用するにあたっては、次の制限事項があります。

  • プロジェクト レベルで compute.imageUser 役割を付与する必要があります。
  • compute.imageUser の役割を付与すると、指定したプロジェクトのすべてのイメージへの権限が付与されます。特定のイメージを共有することはできません。
  • この役割は、allAuthenticatedUsersallUsers でなく、特定のユーザーに付与する必要があります。

イメージへのアクセス権の付与

別のプロジェクトに属しているイメージへのアクセス権を付与するには、イメージを所有しているプロジェクトのオーナーがイメージを使用するプロジェクトの Google API サービス アカウントに対してアクセス権を付与する必要があります。

  1. 別のプロジェクトが所有する限定公開イメージにアクセスする必要があるプロジェクトの Cloud Console の IAM ページに移動します。

    IAM ページに移動

  2. プロンプトが表示されたら、リストからプロジェクトを選択します。別のプロジェクトで保存されているイメージへのアクセスを必要としているプロジェクトを必ず選択してください。
  3. Google API サービス アカウントを見つけます。これは、次の形式のメールアドレスを持つアカウントです。

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 上記のメールアドレスをメモします。次に、目的のイメージがあるプロジェクトのプロジェクト オーナーが Google API サービス アカウントに roles/compute.imageUser 役割を付与します。

    Console

    1. Google Cloud Platform Console 内で、アクセスするイメージが含まれるプロジェクトの IAM ページに移動します。

      IAM ページに移動

    2. プロジェクト リストからプロジェクトを選択します。
    3. [追加] ボタンをクリックして新しいメンバーを追加します。
    4. [メンバー] ボックスに、サービス アカウントのメールアドレスを入力します。
    5. [役割] プルダウンを展開し、[Compute Engine] > [Compute イメージ ユーザー] を選択します。
    6. [追加] をクリックしてアカウントを追加します。

    gcloud

    gcloud コマンドライン ツールを使用して、プロジェクトの IAM ポリシーにバインディングを追加します。

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

    ここで

    • [PROJECT_ID] は、共有するイメージが含まれているプロジェクトの ID です。
    • [SERVICE_ACCOUNT_EMAIL] は、サービス アカウントのメールです。

    例:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    API では、以下の URL に対して POST リクエストを作成します。ここで [PROJECT_ID] は共有したいイメージを含んでいるプロジェクトの ID を示します。

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

    リクエストの本文には、このプロジェクトに適用するバインドのリストを含めます。roles/compute.imageUser 役割はバインドの一部になります。例:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    

    }

他のプロジェクトのイメージを構成で使用する

プロジェクトに別のプロジェクトのイメージに対するアクセス権が付与されると、プロジェクトのユーザーは、イメージが属しているプロジェクトの ID をテンプレートまたは構成に指定して、イメージを使用できます。

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

たとえば、イメージのプロジェクト ID が database-images の場合、構成には以下のイメージ URI を指定できます。

resources:
- name: a-special-vm
  type: compute.v1.instances
  properties:
    machineType: zones/us-central1-a/machineTypes/f1-micro
    image: projects/database-images/global/images/example-database-image
    ...

イメージを追加したら、構成の作成を完了し、構成をデプロイします。

次のステップ