ユーザーがカスタム イメージを作成、削除、使用、共有できるようにするには、ユーザーに Identity and Access Management(IAM)の適切なロールを付与する必要があります。このドキュメントでは、カスタム イメージの作成と管理に必要な IAM 権限と、ユーザーにイメージを提供する方法について説明します。
Compute Engine リソースへのアクセス権限の付与に関する一般情報については、Compute Engine リソースへのアクセスの管理をご覧ください。IAM については、IAM のドキュメントをご覧ください。
始める前に
- IAM のドキュメントをお読みください。
- Compute Engine の IAM ロール、特に Compute イメージ ユーザーのロール(
roles/compute.imageUser
)について確認します。 -
まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
-
プロジェクトに対するプロジェクト IAM 管理者(
roles/resourcemanager.projectIamAdmin
) -
プロジェクトに対する Compute 管理者(
roles/compute.admin
) -
ユーザーまたはサービス アカウントに、カスタム イメージの作成と共有に必要な権限を付与する:
- プロジェクトに対する
resourcemanager.projects.getIamPolicy
-
プロジェクトに対する
resourcemanager.projects.setIamPolicy
- プロジェクトに対する
-
ユーザーまたはサービス アカウントに、カスタム イメージの削除に必要な権限を付与する:
- プロジェクトに対する
resourcemanager.projects.getIamPolicy
- プロジェクトに対する
resourcemanager.projects.setIamPolicy
-
イメージに対する
compute.images.getIamPolicy
-
イメージに対する
compute.images.setIamPolicy
- プロジェクトに対する
-
ユーザーまたはサービス アカウントのカスタム イメージへのアクセス権を取り消す:
- プロジェクトに対する
resourcemanager.projects.getIamPolicy
-
プロジェクトに対する
resourcemanager.projects.setIamPolicy
- プロジェクトに対する
-
共有イメージを使用してインスタンスを作成する:
- プロジェクトに対する
compute.instances.create
- カスタム イメージを使用して VM を作成する: イメージに対する
compute.images.useReadOnly
- スナップショットを使用して VM を作成する: スナップショットに対する
compute.snapshots.useReadOnly
- インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する
compute.instanceTemplates.useReadOnly
- レガシー ネットワークを VM に割り当てる: プロジェクトに対する
compute.networks.use
- VM の静的 IP アドレスを指定する: プロジェクトに対する
compute.addresses.use
- レガシー ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトに対する
compute.networks.useExternalIp
- VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する
compute.subnetworks.use
- VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する
compute.subnetworks.useExternalIp
- VM の VM インスタンス メタデータを設定する: プロジェクトに対する
compute.instances.setMetadata
- VM にタグを設定する: VM に対する
compute.instances.setTags
- VM にラベルを設定する: VM に対する
compute.instances.setLabels
- VM が使用するサービス アカウントを設定する: VM に対する
compute.instances.setServiceAccount
- VM に新しいディスクを作成する: プロジェクトに対する
compute.disks.create
- 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する
compute.disks.use
- 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する
compute.disks.useReadOnly
- プロジェクトに対する
- 新しいイメージの作成を許可する
compute.images.create
- プロジェクト内のイメージの一覧表示を許可する
compute.images.list
compute.disks.use
(ディスクからイメージを作成する場合)compute.disks.list
(プロジェクト内のすべてのディスクを一覧表示する場合)Google Cloud コンソールで、プロジェクトまたは組織の [IAM] ページに移動します。
新しいメンバーを追加するには、[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、アクセスを付与する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロールを選択] リストで、[Compute Engine] > [Compute ストレージ管理者] を選択します。カスタムロールを作成した場合は、そのロールを選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
ORGANIZATION_ID
またはPROJECT_ID
: 組織 ID またはプロジェクト ID。たとえば、my-organization-1
、my-project-1
です。MEMBER
: ロールを付与する有効な ID。次に例を示します。
- Google アカウントのメールアドレス:
user:user@gmail.com
- Google グループ:
group:admins@googlegroups.com
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
serviceAccount:server@example.gserviceaccount.com
- Google Workspace ドメイン:
domain:example.com
- Google アカウントのメールアドレス:
リソースの
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.images.delete
compute.images.list
(ユーザーがプロジェクトまたは組織内のイメージを一覧表示する必要がある場合)イメージの取得を許可する
compute.images.get
Google Cloud コンソールで [イメージ] ページに移動します。
権限を付与する対象のイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.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
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[Compute Engine] の上にポインタを置いて [ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
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
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
serviceAccount:server@example.gserviceaccount.com
- Google Workspace ドメイン:
domain:example.com
- Google アカウントのメールアドレス:
ROLE
: この ID に割り当てるロール。たとえば、roles/compute.storageAdmin
ロール、またはroles/customImageDeletionRole
などのカスタムロール。リソースのそれぞれの
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 イメージ ユーザー(
roles/compute.imageUser
): リクエストで、イメージに対する他の権限がなくても、イメージを一覧表示し、読み取り、使用する権限 - Compute ストレージ管理者(
roles/compute.storageAdmin
): ディスク、イメージ、スナップショットを作成、変更、削除する権限 Google Cloud コンソールで [イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。
次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[Compute Engine] の上にポインタを置いて、[イメージ ユーザー] または [ストレージ管理者] を選択するか、カスタムロールを選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloudリソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
Google Cloud コンソールで、[IAM] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.com
- 外部 ID プロバイダの ID:
principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
- サービス アカウント:
server@example.gserviceaccount.com
- Google Workspace ドメイン:
example.com
- Google アカウントのメールアドレス:
[ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloudリソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
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
、カスタムロールなど)リソースの
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
: イメージの名前
Google Cloud コンソールで [イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
1 人以上のメンバーを追加するには、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有するグループのメールアドレスを入力します。例:
admins@example.com
[ロール] リストで、[Compute Engine] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloudリソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
Google Cloud コンソールで、[IAM] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。例:
admins@example.com
[ロール] リストで、[プロジェクト] の上にポインタを置いて、[閲覧者] を選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloudリソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
IMAGE_NAME
: イメージの名前(例:custom-centos-8
)MEMBER
: ロールを付与する有効な ID(group:admins@example.com
など)リソースの
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
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
: イメージの名前
- プロジェクト A で、プロジェクト B が所有するイメージを使用して MIG を作成するとします。
- プロジェクト B がプロジェクト A のサービス アカウントに Compute イメージ ユーザーのロールを付与します。
- これにより、プロジェクト A でプロジェクト B のイメージを使用して MIG を作成できます。
Google Cloud コンソールで、アクセス権を付与するサービス アカウントが属するプロジェクトの [IAM] ページに移動します。
プロンプトが表示されたら、リストからプロジェクトを選択します。
次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Google Cloud コンソールで、イメージ プロジェクトの [IAM] ページに移動します。
新しいメンバーを追加するには、[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、サービス アカウントのメールアドレスを入力します。
[ロール] リストで、[Compute] の上にポインタを置いて、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloudリソースへのユーザーのアクセスをさらに細かく制御します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
PROJECT_ID
: 共有するイメージが含まれるプロジェクトの IDSERVICE_ACCOUNT_EMAIL
: サービス アカウントのメールアドレスイメージ プロジェクトの 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 を作成できます。
Google Cloud コンソールで、イメージ プロジェクトの [イメージ] ページに移動します。
共有するイメージの横にあるチェックボックスをオンにします。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
[権限] パネルで、[プリンシパルを追加] をクリックします。
[新しいプリンシパル] フィールドに、イメージを共有するサービス アカウントのメールアドレスを入力します。例:
test123@example.domain.com
[ロール] リストで [Compute] を選択し、[Compute イメージ ユーザー] を選択します。
省略可: 条件付きロール バインディングを追加して、 Google Cloud リソースへのユーザーのアクセスをさらに細かく制御します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
IMAGE_NAME
: 共有するイメージの名前SERVICE_ACCOUNT_EMAIL
: サービス アカウントのメールアドレスイメージの 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 を作成できます。
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 で置き換えます。
Google Cloud コンソールで、イメージ プロジェクトの [イメージ] ページに移動します。
更新するイメージの横にあるチェックボックスをオンにします。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
ユーザーを削除するロールを開きます。
そのロールからユーザーを削除するには、[
削除] をクリックします。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 を削除するロール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 ロールのリストを確認する。
- イメージについて学習します。
- 共有イメージを使用してインスタンスを作成する方法について学習します。
- スタンドアロンのブート永続ディスクを作成する方法について知る。
- Deployment Manager のデプロイでこの役割を使用する方法について知る。
- プロジェクト全体ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を適用する。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロール
カスタム イメージへのアクセスを管理するために必要な権限を取得するには、自身に次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、カスタム イメージへのアクセスを管理するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
カスタム イメージへのアクセスを管理するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
制限事項
イメージについては、特殊なメンバータイプ
allUsers
にロールを付与することはできません。カスタム イメージを作成する権限を付与する
ユーザーに、組織またはプロジェクトでのカスタム イメージの作成を可能にする権限を付与できます。
Compute Engine には、事前定義の Compute ストレージ管理者ロール(
roles/compute.storageAdmin
)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの作成のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。ユーザーに組織レベルでカスタム イメージを作成する権限を付与した場合、そのユーザーは組織内の任意のプロジェクトのカスタム イメージを作成できます。
コンソール
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'
次のように置き換えます。
REST
カスタム イメージを削除する権限を付与する
必要に応じて、次の権限をユーザーに付与できます。
プロジェクト レベルで権限を付与すると、ユーザーはそのプロジェクトが所有するすべてのイメージを削除できます。組織レベルで権限を付与すると、プロジェクトに関係なく、ユーザーは組織が所有する任意のイメージを削除できます。
Compute Engine には、事前定義の Compute ストレージ管理者ロール(
roles/compute.storageAdmin
)が用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの削除のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、次の権限を含めます。コンソール
特定のイメージを削除する権限を付与するには、次の手順を行います。
プロジェクトまたは組織のイメージを削除する権限を付与する手順は次のとおりです。
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'
次のように置き換えます。
REST
組織内でカスタム イメージを共有する権限を付与する
プロジェクトが組織に属している場合、その組織に他にもプロジェクトがあり、プロジェクトごとに異なるアクセスレベルが設定されている場合があります。カスタム イメージを作成すると、組織内の他のプロジェクトの他のユーザーとイメージを共有できます。
Compute Engine には、イメージの管理に使用できる次の IAM 事前定義ロールが用意されています。
または、独自のカスタム IAM ロールを作成することもできます。
ベスト プラクティスとして、これらのイメージをホストする専用の単一のプロジェクトにすべてのカスタム イメージを保存することをおすすめします。これにより、イメージを管理しやすくなるとともに、特定のチームにそのチームに必要なイメージのみへのアクセス権限を付与できます。チームにイメージ プロジェクト全体へのアクセス権限を付与することもできますが、イメージ プロジェクト全体へのチームアクセスは最小権限の原則に反するため、この方法はおすすめしません。
次の例は、グループを追加して、そのグループのユーザーがイメージにアクセスできるようにする方法を示しています。
コンソール
ユーザーが Google Cloud コンソールから共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(
roles/viewer
)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。gcloud
特定のイメージの IAM ポリシーを更新するには、
gcloud compute images add-iam-policy-binding
コマンドを使用します。gcloud compute images add-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
必要に応じて、これらの共有イメージを
images.list
リクエストで表示するには、gcloud projects add-iam-policy-binding
コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
REST
(省略可能)ユーザーが
images.list
リクエストでこれらの共有イメージを表示できるようにするには、projects.setIamPolicy
メソッドを使用して、イメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)をユーザーに付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
組織間でカスタム イメージを共有する権限を付与する
カスタム イメージのカタログを作成すると、組織外部のパートナー、ユーザー、請負業者とイメージを共有するのに役立ちます。組織外部のユーザーとイメージを共有するには、組織外部のユーザーをイメージ ユーザーとしてプロジェクトに追加します。
コンソール
ユーザーが Google Cloud コンソールから共有カスタム イメージを起動できるようにするには、イメージ プロジェクトの閲覧者の IAM ロール(
roles/viewer
)をユーザーに付与します。このロールを付与することで、共有イメージがイメージ選択リストに表示されます。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'
次のように置き換えます。
必要に応じて、これらの共有イメージを
images.list
リクエストで表示するには、gcloud projects add-iam-policy-binding
コマンドを使用して、ユーザーにイメージ プロジェクトの閲覧者の IAM ロール(roles/viewer
)を付与します。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
REST
カスタム イメージを一般公開する権限を付与する
組織またはプロジェクトに属しているユーザーであるかどうかに関係なく、すべての認証済み 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
)に置き換えます。REST
マネージド インスタンス グループにイメージへのアクセス権限を付与する
Compute Engine を使用して、マネージドまたは非マネージドのインスタンス グループを作成できます。マネージド インスタンス グループ(MIG)を作成すると、Compute Engine は Google API サービス エージェントを使用して Compute Engine API を呼び出し、異常なインスタンスの再作成や更新など、そのグループに関連するアクションを実行します。
他のプロジェクトのイメージを使用して MIG を作成する場合は、MIG を作成するプロジェクトに属する API サービス アカウントに Compute イメージ ユーザーのロール(
roles/compute.imageUser
)を付与します。次に例を示します。Compute イメージ ユーザーのロールを付与した後、マネージド グループのインスタンス テンプレートの作成時にコンソールまたはイメージの URL を使用して、他のプロジェクトからイメージにアクセスできます。
サービス アカウントのメールアドレスを取得する
サービス アカウントのメールアドレスを取得した後、次のいずれかのセクションに進みます。
MIG に別のプロジェクト内のすべてのイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加して Compute イメージ ユーザーのロール(
roles/compute.imageUser
)を付与します。コンソール
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に 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'
次のように置き換えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
REST
MIG に別のプロジェクト内の一部のイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加し、特定のイメージに対する Compute イメージ ユーザーロール(
roles/compute.imageUser
)を付与します。コンソール
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に 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'
次のように置き換えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に MIG を作成できます。
REST
共有イメージとスナップショットの使用を制御する
イメージを他のユーザーと共有した後、組織内でそのユーザーがそれらのリソースを使用する場所を制御できます。
constraints/compute.storageResourceUseRestrictions
制限を設定して、ユーザーがストレージ リソースの使用を許可されているプロジェクトを定義します。これらの制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、
resourcemanager.organizationAdmin
ロールには、これらの制約を設定する権限があります。組織ポリシーで制約の構成が完了したら、それらの制約をテストして、必要な制約が作成されることを確認します。
別のプロジェクトのイメージを使用する
別のプロジェクト内にあるイメージへのアクセス権限が付与されている場合、そのプロジェクト内のそれらのイメージにアクセスするには、リクエストで該当するイメージ プロジェクトを指定します。
たとえば、別のプロジェクトの共有イメージを使用してインスタンスを作成するには、共有イメージからインスタンスを作成するの手順に沿って操作します。
別のプロジェクトのイメージからブートディスク ボリュームを作成することもできます。イメージからブートディスクを作成する方法については、スタンドアロン ブート永続ディスクの作成をご覧ください。
共有イメージへのアクセス権を取り消す
ユーザーが Compute Engine リソースにアクセスする必要がなくなったら、 Google Cloud コンソール、Google Cloud CLI、または REST を使用して、ユーザーのアクセス権限を取り消すことができます。
コンソール
gcloud
イメージに対するロールからユーザーを削除するには、
--member
フラグと--role
フラグを指定してgcloud compute images remove-iam-policy-binding
コマンドを使用します。gcloud compute images remove-iam-policy-binding IMAGE_NAME \ --member='MEMBER' \ --role='ROLE'
次のように置き換えます。
ベータ版のリソースへのアクセス権限を取り消すには、代わりに
gcloud beta compute
コマンドを使用します。REST
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-07-11 UTC。
-