このページでは、別のプロジェクトのオペレーティング システム イメージを使用して、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 プロジェクトのイメージを使用できるようになります。
この方法を使用すると、他のプロジェクトのイメージについてもマネージド インスタンス グループのアクセス権を付与することができます。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
- Deployment Manager のconfigurationsについて読みます。
- Compute Engine のプライベート イメージについて読みます。
- Identity and Access Management(IAM)ドキュメントを読みます。
- Deployment Manager の IAM 役割を読みます。特に、
roles/compute.imageUser
役割について確認します。
制限事項
この機能を使用するにあたっては、次の制限事項があります。
- プロジェクト レベルで、プロジェクトの Google API サービス アカウントに、
compute.imageUser
ロールを付与する必要があります。 compute.imageUser
の役割を付与すると、指定したプロジェクトのすべてのイメージへの権限が付与されます。特定のイメージを共有することはできません。- この役割は、
allAuthenticatedUsers
やallUsers
でなく、特定のユーザーに付与する必要があります。
イメージへのアクセス権の付与
別のプロジェクトに属しているイメージへのアクセス権を付与するには、イメージを所有しているプロジェクトのオーナーがイメージを使用するプロジェクトの Google API サービス アカウントに対してアクセス権を付与する必要があります。
- 別のプロジェクトが所有する限定公開イメージにアクセスする必要があるプロジェクトの Google Cloud コンソールの IAM ページに移動します。
- プロンプトが表示されたら、リストからプロジェクトを選択します。別のプロジェクトで保存されているイメージへのアクセスを必要としているプロジェクトを必ず選択してください。
Google API サービス アカウントを見つけます。これは、次の形式のメールアドレスを持つアカウントです。
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
上記のメールアドレスをメモします。次に、目的のイメージがあるプロジェクトのプロジェクト オーナーが Google API サービス アカウントに
roles/compute.imageUser
役割を付与します。コンソール
- Google Cloud Platform Console 内で、アクセスするイメージが含まれるプロジェクトの IAM ページに移動します。
- プロジェクト リストからプロジェクトを選択します。
- [追加] ボタンをクリックして新しいメンバーを追加します。
- [メンバー] ボックスに、サービス アカウントのメールアドレスを入力します。
- [役割] プルダウンを展開し、[Compute Engine] > [Compute イメージ ユーザー] を選択します。
- [追加] をクリックしてアカウントを追加します。
gcloud
Google Cloud CLI で、プロジェクトの 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 ...
イメージを追加したら、構成の作成を完了し、構成をデプロイします。
次のステップ
- イメージの共有について、さらに学習する。
- Compute Engine のイメージについて、さらに学習する。
- その他の付与可能な IAM 役割に関する情報を読む。
- サービス アカウントについて、さらに学習する。