ユーザーがカスタム イメージを作成、削除、使用、共有できるようにするには、ユーザーに Identity and Access Management(IAM)の適切なロールを付与する必要があります。このドキュメントでは、カスタム イメージの作成と管理に必要な IAM 権限と、ユーザーにイメージを提供する方法について説明します。
Compute Engine リソースへのアクセス権限の付与に関する一般情報については、Compute Engine リソースへのアクセスの管理をご覧ください。IAM については、IAM のドキュメントをご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合は、次の操作を行います。
- Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- IAM のドキュメントをお読みください。
- Compute Engine の IAM ロール、特に Compute イメージ ユーザーのロール(
roles/compute.imageUser
)について確認します。
制限事項
イメージについては、特殊なメンバータイプ allUsers
にロールを付与することはできません。
カスタム イメージを作成する権限を付与する
ユーザーに、組織またはプロジェクトでのカスタム イメージの作成を可能にする権限を付与できます。
Compute Engine には、事前定義の Compute ストレージ管理者ロール(roles/compute.storageAdmin
)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの作成のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。
- 新しいイメージの作成を許可する
compute.images.create
- プロジェクト内のイメージの一覧表示を許可する
compute.images.list
compute.disks.use
(ディスクからイメージを作成する場合)compute.disks.list
(プロジェクト内のすべてのディスクを一覧表示する場合)
ユーザーに組織レベルでカスタム イメージを作成する権限を付与した場合、そのユーザーは組織内の任意のプロジェクトのカスタム イメージを作成できます。
Console
Google Cloud コンソール で、プロジェクトまたは組織の [IAM] ページに移動します。
新しいメンバーを追加するには、
[アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、アクセスを付与する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロールを選択] リストで、[Compute Engine] > [Compute ストレージ管理者] を選択します。カスタムロールを作成した場合は、そのロールを選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
gcloud
組織レベルで roles/compute.storageAdmin
ロールを付与するには、gcloud organizations add-iam-policy-binding
コマンドを使用します。
gcloud organizations add-iam-policy-binding ORGANIZATION_ID \ --member='MEMBER' \ --role='roles/compute.storageAdmin'
プロジェクト レベルで roles/compute.storageAdmin
ロールを付与するには、gcloud projects add-iam-policy-binding
コマンドを使用します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/compute.storageAdmin'
次のように置き換えます。
ORGANIZATION_ID
またはPROJECT_ID
: 組織 ID またはプロジェクト ID。たとえば、my-organization-1
、my-project-1
です。MEMBER
: ロールを付与する有効な ID。次に例を示します。
- Google アカウントのメールアドレス:
user:user@gmail.com
- Google グループ:
group:admins@googlegroups.com
- サービス アカウント:
serviceAccount:server@example.gserviceaccount.com
- Google Workspace ドメイン:
domain:example.com
- Google アカウントのメールアドレス:
API
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
は、プロジェクト ID に置き換えます(例:my-project-1
)。組織の場合は、
organizations.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
ORGANIZATION_ID
は、組織 ID に置き換えます(例:123456578920
)。Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
たとえば、
roles/compute.storageAdmin
ロールをgroup:admins@example.com
に付与するには、次のバインディングをポリシーに追加します。{ "members": [ "group:admins@example.com" ], "role":"roles/compute.storageAdmin" }
setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。たとえば、ポリシーをプロジェクト レベルで設定するには、
project.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
PROJECT_ID
の部分は、プロジェクト ID で置き換えます。
カスタム イメージを削除する権限を付与する
必要に応じて、次の権限をユーザーに付与できます。
- 特定のイメージを削除する
- 特定のプロジェクトが所有するイメージを削除する
- 組織の任意のプロジェクトからイメージを削除する
プロジェクト レベルで権限を付与すると、ユーザーはそのプロジェクトが所有するすべてのイメージを削除できます。組織レベルで権限を付与すると、プロジェクトに関係なく、ユーザーは組織が所有する任意のイメージを削除できます。
Compute Engine には、事前定義の Compute ストレージ管理者ロール(roles/compute.storageAdmin
)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの削除のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。
- イメージの削除を許可する
compute.images.delete
compute.images.list
(ユーザーがプロジェクトまたは組織内のイメージを一覧表示する必要がある場合)- イメージの取得を許可する
compute.images.get
Console
特定のイメージを削除する権限を付与するには、次の手順を行います。
Google Cloud Console で、[イメージ] ページに移動します。
権限を付与する対象のイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[Compute Engine] の上にポインタを置いて [ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
プロジェクトまたは組織のイメージを削除する権限を付与する手順は次のとおりです。
プロジェクトまたは組織の [IAM] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、アクセスを付与する ID のメールアドレスを入力します。次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[Compute Engine] の上にポインタを置いて [ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
gcloud
組織レベルでイメージを削除する権限を付与するには、gcloud organizations add-iam-policy-binding
コマンドを使用します。
gcloud organizations add-iam-policy-binding ORGANIZATION_ID \ --member='MEMBER' \ --role='ROLE'
プロジェクト レベルでイメージを削除する権限を付与するには、gcloud
projects add-iam-policy-binding
コマンドを使用します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='ROLE'
特定のイメージを削除する権限を付与するには、gcloud compute
images add-iam-policy-binding
コマンドを使用します。
gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
ORGANIZATION_ID
、PROJECT_ID
、またはIMAGE_NAME
: 12 桁の数値の組織 ID、プロジェクト ID、またはイメージ名。たとえば、123456578920
、my-project-1
、my-custom-image
です。MEMBER
: ロールを付与する有効な ID。次に例を示します。
- Google アカウントのメールアドレス:
user:user@gmail.com
- Google グループ:
group:admins@googlegroups.com
- サービス アカウント:
serviceAccount:server@example.gserviceaccount.com
- Google Workspace ドメイン:
domain:example.com
- Google アカウントのメールアドレス:
ROLE
: この ID に割り当てるロール。たとえば、roles/compute.storageAdmin
ロール、またはroles/customImageDeletionRole
などのカスタムロール。
API
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
の部分は、プロジェクト ID で置き換えます。組織の場合は、
organizations.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
ORGANIZATION_ID
の部分は、12 桁の数値の組織 ID で置き換えます。特定のイメージの場合は、
images.getIamPolicy
メソッドを使用します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: プロジェクト IDIMAGE_NAME
: イメージの名前
Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
たとえば、
roles/compute.storageAdmin
ロールをuser:test-email@example.com
に付与するには、次のバインディングをポリシーに追加します。{ "members": [ "user:test-email@example.com" ], "role":"roles/compute.storageAdmin" }
setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。たとえば、ポリシーをプロジェクト レベルで設定するには、
project.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
PROJECT_ID
の部分は、プロジェクト ID で置き換えます。
組織内でカスタム イメージを共有する
プロジェクトが組織に属している場合、その組織に他にもプロジェクトがあり、プロジェクトごとに異なるアクセスレベルが設定されている場合があります。カスタム イメージを作成すると、組織内の他のプロジェクトの他のユーザーとイメージを共有できます。
Compute Engine には、イメージの管理に使用できる次の IAM 事前定義ロールが用意されています。
- Compute イメージ ユーザー(
roles/compute.imageUser
): リクエストで、イメージに対する他の権限がなくても、イメージを一覧表示し、読み取り、使用する権限 - Compute ストレージ管理者(
roles/compute.storageAdmin
): ディスク、イメージ、スナップショットを作成、変更、削除する権限
または、独自のカスタム IAM ロールを作成することもできます。
ベスト プラクティスとして、これらのイメージをホストする専用の単一のプロジェクトにすべてのカスタム イメージを保存することをおすすめします。これにより、イメージを管理しやすくなるとともに、特定のチームにそのチームに必要なイメージのみへのアクセス権限を付与できます。チームにイメージ プロジェクト全体へのアクセス権限を付与することもできますが、イメージ プロジェクト全体へのチームアクセスは最小権限の原則に反するため、この方法はおすすめしません。
次の例は、グループを追加して、そのグループのユーザーがイメージにアクセスできるようにする方法を示しています。
コンソール
Google Cloud Console で、[イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[Compute Engine] の上にポインタを置いて、[イメージ ユーザー] または [ストレージ管理者] を選択するか、カスタムロールを選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
ユーザーが Google Cloud コンソール で共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。
Google Cloud コンソールの [IAM] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
gcloud
特定のイメージの IAM ポリシーを更新するには、gcloud compute images add-iam-policy-binding
コマンドを使用します。
gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
IMAGE_NAME
: イメージの名前(例:custom-centos-8
)MEMBER
: ロールを付与する有効な ID次に例を示します。
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
: この ID を割り当てるロール(roles/compute.imageUser
、roles/compute.storageAdmin
、カスタムロールなど)
必要に応じて、これらの共有イメージを images.list
リクエストで表示するには、gcloud projects add-iam-policy-binding
コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
API
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy
メソッドを使用します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
たとえば、
roles/compute.imageUser
をtest-email@example.com
に付与するには、次のバインディングをポリシーに追加します。{ "members": [ "user:test-email@example.com" ], "role":"roles/compute.imageUser" }
setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、project.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
(省略可能)ユーザーが images.list
リクエストでこれらの共有イメージを表示できるようにするには、projects.setIamPolicy
メソッドを使用して、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)をユーザーに付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
組織間でカスタム イメージを共有する
カスタム イメージのカタログを作成すると、組織外部のパートナー、ユーザー、請負業者とイメージを共有するのに役立ちます。組織外部のユーザーとイメージを共有するには、組織外部のユーザーをイメージ ユーザーとしてプロジェクトに追加します。
コンソール
Google Cloud Console で、[イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有するグループのメールアドレスを入力します。例:
admins@example.com
[ロール] リストで、[Compute Engine] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
ユーザーが Google Cloud コンソール で共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。
Google Cloud コンソールの [IAM] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。例:
admins@example.com
[ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
gcloud
ユーザーに roles/compute.imageUser
ロールを付与するには、gcloud
compute images add-iam-policy-binding
コマンドを使用します。
gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='roles/compute.imageUser'
次のように置き換えます。
IMAGE_NAME
: イメージの名前(例:custom-centos-8
)MEMBER
: ロールを付与する有効な ID(group:admins@example.com
など)
必要に応じて、これらの共有イメージを images.list
リクエストで表示するには、gcloud projects add-iam-policy-binding
コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
API
リソースの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy
メソッドを使用します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。メンバーを追加するには、次の形式を使用します。
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
たとえば、
roles/compute.imageUser
をtest-user@example.com
に付与するには、次のバインディングをポリシーに追加します。{ "members": [ "user:test-user@example.com" ], "role":"roles/compute.imageUser" }
setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、images.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
(省略可能)ユーザーが
images.list
リクエストでこれらの共有イメージを表示できるようにするには、projects.setIamPolicy
メソッドを使用して、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)をユーザーに付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
カスタム イメージを公開する
組織またはプロジェクトに属しているユーザーであるかどうかに関係なく、すべての認証済み Compute Engine ユーザーとカスタム イメージを共有できます。
すべての認証済みユーザーと共有できるのは、イメージなどの共有リソースのみです。プロジェクトまたは組織をすべての認証済みユーザーと共有することはできません。この制限事項(およびリソース階層)は、組織が誤ってプロジェクト全体を認証済み Compute Engine ユーザーと共有しないようにするためのものです。
次の例は、すべての認証済み Compute Engine ユーザーに、カスタム イメージに対する Compute イメージ ユーザーのロール(roles/compute.imageUser
)を付与する方法を示しています。
gcloud
イメージを公開するには、gcloud compute images add-iam-policy-binding
コマンドを使用します。
gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='allAuthenticatedUsers' \ --role='roles/compute.imageUser'
IMAGE_NAME
はリソースの名前(例: my_image
)に置き換えます。
API
getIamPolicy
メソッドを使用して既存のポリシーを読み取ります。たとえば、特定のイメージでポリシーを取得するには、images.getIamPolicy
メソッドを使用します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを追加または削除するには、テキスト エディタでポリシーを編集します。
{ "members": [ "allAuthenticatedUsers" ], "role":"roles/compute.imageUser" }
setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。たとえば、特定のイメージにポリシーを設定するには、images.setIamPolicy
メソッドを使用します。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクトのプロジェクト IDIMAGE_NAME
: イメージの名前
マネージド インスタンス グループにイメージへのアクセス権限を付与する
Compute Engine を使用して、マネージドまたは非マネージド インスタンスとして VM グループを作成できます。マネージド インスタンス グループ(MIG)を作成すると、Compute Engine は Google API サービス エージェントを使用して Compute Engine API を呼び出し、異常な VM の再作成や更新など、そのグループに関連するアクションを実行します。
他のプロジェクトのイメージを使用して MIG を作成する場合は、MIG を作成するプロジェクトに属する API サービス アカウントに Compute イメージ ユーザーのロール(roles/compute.imageUser
)を付与します。次に例を示します。
- プロジェクト A で、プロジェクト B が所有するイメージを使用して MIG を作成するとします。
- プロジェクト B がプロジェクト A のサービス アカウントに Compute イメージ ユーザーのロールを付与します。
- これにより、プロジェクト A でプロジェクト B のイメージを使用して MIG を作成できます。
Compute イメージ ユーザーのロールを付与した後、マネージド グループのインスタンス テンプレートの作成時にコンソールまたはイメージの URL を使用して、他のプロジェクトからイメージにアクセスできます。
サービス アカウントのメールアドレスを取得する
Google Cloud コンソール で、アクセスを付与するサービス アカウントが属するプロジェクトの [IAM] ページに移動します。
プロンプトが表示されたら、リストからプロジェクトを選択します。
次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。
PROJECT_NUMBER@cloudservices.gserviceaccount.com
サービス アカウントのメールアドレスを取得した後、次のいずれかのセクションに進みます。
MIG に別のプロジェクト内のすべてのイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加して Compute イメージ ユーザーのロール(roles/compute.imageUser
)を付与します。
Console
Google Cloud コンソール で、イメージ プロジェクトの [IAM] ページに移動します。
新しいメンバーを追加するには、
[アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、サービス アカウントのメールアドレスを入力します。
[ロール] リストで、[Compute] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
gcloud
gcloud projects
add-iam-policy-binding
コマンドを使用して、イメージ プロジェクトからサービス アカウントを追加します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' --role='roles/compute.imageUser'
次のように置き換えます。
PROJECT_ID
: 共有するイメージが含まれるプロジェクトの IDSERVICE_ACCOUNT_EMAIL
: サービス アカウントのメールアドレス
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
API
イメージ プロジェクトの IAM ポリシーを取得するには、
projects.getIamPolicy
メソッドを使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
PROJECT_ID
は、イメージ プロジェクトのプロジェクト ID に置き換えます。サービス アカウントに
roles/compute.imageUser
ロールを付与するには、テキスト エディタでポリシーを編集します。{ "bindings": [ { "role": "roles/compute.imageUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] } ] }
SERVICE_ACCOUNT_EMAIL
の部分は、サービス アカウントのメールアドレスで置き換えます。projects.setIamPolicy
を使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
PROJECT_ID
の部分は、イメージ プロジェクトのプロダクト ID で置き換えます。これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
MIG に別のプロジェクト内の一部のイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加し、特定のイメージに対する Compute イメージ ユーザーロール(roles/compute.imageUser
)を付与します。
コンソール
Google Cloud コンソール で、イメージ プロジェクトの [イメージ] ページに移動します。
共有するイメージの横にあるチェックボックスをオンにします。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
[権限] パネルで、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有するサービス アカウントのメールアドレスを入力します。例:
test123@example.domain.com
[ロール] リストで [Compute] を選択し、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
gcloud
サービス アカウントに特定のイメージへのアクセス権を付与するには、gcloud compute images add-iam-policy-binding
コマンドを使用します。
gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \ --role='roles/compute.imageUser'
次のように置き換えます。
IMAGE_NAME
: 共有するイメージの名前SERVICE_ACCOUNT_EMAIL
: サービス アカウントのメールアドレス
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
API
イメージの IAM ポリシーを取得するには、
images.getIamPolicy
メソッドを使用します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: イメージ プロジェクトのプロジェクト IDIMAGE_NAME
: 共有するイメージの名前
サービス アカウントに
roles/compute.imageUser
ロールを付与するには、テキスト エディタでポリシーを編集します。{ "bindings": [ { "role": "roles/compute.imageUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_EMAIL" ] } ] }
SERVICE_ACCOUNT_EMAIL
の部分は、サービス アカウントのメールアドレスで置き換えます。images.setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: イメージ プロジェクトのプロジェクト IDIMAGE_NAME
: 共有するイメージの名前
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
共有イメージとスナップショットの使用を制御する
イメージを他のユーザーと共有した後、組織内でそのユーザーがそれらのリソースを使用する場所を制御できます。constraints/compute.storageResourceUseRestrictions
制限を設定して、ユーザーがストレージ リソースの使用を許可されているプロジェクトを定義します。
これらの制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、resourcemanager.organizationAdmin
ロールには、これらの制約を設定する権限があります。
gcloud organization list
コマンドを使用して、組織の組織 ID を検索します。gcloud organizations list
gcloud resource-manager org-policies describe
コマンドを使用して、組織の既存のポリシー設定を取得します。gcloud resource-manager org-policies describe \ compute.storageResourceUseRestrictions \ --organization ORGANIZATION_ID > org-policy.yaml
ORGANIZATION_ID の部分は、12 桁の数値の組織 ID で置き換えます。
テキスト エディタで
org-policy.yaml
ファイルを開き、compute.storageResourceUseRestrictions
制約を変更します。必要な制限を追加し、また不要になった制限を削除します。ファイルの編集が終了したら、変更を保存します。たとえば、ポリシー ファイルに次の制約エントリを設定できます。constraint: compute.storageResourceUseRestrictions listPolicy: allowedValues: - under:organization/organization-id
gcloud resource-manager org-policies set-policy
コマンドを使用してorg-policy.yaml
ファイルを組織に適用します。gcloud resource-manager org-policies set-policy \ --organization=ORGANIZATION_ID org-policy.yaml
ORGANIZATION_ID の部分は、12 桁の数値の組織 ID で置き換えます。
組織ポリシーで制約の構成が完了したら、それらの制約をテストして、必要な制約が作成されることを確認します。
別のプロジェクトのイメージを使用する
別のプロジェクト内にあるイメージへのアクセス権限が付与されている場合、そのプロジェクト内のそれらのイメージにアクセスするには、リクエストで該当するイメージ プロジェクトを指定します。
たとえば、別のプロジェクトの共有イメージを使用して VM を作成するには、次の手順を行います。
Console
Google Cloud Console で、[インスタンスの作成] ページに移動します。
- VM の名前を指定します。詳しくは、リソースの命名規則をご覧ください。
- (省略可)この VM のゾーンを変更します。Compute Engine は、複数のゾーンで各リージョンが均等に使用されるように、各リージョン内でゾーンのリストをランダム化します。
- VM のマシン構成を選択します。
- [ブートディスク] セクションで、[変更] をクリックしてブートディスクを構成し、次の操作を行います。
- [カスタム イメージ] タブを選択します。
- イメージ プロジェクトを選択するには、[プロジェクトを選択] をクリックし、次の操作を行います。
- イメージを含むプロジェクトを選択します。
- [開く] をクリックします。
- [イメージ] リストで、インポートするイメージをクリックします。
- ブートディスクのタイプとサイズを選択します。
- ブートディスクのオプションを確認するには、[選択] をクリックします。
VM への HTTP または HTTPS トラフィックを許可するには、[ファイアウォール] セクションで [HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] を選択します。
Google Cloud コンソール によってネットワーク タグが VM に追加されます。また、対応する上り(内向き)ファイアウォール ルールが作成され、
tcp:80
(HTTP)またはtcp:443
(HTTPS)で受信するすべてのトラフィックが許可されます。このネットワーク タグによってファイアウォール ルールが VM に関連付けられます。詳細については、Virtual Private Cloud のドキュメントでファイアウォール ルールの概要をご覧ください。- VM を起動して作成するには、[作成] をクリックします。
gcloud
gcloud compute instances create command
を使用して VM を作成し、--image
フラグと --image-project
フラグを使用してイメージ名とそのイメージが属するプロジェクトを指定します。
gcloud compute instances create VM_NAME \ --image=IMAGE \ --image-project=IMAGE_PROJECT
次のように置き換えます。
VM_NAME
: 新しい VM の名前IMAGE
: イメージの名前IMAGE_PROJECT
: イメージが属するプロジェクト
コマンドが成功すると、gcloud
は新しい VM のプロパティを返します。
Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS example-instance us-central1-b e2-standard-2 10.240.0.4 104.198.53.60 RUNNING
API
API で共有イメージを使用して VM を作成するプロセスは、一般公開イメージを使用して VM を作成する場合と同じです。共有イメージから VM を作成するには、instances.insert
メソッドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instances { "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name":"VM_NAME
", "disks":[ { "initializeParams":{ "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot":true } ], "networkInterfaces":[ { "network":"global/networks/NETWORK_NAME" } ], "shieldedInstanceConfig":{ "enableSecureBoot":"ENABLE_SECURE_BOOT" } }
以下を置き換えます。
PROJECT_ID
: VM を作成するプロジェクトの IDZONE
: VM を作成するゾーンMACHINE_TYPE_ZONE
: 新しい VM に使用するマシンタイプを含むゾーンMACHINE_TYPE
: 新しい VM のマシンタイプ(事前定義またはカスタム)VM_NAME
: 新しい VM の名前IMAGE_PROJECT
: 共有イメージを含むプロジェクトの名前IMAGE
またはIMAGE_FAMILY
: 次のいずれかを指定します。IMAGE
: 共有イメージの名前。例:"sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2"
IMAGE_FAMILY
: カスタム イメージ ファミリーの一部として共有イメージを作成する場合、そのカスタム イメージ ファミリーを指定します。これにより、カスタム イメージ ファミリー内の最新の非推奨ではない OS イメージから VM が作成されます。たとえば、
"sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family"
を指定すると、Compute Engine はカスタムfinance-debian-family
イメージ ファミリーの OS イメージの最新バージョンから VM を作成します。
NETWORK_NAME
: VM に使用する VPC ネットワーク。default
を指定して、デフォルト ネットワークを使用できます。ENABLE_SECURE_BOOT
: 省略可。Shielded VM 機能をサポートしているイメージを選択した場合は、Compute Engine がデフォルトで仮想トラステッド プラットフォーム モジュール(vTPM)と整合性モニタリングを有効にします。Compute Engine は、デフォルトではセキュアブートを有効にしません。
enableSecureBoot
にtrue
を指定すると、Compute Engine は 3 つの Shielded VM 機能をすべて有効にした VM を作成します。Compute Engine が VM を起動した後、Shielded VM のオプションを変更するには、VM を停止する必要があります。
また、別のプロジェクトのイメージからブート永続ディスクを作成することもできます。イメージからブートディスクを作成する方法については、スタンドアロン ブート永続ディスクの作成をご覧ください。
共有イメージへのアクセス権を取り消す
ユーザーが Compute Engine リソースにアクセスする必要がなくなったら、Google Cloud コンソール、Google Cloud CLI、または Compute Engine API を使用して、そのユーザーのアクセス権限を取り消すことができます。
コンソール
Google Cloud コンソール で、イメージ プロジェクトの [イメージ] ページに移動します。
更新するイメージの横にあるチェックボックスをオンにします。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
ユーザーを削除するロールを開きます。
そのロールからユーザーを削除するには、[
削除] をクリックします。
gcloud
イメージに対するロールからユーザーを削除するには、--member
フラグと --role
フラグを指定して gcloud compute images
remove-iam-policy-binding
コマンドを使用します。
gcloud compute images remove-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
IMAGE_NAME
: イメージの名前(例:my_image
)MEMBER
: 削除する ID形式は
user|group|serviceAccount:email
またはdomain:domain
にする必要があります。次に例を示します。user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
: ID を削除するロール
ベータ版のリソースへのアクセス権限を取り消すには、代わりに gcloud beta compute
コマンドを使用します。
API
images.getIamPolicy
メソッドを使用して既存のポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクト IDIMAGE_NAME
: イメージの名前
Compute Engine からレスポンスとして現在のポリシーが返されます。
メンバーとそれに関連するロールを削除するには、テキスト エディタでポリシーを編集します。
images.setIamPolicy
メソッドを使用して、更新したポリシーを書き込みます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
次のように置き換えます。
PROJECT_ID
: このイメージが属するプロジェクト IDIMAGE_NAME
: イメージの名前
次のステップ
- IAM について確認する。
- Compute Engine IAM ロールのリストを確認する。
- イメージについて知る。
- 共有イメージを使用して VM を作成する方法について知る。
- スタンドアロンのブート永続ディスクを作成する方法について知る。
- Deployment Manager のデプロイでこの役割を使用する方法について知る。
- プロジェクト全体ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を適用する。