プロジェクト間でのイメージの共有

このページでは、Compute Engine イメージ ユーザー役割を使用して他のプロジェクトとカスタム イメージを共有する方法について説明します。イメージの詳細については、イメージの概要をご覧ください。役割の詳細については、IAM のドキュメントをご覧ください。

Compute Engine は、カスタマイズしてカスタム イメージとしてプロジェクトに保存できる公開 OS イメージを提供します。デフォルトでは、カスタム イメージは作成されたプロジェクトでのみ使用可能です。他の Google Cloud Platform プロジェクトとカスタム イメージを共有する場合には、別のプロジェクトのユーザーに Compute Engine イメージ ユーザー役割 roles/compute.imageUser を付与します。

役割 compute.imageUser を付与されたユーザーは、あなたのプロジェクトからイメージを取得、リスト、使用できるようになりますが、プロジェクトの他のリソースにはアクセスできません。この役割によって、なじみのある Identity and Access Management (IAM) API などの Google Cloud Platform ツールを使用して簡単にイメージを共有できます。

たとえば、社内で誰でも使用を認められているイメージの一覧を含む特定のプロジェクトがあるとします。チームの他のメンバーが使用できるように、イメージの作成と保守を担当するグループにプロジェクトの編集者権限を付与し、このグループを明示的にプロジェクトに割り当てます。次に、Compute Engine イメージ ユーザー役割を他のすべてのチームメンバーに割り当て、チームメンバーがそれぞれ自分のプロジェクトでこれらのイメージを使用できるようにします。

始める前に

制限事項

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

  • compute.imageUser の役割は、プロジェクト レベルでのみ付与できます。

  • compute.imageUser の役割を付与すると、指定したプロジェクトのすべてのイメージへの権限が付与されます。特定のイメージを共有することはできません。

  • この役割を allAuthenticatedUsersallUsers に付与することはできません。

ユーザーにイメージへのアクセス権を付与する

イメージ共有の役割を付与するには、Console、gcloud コマンドライン ツール、または API を使用します。IAM の使用の詳細については、IAM のドキュメントをご覧ください。

たとえば、ユーザー A がプロジェクト A のオーナーであり、プロジェクト B で所有されているイメージを使用して VM インスタンスを作成するとします。プロジェクト B のオーナーはユーザー A にプロジェクト B の compute.imageUser の役割を付与する必要があります。これによって、プロジェクト B のイメージを使用してプロジェクト A にインスタンスを作成する権限がユーザー A に付与されます。

コンソール

  1. Cloud Platform Console の [IAM] ページに進みます。

    [IAM] ページに移動

  2. プロンプトが表示されたら、プロジェクトを選択します。
  3. 新規ユーザーを追加する場合は、
    1. ページ上部にある [追加] をクリックします。
    2. 役割セレクタから [Compute Engine] > [Compute イメージ ユーザー] と選択します。
    3. アクセス権限を付与するアカウントのメールアドレスを指定します。
  4. 既存のユーザーに役割を付与する場合は、[メンバー] 列でユーザーの情報を確認します。
    1. [役割] 列でそのサービス アカウントの役割リストを展開します。
    2. 役割セレクタから、[Compute Engine] > [Compute イメージ ユーザー] を選択します。
  5. 変更を保存します。

gcloud

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

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

ここで:

  • [PROJECT_ID] は共有するイメージが含まれているプロジェクトの ID です。
  • [MEMBER_TYPE] はアクセス権を付与するアカウントの種類です。たとえば、個々のユーザーには user、サービス アカウントには serviceAccount、Google グループには group を使用します。
  • [ACCOUNT] はこの役割を付与するアカウントのメールアドレスです。たとえば、サービスアカウントの場合、これは my-sa@my-project-123.iam.gserviceaccount.com になります。

たとえば、以下ではメールが john@example.com のユーザーに、database-images という名前のプロジェクトにあるイメージへのアクセス権が付与されます。

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.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": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

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

Compute Engine を使用して、マネージドまたは非マネージドのインスタンス グループを作成できます。マネージド インスタンス グループを作成する場合、Compute Engine は Google API サービス アカウントを使用して Compute Engine API を呼び出し、異常なインスタンスの再作成、インスタンスの更新など、そのグループに関連するアクションを実行します。別のプロジェクトのイメージを使用してマネージド インスタンスを作成する場合は、compute.imageUser の役割を、マネージド インスタンス グループを作成するプロジェクトに属している API サービス アカウントに付与できます。

たとえば、プロジェクト A が、プロジェクト B が所有しているイメージを使用してマネージド インスタンス グループを作成するとします。その場合、プロジェクト B のオーナーがプロジェクト A の Google API サービス アカウントに、プロジェクト B の compute.imageUser の役割を付与する必要があります。これにより、プロジェクト B のイメージを使用してプロジェクト A にマネージド インスタンス グループを作成する権限がアカウントに付与されます。

compute.imageUser の役割を付与した後、グループのインスタンス テンプレートを作成するときに、特定のイメージの URL を指定できます。

サービス アカウントのメールを取得し、そのアカウントにアクセス権限を付与する手順は次のとおりです。

  1. Cloud Platform Console で、マネージド インスタンス グループを作成するプロジェクトの [IAM] ページに進みます。

    [IAM] ページに移動

  2. プロンプトが表示されたら、リストからプロジェクトを選択します。
  3. 次の形式のメールアドレスのある Google API サービス アカウントを見つけます。

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 上記のメールアドレスをメモします。次に、イメージを所有しているプロジェクトへのアクセス権限をアカウントに付与します。

    Console

    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"
               ]
           }
           ]
       }
    

    }

イメージにアクセスする

compute.imageUser の役割が付与された場合、リクエストでイメージ プロジェクトを指定すると、そのプロジェクト内のすべてのイメージにアクセスできます。たとえば、自分が使用できるイメージのリストを取得するには、以下のようにします。

gcloud compute images list --project [IMAGE_PROJECT]

インスタンスの作成など、新しいリソースの作成にイメージを使用する方法については、インスタンスの作成と起動をご覧ください。

たとえば、次のコマンドでは、プロジェクト database-images の database-image-a というイメージを使用してインスタンスを作成します。

gcloud compute instances create test-instance --image database-image-a --image-project database-images

同様に、イメージを使用して永続ディスクを作成できます。イメージからのディスクの作成の詳細については、スタンドアロンのルート永続ディスクを作成するをお読みください。

次のステップ

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

Compute Engine ドキュメント