ユーザーがカスタム イメージを作成、削除、使用、共有できるようにするには、ユーザーに Identity and Access Management(IAM)の適切なロールを付与する必要があります。このドキュメントでは、カスタム イメージの作成と管理に必要な IAM 権限と、ユーザーにイメージを提供する方法について説明します。
Compute Engine リソースへのアクセス権限の付与に関する一般情報については、Compute Engine リソースへのアクセスの管理をご覧ください。IAM については、IAM のドキュメントをご覧ください。
始める前に
- IAM のドキュメントをお読みください。
- Compute Engine の IAM ロール、特に Compute イメージ ユーザーのロール(
roles/compute.imageUser
)について確認します。
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- 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
-
プロジェクトに対する
-
共有イメージを使用して VM を作成するには:
- プロジェクトに対する
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
- サービス アカウント:
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
- サービス アカウント:
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 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 リソースへのユーザーのアクセスをさらに細かく制御します。
変更を保存します。
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
などのカスタムロール。リソースのそれぞれの
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 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] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、イメージを共有する ID のメールアドレスを入力します。次に例を示します。
- Google アカウントのメールアドレス:
test-user@gmail.com
- Google グループ:
admins@googlegroups.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 Console で、[イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
[権限] 列を展開するには、[情報パネルを表示] をクリックします。
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 コンソールで、[インスタンスの作成] ページに移動します。
- VM の名前を指定します。詳しくは、リソースの命名規則をご覧ください。
- (省略可)この VM のゾーンを変更します。[任意] を選択すると、マシンタイプと可用性に基づいてゾーンが自動的に選択されます。
- VM のマシン構成を選択します。
- [ブートディスク] セクションで、[変更] をクリックして該当のブートディスクを構成し、次の操作を行います。
- [カスタム イメージ] タブを選択します。
- イメージ プロジェクトを選択するには、[プロジェクトを選択] をクリックし、次の操作を行います。
- イメージを含むプロジェクトを選択します。
- [開く] をクリックします。
- [イメージ] リストで、インポートするイメージをクリックします。
- ブートディスクのタイプとサイズを選択します。
- ブートディスクのオプションを確認するには、[選択] をクリックします。
VM への HTTP または HTTPS トラフィックを許可するには、[ファイアウォール] セクションで [HTTP トラフィックを許可する] または [HTTPS トラフィックを許可する] を選択します。
Google Cloud コンソールによってネットワーク タグが VM に追加されます。また、対応する上り(内向き)ファイアウォール ルールが作成され、
tcp:80
(HTTP)またはtcp:443
(HTTPS)で受信するすべてのトラフィックが許可されます。このネットワーク タグによってファイアウォール ルールが VM に関連付けられます。詳細については、Cloud Next Generation Firewall のドキュメントでファイアウォール ルールの概要をご覧ください。- VM を起動して作成するには、[作成] をクリックします。
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
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
- Google Cloud コンソールで [VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- 必要なパラメータを指定します。
- ページの上部または下部で [同等のコード] をクリックし、[Terraform] タブをクリックして Terraform コードを表示します。
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 は、デフォルトではセキュアブートを有効にしません。true
にenableSecureBoot
を指定すると、Compute Engine は 3 つの Shielded VM 機能をすべて有効にした VM を作成します。Compute Engine が VM を起動した後、Shielded VM のオプションを変更するには、VM を停止する必要があります。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 ロールのリストを確認します。
- イメージについて学習します。
- 共有イメージを使用して VM を作成する方法について知る。
- スタンドアロンのブート永続ディスクを作成する方法について知る。
- Deployment Manager のデプロイでこの役割を使用する方法について知る。
- プロジェクト全体ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を適用します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、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 を使用して、マネージドまたは非マネージドの VM グループを作成できます。マネージド インスタンス グループ(MIG)を作成すると、Compute Engine は Google API サービス エージェントを使用して Compute Engine API を呼び出し、異常な VM の再作成や更新など、そのグループに関連するアクションを実行します。
他のプロジェクトのイメージを使用して MIG を作成する場合は、MIG を作成するプロジェクトに属する API サービス アカウントに Compute イメージ ユーザー ロール(roles/compute.imageUser
)を付与します。次に例を示します。
Compute イメージ ユーザー ロールを付与した後、マネージド グループのインスタンス テンプレートの作成時にコンソールまたはイメージの URL を使用して、他のプロジェクトからイメージにアクセスできます。
サービス アカウントのメールアドレスを取得する
サービス アカウントのメールアドレスを取得した後、次のいずれかのセクションに進みます。
MIG に別のプロジェクト内のすべてのイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加して Compute イメージ ユーザーのロール(roles/compute.imageUser
)を付与します。
Console
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基に 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
役割には、これらの制約を設定する権限があります。
組織ポリシーで制約の構成が完了したら、それらの制約をテストして、必要な制約が作成されることを確認します。
別のプロジェクトのイメージを使用する
別のプロジェクト内にあるイメージへのアクセス権限が付与されている場合、そのプロジェクト内のそれらのイメージにアクセスするには、リクエストで該当するイメージ プロジェクトを指定します。
たとえば、別のプロジェクトの共有イメージを使用して VM を作成するには、次の手順を行います。
Console
gcloud
Terraform
Terraform で共有イメージを使用して VM を作成するプロセスは、一般公開イメージを使用して VM を作成する場合と同じです。
REST
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" } }
以下を置き換えます。
また、別のプロジェクトのイメージからブート永続ディスクを作成することもできます。イメージからブートディスクを作成する方法については、スタンドアロン ブート永続ディスクの作成をご覧ください。
共有イメージへのアクセス権を取り消す
ユーザーが 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 および関連会社の登録商標です。
最終更新日 2024-12-22 UTC。