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

このページでは、自分のプロジェクトに属しているタイプとタイプ プロバイダを他のプロジェクトと共有する方法について説明します。たとえば、事前に承認されているタイプ プロバイダの管理を担当するプロジェクトがあるとします。そのプロジェクトのタイプ プロバイダを他のプロジェクトと共有し、プロジェクトをタイプの中央リポジトリとして使用できるようにしたいと考えています。同様に、この方法を使用して、複合タイプをプロジェクト間で共有することもできます。

アクセスを設定するには、プロジェクトのタイプを所有しているプロジェクト オーナーが、そのタイプを使用するプロジェクトのサービス アカウントに deploymentmanager.typeViewer 役割を付与する必要があります。また、別のプロジェクトのタイプの表示と一覧表示をするユーザーにこの役割を付与する必要もあります。

始める前に

制限事項

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

  • deploymentmanager.typeViewer 役割を付与すると、特定のプロジェクトのすべてのタイプへの権限が付与されます。共有を個々のタイプに限定することはできません。
  • この役割を allAuthenticatedUsers または allUsers に付与することはできません。

タイプを使用するためのプロジェクト アクセス権の付与

他のプロジェクトに属するタイプへのアクセス権を付与するには、該当するタイプを所有するプロジェクト オーナーが、そのタイプを使用するプロジェクトの Google API サービス アカウントdeploymentmanager.typeViewer 役割を付与する必要があります。

  1. タイプを使用するプロジェクトの Google Cloud コンソールで IAM ページに移動します。

    IAM ページに移動

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

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

    Console

    1. Google Cloud Console で、共有するタイプが含まれているプロジェクトの IAM ページに移動します。

      IAM ページに移動

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

    gcloud

    Google Cloud CLI で、プロジェクトの IAM ポリシーにバインディングを追加します。

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

    ここで

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

    例:

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

    API

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

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

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

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

    }

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

タイプへのアクセス権が付与されたら、構文を使用して構成でタイプを指定できます。複合タイプの場合:

type: [PROJECT_ID]/composite:[TYPE]

タイプ プロバイダの場合:

type: [PROJECT_ID]/[TYPE]:[COLLECTION]

ここで

  • [PROJECT_ID] はタイプを所有しているプロジェクト ID です。
  • [TYPE] はタイプ プロバイダまたは複合タイプの名前です。
  • [COLLECTION] は作成する特定のリソースです。これは基本タイプだけに適用されます。基本タイプの指定の詳細については、構成でのタイプ プロバイダの呼び出しをご覧ください。

たとえば、プロジェクト ID が my-type-repository の場合、次のタイプ仕様を指定します。

resources:
- name: a-special-vm
  type: my-type-repository/composite:autoscaled-igm
  properties:
    ...

ユーザーにタイプの一覧表示および表示権限を付与する

プロジェクトのサービス アカウントへの deploymentmanager.typeViewer 役割の付与により、プロジェクトで構成にこれらのタイプをデプロイできますが、ユーザーがこれらのタイプを表示することはできません(一覧表示もできません)。個々のユーザーにタイプを表示する権限を付与する場合、deploymentmanager.typeViewer 役割を各ユーザーに付与する必要があります。

たとえば、Jane が自分のプロジェクト以外のプロジェクトに対して gcloud beta deployment-manager types list --project another-project コマンドを実行できるようにするには、another-project のオーナーが Jane に deploymentmanager.typeViewer 役割を付与する必要があります。

gcloud CLI を使用する場合、次のコマンドで Jane にその役割を付与できます。

 gcloud projects add-iam-policy-binding another-project \
        --member user:jane@gmail.com --role deploymentmanager.typeViewer

ユーザーへの役割の追加と削除に関する包括的な手順については、プロジェクト メンバーに対するアクセス権の付与、変更、取り消しのドキュメントをお読みください。

次のステップ