ユーザーがカスタム イメージを作成、削除、使用、共有できるようにするには、ユーザーに Identity and Access Management(IAM)の適切なロールを付与する必要があります。IAM を使用して次の作業を行います。
- カスタム イメージを作成する権限を付与する
- カスタム イメージを組織内または組織間で共有する
- カスタム イメージを公開する
- マネージド インスタンス グループにイメージへのアクセス権限を付与する
- 共有済みのイメージの使用を制限する
- カスタム イメージを削除する権限を付与する
- IAM ポリシーからメンバーを削除して権限を取り消す
Compute Engine リソースへのアクセス権限の付与に関する一般情報については、Compute Engine リソースへのアクセスの管理をご覧ください。IAM については、IAM のドキュメントをご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合、以下を行ってください。
- gcloud コマンドライン ツールの最新バージョンをインストールするか、最新バージョンに更新します。
- デフォルトのリージョンとゾーンを設定します。
- このガイドの API の例を使用する場合、API アクセスを設定します。
- IAM のドキュメントをお読みください。
- Compute Engine の IAM ロール、特に
roles/compute.imageUser
ロールについて確認します。
制限事項
イメージに対する allUsers
ロールをユーザーに付与することはできません。
カスタム イメージを作成する権限を付与する
ユーザーに、組織またはプロジェクトでのカスタム イメージの作成を可能にする権限を付与できます。
Compute Engine には、事前定義されたストレージ管理者ロールが用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの作成のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、必要に応じて次の権限を含めます。
- 新しいイメージの作成を許可する
compute.images.create
- プロジェクト内のイメージの一覧表示を許可する
compute.images.list
compute.disks.use
(ディスクからイメージを作成する場合)compute.disks.list
(プロジェクト内のディスクのリストを表示する権限を付与する場合)
ユーザーに組織でカスタム イメージを作成する権限を付与した場合、そのユーザーは組織内の任意のプロジェクトのカスタム イメージを作成できます。
Console
Google Cloud Console で、プロジェクトまたは組織の [IAM と管理] ページに移動します。
[追加] ボタンをクリックして新しいメンバーを追加します。
[新しいメンバー] フィールドに、アクセスを付与する ID のメールアドレスを入力します。
[ロールを選択] リストで、[Compute Engine] > [Compute ストレージ管理者] を選択します。カスタムロールを作成した場合は、そのロールを選択します。
変更を保存します。
gcloud
組織レベルで roles/compute.storageAdmin
ロールを付与するには:
gcloud organizations add-iam-policy-binding organization-id \
--member='member' \
--role='roles/compute.storageAdmin'
プロジェクト レベルで roles/compute.storageAdmin
ロールを付与するには:
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。形式はuser|group|serviceAccount:email
またはdomain:domain
にする必要があります。例:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
API
API を使用して IAM ポリシーを直接変更するには、次の手順に従います。
getIamPolicy
メソッドを使用して既存のポリシーを読み取ります。プロジェクトの場合は、次の URL を使用します。project-id
の部分は、プロジェクト ID で置き換えます。例:my-project-1
。POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy
組織の場合は、次の URL を使用します。
organization-id
の部分は、12 桁の数値の組織 ID で置き換えます。例:123456578920
。POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、メンバーおよび関連するロールを追加または削除します。たとえば、
roles/compute.storageAdmin
ロールを email@example.com に付与するには、次の新しいバインディングをポリシーに追加します。{ "members": [ "group:admins@example.com" ], "role":"roles/compute.storageAdmin" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
project-id
の部分は、プロジェクト ID で置き換えます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
カスタム イメージを削除する権限を付与する
必要に応じて、次の権限をユーザーに付与できます。
- 特定のイメージを削除する
- 特定のプロジェクトが所有するイメージを削除する
- 組織内の任意のプロジェクトからイメージを削除する
プロジェクト レベルで権限を付与すると、ユーザーはそのプロジェクトが所有するすべてのイメージを削除できます。組織レベルで権限を付与すると、プロジェクトに関係なく、ユーザーは組織が所有する任意のイメージを削除できます。
Compute Engine には、事前定義されたストレージ管理者ロールが用意されています。このロールが割り当てられたユーザーは、イメージ、ディスク、スナップショットを含むストレージ関連のリソースを作成、削除、管理できます。イメージの削除のみを許可するロールが必要な場合は、カスタムロールを作成する必要があります。作成するカスタムロールに、必要に応じて次の権限を含めます。
- イメージの削除を許可する
compute.images.delete
- 必要に応じてプロジェクトまたは組織内のイメージの一覧表示を許可する
compute.images.list
- イメージの取得を許可する
compute.images.get
Console
特定のイメージを削除する権限を付与するには:
Google Cloud Console で、[イメージ] ページに移動します。
権限を付与する対象のイメージを選択します。
右側の [権限] パネルで、[メンバーを追加] をクリックします。
イメージを共有する 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
[ロール] リストで [Compute Engine] をポイントし、[Compute ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。
変更を保存します。
プロジェクトまたは組織のイメージを削除する権限を付与するには:
プロジェクトまたは組織の [IAM と管理] ページに移動します。
ページ上部にある [追加] ボタンをクリックします。
[新しいメンバー] フィールドに、アクセスを付与する 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
[ロール] リストで [Compute Engine] をポイントし、[Compute ストレージ管理者] を選択します。または、[カスタム] リストからカスタムロールを選択します。
変更を保存します。
gcloud
組織レベルでイメージを削除する権限をユーザーに付与するには:
gcloud organizations add-iam-policy-binding organization-id \
--member='member' \
--role='role'
プロジェクト レベルでイメージを削除する権限を付与するには:
gcloud projects add-iam-policy-binding project-id \
--member='member' \
--role='role'
特定のイメージを削除する権限を付与するには:
gcloud 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。形式は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 に割り当てるロール。たとえば、roles/compute.storageAdmin
、またはroles/customImageDeletionRole
などのカスタムロール。
API
API を使用してイメージを削除する権限を付与するには:
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。プロジェクトの場合は、次の URL を使用します。POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy
project-id
の部分は、プロジェクト ID で置き換えます。組織の場合は、次の URL を使用します。
POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy
organization-id
の部分は、12 桁の数値の組織 ID で置き換えます。特定のイメージの場合は、次の URL を使用します。
POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
project-id
の部分はプロジェクト ID で置き換え、image-name
の部分はイメージ名で置き換えます。Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、メンバーおよび関連するロールを追加または削除します。たとえば、
roles/compute.storageAdmin
ロールを email@example.com に付与するには、次の新しいバインディングをポリシーに追加します。{ "members": [ "user:email@example.com" ], "role":"roles/compute.storageAdmin" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。例:POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
project-id
の部分は、プロジェクト ID で置き換えます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
組織内でカスタム イメージを共有する
プロジェクトが組織に属している場合、その組織に他にもプロジェクトがあり、プロジェクトごとに異なるアクセスレベルが設定されている場合があります。カスタム イメージを作成すると、組織内の他のプロジェクトの他のユーザーとイメージを共有できます。
イメージを管理するには、Compute Engine で事前定義している次の IAM のロールを使用できます。
roles/compute.imageUser
: リクエストで、イメージに対する他の権限がなくても、イメージを一覧表示し、読み取り、使用する権限。roles/compute.storageAdmin
: ディスク、イメージ、スナップショットを作成、変更、削除する権限。
または、独自のカスタム IAM ロールを作成することもできます。
ベスト プラクティスとして、Google ではカスタム イメージをホストすることに特化した 1 つのプロジェクトですべてのカスタム イメージを保持することをおすすめしています。これにより、イメージを管理しやすくなるとともに、特定のチームにそのチームに必要なイメージのみへのアクセス権限を付与できます。チームにイメージ プロジェクト全体へのアクセス権限を付与することもできますが、イメージ プロジェクト全体へのチームアクセスは最小権限の原則に反するため、この方法はおすすめしません。
次の例は、グループを追加して、そのグループのユーザーがイメージにアクセスできるようにする方法を示しています。
Console
Google Cloud Console で、[イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
右側の [権限] パネルで、[メンバーを追加] をクリックします。
イメージを共有する 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
[ロール] リストで [Compute Engine] をポイントし、[イメージ ユーザー] または [ストレージ管理者] を選択します。あるいは、カスタムロールを選択することもできます。
変更を保存します。
ユーザーが Cloud Console で共有カスタム イメージを起動できるようにするには、そのユーザーをプロジェクト閲覧者としてイメージ プロジェクトに追加する必要もあります。これにより、イメージ選択リストに共有イメージが表示されるようになります。
Google Cloud Console で、[IAM と管理] ページに移動します。
ページ上部にある [追加] ボタンをクリックします。
[新しいメンバー] フィールドに、イメージを共有する ID のメールアドレスを入力します。
[ロール] リストで [プロジェクト] をポイントし、[閲覧者] を選択します。
変更を保存します。
gcloud
gcloud
コマンドライン ツールを使用して、特定のイメージの IAM ポリシーを更新します。
gcloud compute images add-iam-policy-binding image-name \
--member='member' \
--role='role'
以下を置き換えます。
image-name
: イメージの名前。例:custom-centos-8
。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 に割り当てるロールです。たとえば、roles/compute.imageUser
、roles/compute.storageAdmin
、またはカスタムロールです。
(省略可能)ユーザーをプロジェクト閲覧者としてイメージ プロジェクトに追加し、images.list
リクエストでこれらの共有イメージがユーザーに表示されるようにします。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。
gcloud compute projects add-iam-policy-binding project-id \
--member='member' \
--role='roles/viewer'
API
API を使用して IAM ポリシーを直接変更するには、次の手順に従います。
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、ユーザーおよび関連するロールを追加または削除します。
user|group|serviceAccount:email
またはdomain:domain
の形式でユーザーを追加します。例:user:test-user@gmail.com
、group:admins@example.com
、serviceAccount:test123@example.domain.com
、またはdomain:example.domain.com
。たとえば、roles/compute.imageUser
ロールをemail@example.com
に付与するには、次のコードを追加します。{ "members": [ "user:email@example.com" ], "role":"roles/compute.imageUser" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
(省略可能)ユーザーをプロジェクト閲覧者としてイメージ プロジェクトに追加し、images.list
リクエストでこれらの共有イメージがユーザーに表示されるようにします。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
組織間でカスタム イメージを共有する
カスタム イメージのカタログを作成すると、組織外部のパートナー、ユーザー、請負業者とイメージを共有するのに役立ちます。組織外部のユーザーとイメージを共有するには、次の手順に従って組織外部のユーザーをイメージ ユーザーとしてプロジェクトに追加します。
Console
Google Cloud Console で、[イメージ] ページに移動します。
他のユーザーと共有するイメージを選択します。
右側の [権限] パネルで、[メンバーを追加] をクリックします。
イメージを共有するグループのメールアドレスを入力します。例:
group:admins@example.com
。[ロール] リストで [Compute Engine] をポイントし、[イメージ ユーザー] を選択します。
変更を保存します。
ユーザーが Cloud Console で共有カスタム イメージを起動できるようにするには、そのユーザーをプロジェクト閲覧者としてイメージ プロジェクトに追加する必要もあります。これにより、イメージ選択リストに共有イメージが表示されるようになります。
Google Cloud Console で、[IAM と管理] ページに移動します。
ページ上部にある [追加] ボタンをクリックします。
[新しいメンバー] フィールドに、イメージを共有する ID のメールアドレスを入力します。
[ロール] リストで [プロジェクト] をポイントし、[閲覧者] を選択します。
変更を保存します。
gcloud
gcloud
コマンドライン ツールを使用して、次のコマンドを実行します。
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 compute projects add-iam-policy-binding project-id \
--member='member' \
--role='roles/viewer'
API
API を使用してイメージの IAM ポリシーを直接変更するには:
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、ユーザーおよび関連するロールを追加または削除します。
user|group|serviceAccount:email
またはdomain:domain
の形式でユーザーを追加します。例:user:test-user@gmail.com
、group:admins@example.com
、serviceAccount:test123@example.domain.com
、またはdomain:example.domain.com
。たとえば、roles/compute.imageUser
ロールを email@example.com に付与するには、次のコードを追加します。{ "members": [ "user:email@example.com" ], "role":"roles/compute.imageUser" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
(省略可能)ユーザーをプロジェクト閲覧者としてイメージ プロジェクトに追加し、
images.list
リクエストでこれらの共有イメージがユーザーに表示されるようにします。ユーザーが共有イメージのリストを表示できるようにする必要がない場合は、この手順を省略できます。POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
カスタム イメージを一般公開する
組織またはプロジェクトに属しているユーザーであるかどうかに関係なく、すべての認証済み Compute Engine ユーザーとカスタム イメージを共有できます。
すべての認証済みユーザーと共有できるのは、イメージなどの共有リソースのみです。プロジェクトまたは組織をすべての認証済みユーザーと共有することはできません。この制限事項(およびリソース階層)は、組織が誤ってプロジェクト全体を認証済み Compute Engine ユーザーと共有しないようにするためのものです。
次の例は、すべての認証済み Compute Engine ユーザーに、カスタム イメージに対する roles/compute.imageUser
ロールを付与する方法を示しています。
gcloud
次のコマンドで、image-name
の部分をリソースの名前(たとえば、my_image
)で置き換えます。
gcloud compute images add-iam-policy-binding image-name \
--member='allAuthenticatedUsers' \
--role='roles/compute.imageUser'
API
API を使用して IAM ポリシーを直接変更するには、次の手順に従います。
getIamPolicy
メソッドを使用して既存のポリシーを読み取ります。例:POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、メンバーおよび関連するロールを追加または削除します。
{ "members": [ "allAuthenticatedUsers" ], "role":"roles/compute.imageUser" }
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクトのプロジェクト ID。image-name
: イメージの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
マネージド インスタンス グループにイメージへのアクセス権限を付与する
Compute Engine を使用して、マネージドまたは非マネージドのインスタンス グループを作成できます。マネージド インスタンス グループを作成した場合、Compute Engine は Google API サービス アカウントを使用して Compute Engine API を呼び出して、そのグループに関連するアクション(異常なインスタンスの再作成、インスタンスの更新など)を実行します。
他のプロジェクトのイメージを使用してマネージド インスタンス グループを作成する場合は、マネージド インスタンス グループを作成するプロジェクトに属する API サービス アカウントに roles/compute.imageUser
ロールを付与します。例:
- プロジェクト A で、プロジェクト B が所有するイメージを使用してマネージド インスタンス グループを作成するとします。
- プロジェクト B がプロジェクト A のサービス アカウントに
roles/compute.imageUser
ロールを付与します。 - これにより、プロジェクト A でプロジェクト B のイメージを使用してマネージド インスタンス グループを作成できます。
roles/compute.imageUser
ロールを付与した後、マネージド グループのインスタンス テンプレートを作成する際は、Console またはイメージの URL を使用して、他のプロジェクトのイメージにアクセスできます。
サービス アカウントのメールアドレスを取得する
サービス アカウントのメールアドレスを取得するには、次の手順に従います。
- Cloud Console で、アクセスを付与するサービス アカウントが属するプロジェクトの [IAM] ページに移動します。
- プロンプトが表示されたら、リストからプロジェクトを選択します。
次の形式のメールアドレスが設定された Google API サービス アカウントを見つけます。
project-number@cloudservices.gserviceaccount.com
上記のメールアドレスをメモします。
サービス アカウントのメールアドレスを取得した後、次のいずれかのリンクをクリックします。
マネージド インスタンス グループに別のプロジェクト内のすべてのイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加して roles/compute.imageUser
ロールを付与します。
Console
Google Cloud Console で、イメージ プロジェクトの [IAM と管理] ページに移動します。
新しいメンバーを追加するために、[追加] をクリックします。
[新しいメンバー] フィールドに、サービス アカウントのメールアドレスを入力します。
[ロール] リストで [Compute] をポイントし、[Compute イメージ ユーザー] を選択します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
gcloud
イメージ プロジェクトのサービス アカウントを追加します。
gcloud projects add-iam-policy-binding project-id \
--member 'serviceAccount:service-account-email' --role 'roles/compute.imageUser'
以下を置き換えます。
project-id
: 共有するイメージが含まれるプロジェクトの ID。service-account-email
: サービス アカウントのメールアドレス。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
API
イメージ プロジェクトの IAM ポリシーを取得します。
project-id
の部分は、イメージ プロジェクトのプロジェクト ID で置き換えます。POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy
テキスト エディタでポリシーを編集し、サービス アカウントに
roles/compute.imageUser
ロールを付与します。例:{ "bindings": [ { "role": "roles/compute.imageUser", "members": [ "serviceAccount:service-account-email" ] } ] }
service-account-email
の部分は、サービス アカウントのメールアドレスで置き換えます。更新したポリシーを書き込みます。
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
project-id
の部分は、イメージ プロジェクトのプロダクト ID で置き換えます。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
マネージド インスタンス グループに別のプロジェクト内の一部のイメージへのアクセス権限を付与する
サービス アカウントのメールアドレスを取得しているので、そのメールアドレスを別のプロジェクトに追加し、特定のイメージに対する roles/compute.imageUser
ロールを付与します。
Console
Google Cloud Console で、イメージ プロジェクトの [イメージ] ページに移動します。
共有するイメージを選択します。
[権限] パネルで、[メンバーを追加] をクリックします。
サービス アカウントのメールアドレスを入力します。
[ロール] リストで [Compute] を選択し、[Compute イメージ ユーザー] を選択します。
[保存] をクリックします。
サービス アカウントのプロジェクトに切り替えます。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
gcloud
サービス アカウントに特定のイメージへのアクセス権を付与するには:
gcloud images add-iam-policy-binding image-name \
--member 'serviceAccount:service-account-email' \
--role 'roles/compute.imageUser'
以下を置き換えます。
image-name
: 共有するイメージの名前。service-account-email
: サービス アカウントのメールアドレス。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
API
イメージの IAM ポリシーを取得します。
POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
以下を置き換えます。
project-id
: イメージ プロジェクトのプロジェクト ID。image-name
: 共有するイメージの名前。
テキスト エディタでポリシーを編集し、サービス アカウントに
roles/compute.imageUser
ロールを付与します。例:{ "bindings": [ { "role": "roles/compute.imageUser", "members": [ "serviceAccount:service-account-email" ] } ] }
service-account-email
の部分は、サービス アカウントのメールアドレスで置き換えます。更新したポリシーを書き込みます。
POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy
以下を置き換えます。
project-id
: イメージ プロジェクトのプロジェクト ID。image-name
: 共有するイメージの名前。
リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
これで、イメージ プロジェクトのイメージをベースにインスタンス テンプレートを作成して、そのインスタンス テンプレートを基にマネージド インスタンス グループを作成できます。
共有イメージとスナップショットの使用を制限する
イメージを他のユーザーと共有した後、組織内でそのユーザーがそれらのリソースを使用する場所を制御できます。constraints/compute.storageResourceUseRestrictions
制限を設定して、ユーザーがストレージ リソースの使用を許可されているプロジェクトを定義します。
これらの制約を設定するには、組織のポリシーを変更する権限が必要です。たとえば、resourcemanager.organizationAdmin
ロールには、これらの制約を設定する権限があります。
組織の組織 ID を確認します。
gcloud organizations list
組織の既存のポリシー設定を取得します。organization-id の部分は、12 桁の数値の組織 ID で置き換えます。
gcloud beta resource-manager org-policies describe \ compute.storageResourceUseRestrictions \ --organization organization-id > org-policy.yaml
テキスト エディタで
org-policy.yaml
ファイルを開き、compute.storageResourceUseRestrictions
制約を変更します。必要な制限を追加し、また不要になった制限を削除します。ファイルの編集が終了したら、変更を保存します。たとえば、ポリシー ファイルに次の制約エントリを設定できます。constraint: compute.storageResourceUseRestrictions listPolicy: allowedValues: - under:organization/organization-id
組織に
policy.yaml
ファイルを適用します。organization-id の部分は、12 桁の数値の組織 ID で置き換えます。gcloud beta resource-manager org-policies set-policy \ --organization organization-id org-policy.yaml
組織ポリシーで制約の構成が完了したら、それらの制約をテストして、必要な制約が作成されることを確認します。
他のプロジェクトのイメージの使用
別のプロジェクト内にあるイメージへのアクセス権限が付与されている場合、そのプロジェクト内のそれらのイメージにアクセスするには、リクエストで該当するイメージ プロジェクトを指定します。
インスタンスの作成など、新しいリソースの作成にイメージを使用する方法については、インスタンスの作成と起動をご覧ください。
たとえば、次のコマンドは、プロジェクト database-images
からの database-image-a
という名前のイメージを使用して、インスタンスを作成します。
gcloud compute instances create test-instance \ --image database-image-a --image-project database-images
また、別のプロジェクトのイメージに基づいてブート永続ディスクを作成することもできます。イメージからブートディスクを作成する方法については、スタンドアロン ブート永続ディスクの作成をご覧ください。
共有イメージへのアクセス権限を取り消す
ユーザーが Compute Engine リソースにアクセスする必要がなくなったら、Google Cloud Console、gcloud
コマンドライン ツール、または Compute Engine API を使用して、そのユーザーのアクセス権限を取り消すことができます。
Console
Google Cloud Console で、イメージ プロジェクトの [イメージ] ページに移動します。
更新するイメージの横にあるチェックボックスをオンにします。
[情報パネルを表示] をクリックして、権限の列を展開します。
ユーザーを削除するロールを展開します。
[削除] をクリックして、そのロールからユーザーを削除します。
gcloud
イメージに対するロールからユーザーを削除するには、--member
フラグと --role
フラグを指定した 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
API を使用して IAM ポリシーを直接変更するには、次の手順に従います。
リソースのそれぞれの
getIamPolicy
メソッドを使用して、既存のポリシーを読み取ります。POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクト ID。image-name
: イメージの名前。
Compute Engine からレスポンスとして現在のポリシーが返されます。
テキスト エディタでポリシーを編集して、メンバーを関連するロールから削除します。
setIamPolicy()
を使用して、更新したポリシーを書き込みます。POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/global/images/image-name:setIamPolicy
以下を置き換えます。
project-id
: このイメージが属するプロジェクト ID。image-name
: イメージの名前。リクエストの本文で、前のステップで更新した IAM ポリシーを指定します。
次のステップ
- IAM について確認します。
- Compute Engine IAM ロールのリストを確認します。
- イメージについて学習します。
- 共有イメージを使用してインスタンスを作成する方法について学習します。
- スタンドアロンのブート永続ディスクを作成する方法について知る。
- Deployment Manager のデプロイでこの役割を使用する方法について知る。
- プロジェクト全体ではなく、特定の Compute Engine リソースへのアクセスを許可することで、最小権限の原則を適用します。