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

このページでは、別のプロジェクトのオペレーティング システム イメージを使用して、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 プロジェクトのイメージを使用できるようになります。

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

始める前に

制限事項

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

  • roles/compute.imageUser の役割は現在、ベータ版です。
  • compute.imageUser の役割は、プロジェクト レベルでのみ付与できます。
  • compute.imageUser の役割を付与すると、指定したプロジェクトのすべてのイメージへの権限が付与されます。特定のイメージだけを共有することはできません。
  • この役割を allAuthenticatedUsersallUsers に付与することはできません。

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

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

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

    [IAM] ページに移動

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

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

    コンソール

    1. Google Cloud Platform Console 内で、アクセスしたいイメージを含むプロジェクトの IAM ページに進みます。

      IAM ページに移動

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

    gcloud

    gcloud コマンドライン ツールで、プロジェクトの Cloud 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
    ...

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Deployment Manager のドキュメント