如需允许用户创建、删除、使用或共享您的自定义映像,您必须向其授予适当的 Identity and Access Management (IAM) 角色。本文档介绍了创建和管理自定义映像所需的 IAM 权限,以及如何将这些映像提供给用户。
如需了解有关授予 Compute Engine 资源访问权限的一般信息,请参阅管理对 Compute Engine 资源的访问权限。 如需了解 IAM,请参阅 IAM 文档。
准备工作
- 如果您要使用本指南中的命令行示例,请执行以下操作:
- 安装或更新到 Google Cloud CLI 的最新版本。
- 设置默认区域和可用区。
- 如果您要使用本指南中的 API 示例,请设置 API 访问权限。
- 阅读 IAM 文档。
- 了解 Compute Engine IAM 角色,尤其是 Compute Image User 角色 (
roles/compute.imageUser
)。
限制
您无法在映像上向特殊成员类型 allUsers
授予角色。
授予创建自定义映像的权限
您可以为用户授予在组织或项目中创建自定义映像的权限。
Compute Engine 提供了预定义的 Compute Storage Admin 角色 (roles/compute.storageAdmin
);您可以将该角色分配给用户,使其能够创建、删除和管理存储相关资源(包括映像、磁盘和快照)。如果您需要一个仅允许创建映像的角色,则必须创建自定义角色。在您的自定义角色中,添加以下权限:
compute.images.create
(用于创建新映像)compute.images.list
(用于列出项目中的映像)compute.disks.use
(如果映像是基于磁盘创建的)compute.disks.list
(如果用户需要列出项目中的所有磁盘)
如果您允许用户在组织级层创建自定义映像,则用户可以为组织内的任何项目创建自定义映像。
控制台
在 Google Cloud Console 中,转到项目或组织的 IAM 页面。
如需添加新成员,请点击
授予访问权限。在新主帐号字段中,输入您要向其授予访问权限的身份的电子邮件地址。
例如:
- Google 帐号电子邮件地址:
test-user@gmail.com
- Google 群组:
admins@googlegroups.com
- 服务帐号:
server@example.gserviceaccount.com
- Google Workspace 网域:
example.com
- Google 帐号电子邮件地址:
在选择角色列表中,选择 Compute Engine > Compute Storage Admin,或者选择一个自定义角色(如果已创建)。
可选:如需进一步控制用户对 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
:您要向其授予相应角色的有效身份。例如:
- 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
例如,如需向
group:admins@example.com
授予roles/compute.storageAdmin
角色,请将以下绑定添加到政策中:{ "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 Storage Admin 角色 (roles/compute.storageAdmin
);您可以将该角色分配给用户,使其能够创建、删除和管理存储相关资源(包括映像、磁盘和快照)。如果您需要一个仅允许删除映像的角色,则必须创建自定义角色。在您的自定义角色中,添加以下权限:
compute.images.delete
(用于删除映像)compute.images.list
(如果用户需要列出项目或组织中的映像)compute.images.get
(用于获取映像)
控制台
如需授予删除特定映像的权限,请执行以下操作:
在 Google Cloud Console 中,转到映像页面。
选择您要授予其权限的映像。
如需展开权限列,请点击显示信息面板。
要添加一个或多个成员,请点击添加主帐号。
在新主帐号字段中,输入您要与之共享映像的身份的电子邮件地址。
例如:
- Google 帐号电子邮件地址:
test-user@gmail.com
- Google 群组:
admins@googlegroups.com
- 服务帐号:
server@example.gserviceaccount.com
- Google Workspace 网域:
example.com
- Google 帐号电子邮件地址:
在角色列表,将指针悬停在 Compute Engine 上方,然后选择 Storage Admin,或者从自定义列表中选择一个自定义角色。
可选:如需进一步控制用户对 Google Cloud 资源的访问权限,请添加条件角色绑定。
保存更改。
如需授予删除项目或组织的映像的权限,请执行以下操作:
转到项目或组织的 IAM 页面。
点击
授予访问权限。在新主帐号字段中,输入您要向其授予访问权限的身份的电子邮件地址。例如:
- Google 帐号电子邮件地址:
test-user@gmail.com
- Google 群组:
admins@googlegroups.com
- 服务帐号:
server@example.gserviceaccount.com
- Google Workspace 网域:
example.com
- Google 帐号电子邮件地址:
在角色列表,将指针悬停在 Compute Engine 上方,然后选择 Storage Admin,或者从自定义列表中选择一个自定义角色。
可选:如需进一步控制用户对 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
:您要向其授予相应角色的有效身份。例如:
- Google 帐号电子邮件地址:
user:user@gmail.com
- Google 群组:
group:admins@googlegroups.com
- 服务帐号:
serviceAccount:server@example.gserviceaccount.com
- Google Workspace 网域:
domain:example.com
- Google 帐号电子邮件地址:
ROLE
:要分配给此身份的角色,例如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
例如,如需向
user:test-email@example.com
授予roles/compute.storageAdmin
角色,请将以下绑定添加到政策中:{ "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 Image User (
roles/compute.imageUser
):拥有在请求中列出、读取和使用映像的权限,但不具备映像的其他权限 - Compute Storage Admin (
roles/compute.storageAdmin
):拥有创建、修改和删除磁盘、映像及快照的权限
或者,您也可以自行创建自定义 IAM 角色。
我们建议的最佳做法是将所有自定义映像保存在一个专用于托管这些映像的项目中。这样可以改善对这些映像的管理,并可让您允许特定团队仅访问其所需的映像。您还可以向团队授予对整个映像项目的访问权限,但由于允许团队访问整个映像项目违反了最小权限原则,因此我们不建议您这样做。
以下示例展示了如何添加群组以使该群组的用户可以访问映像。
控制台
在 Google Cloud Console 中,转到映像页面。
选择要与其他用户共享的映像。
如需展开权限列,请点击显示信息面板。
要添加一个或多个成员,请点击添加主帐号。
在新主帐号字段中,输入您要与之共享映像的身份的电子邮件地址。
例如:
- Google 帐号电子邮件地址:
test-user@gmail.com
- Google 群组:
admins@googlegroups.com
- 服务帐号:
server@example.gserviceaccount.com
- Google Workspace 网域:
example.com
- Google 帐号电子邮件地址:
在角色列表中,将指针悬停在 Compute Engine 上,然后选择 Image User 或 Storage Admin,或者选择一个自定义角色。
可选:如需进一步控制用户对 Google Cloud 资源的访问权限,请添加条件角色绑定。
保存更改。
如需允许用户从 Google Cloud 控制台启动共享自定义映像,请向用户授予映像项目的 Viewer IAM 角色 (roles/viewer
)。授予此角色有助于确保共享映像显示在映像选择列表中。
在 Google Cloud 控制台中,前往 IAM 页面。
点击
授予访问权限。在新主帐号字段中,输入您要与之共享映像的身份的电子邮件地址。例如:
- Google 帐号电子邮件地址:
test-user@gmail.com
- Google 群组:
admins@googlegroups.com
- 服务帐号:
server@example.gserviceaccount.com
- Google Workspace 网域:
example.com
- Google 帐号电子邮件地址:
在角色列表中,将指针悬停在项目上,然后选择 Viewer。
可选:如需进一步控制用户对 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
:您要向其授予相应角色的有效身份。例如:
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
ROLE
:要向其分配此身份的角色,例如roles/compute.imageUser
、roles/compute.storageAdmin
或自定义角色
或者,如需允许用户在其 images.list
请求中查看这些共享映像,请使用 gcloud projects add-iam-policy-binding
命令向用户授予映像项目的 Viewer 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
:此映像所属项目的 ID。IMAGE_NAME
:映像的名称
Compute Engine 会在响应中返回当前政策。
如需添加或移除成员及其关联的角色,请使用文本编辑器修改该政策。请按以下格式添加成员:
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
例如,如需向
test-email@example.com
授予roles/compute.imageUser
,请将以下绑定添加到政策:{ "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
:此映像所属项目的 ID。IMAGE_NAME
:映像的名称
或者,如需允许用户在其 images.list
请求中查看这些共享映像,请使用 projects.setIamPolicy
方法向用户授予映像项目的 Viewer IAM 角色 (roles/viewer
)。如果您不需要用户能够查看共享映像列表,则可以跳过此步骤。
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
在组织之间共享自定义映像
如果您要与贵组织外部的合作伙伴、用户或承包商共享映像,创建自定义映像目录会很有帮助。如需与组织外部的用户共享您的映像,请将他们作为映像用户添加到您的项目中:
控制台
在 Google Cloud Console 中,转到映像页面。
选择要与其他用户共享的映像。
如需展开权限列,请点击显示信息面板。
要添加一个或多个成员,请点击添加主帐号。
在新主帐号字段中,输入您要与之共享映像的群组的电子邮件地址。例如
admins@example.com
。在角色列表中,将指针悬停在 Compute Engine 上,然后选择 Compute Image User。
可选:如需进一步控制用户对 Google Cloud 资源的访问权限,请添加条件角色绑定。
保存更改。
如需允许用户从 Google Cloud 控制台启动共享自定义映像,请向用户授予映像项目的 Viewer 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'
请替换以下内容:
IMAGE_NAME
:映像的名称,例如custom-centos-8
MEMBER
:您要向其授予相应角色的有效身份,例如group:admins@example.com
或者,如需允许用户在其 images.list
请求中查看这些共享映像,请使用 gcloud projects add-iam-policy-binding
命令向用户授予映像项目的 Viewer 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
:此映像所属项目的 ID。IMAGE_NAME
:映像的名称
Compute Engine 会在响应中返回当前政策。
如需添加或移除成员及其关联的角色,您可以使用文本编辑器修改该政策。请按以下格式添加成员:
user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
例如,如需向
test-user@example.com
授予roles/compute.imageUser
,请将以下绑定添加到政策:{ "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
:此映像所属项目的 ID。IMAGE_NAME
:映像的名称
或者,如需允许用户在其
images.list
请求中查看这些共享映像,请使用projects.setIamPolicy
方法向用户授予映像项目的 Viewer IAM 角色 (roles/viewer
)。如果您不需要用户能够查看共享映像列表,则可以跳过此步骤。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
公开共享自定义映像
您可以与所有经过身份验证的 Compute Engine 用户共享您的自定义映像,无论这些用户是否属于您的组织或项目。
您只能与所有经过身份验证的用户共享资源(例如映像),而无法与所有经过身份验证的用户共享项目或组织。这种限制和资源层次结构有助于防止组织无意中与所有经过身份验证的 Compute Engine 用户共享其整个项目。
以下示例展示了如何向所有经过身份验证的 Compute Engine 用户授予自定义映像的 Compute Image User 角色 (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
:此映像所属项目的 ID。IMAGE_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
:此映像所属项目的 ID。IMAGE_NAME
:映像的名称
向代管式实例组授予映像访问权限
通过 Compute Engine,您可以托管或非托管实例组的形式创建虚拟机组。如果创建代管式实例组 (MIG),Compute Engine 将使用 Google API 服务代理来调用 Compute Engine API 并执行与该组相关的操作,例如重新创建运行状况不佳的虚拟机和更新虚拟机。
如果您想使用其他项目中的映像创建 MIG,请向属于创建该 MIG 的项目的 API 服务帐号授予 Compute Image User 角色 (roles/compute.imageUser
)。例如:
- 项目 A 希望使用项目 B 拥有的映像创建 MIG。
- 项目 B 向项目 A 的服务帐号授予 Compute Image User 角色。
- 现在,项目 A 可以使用项目 B 中的映像来创建 MIG。
授予 Compute Image User 角色后,您可以在为托管组创建实例模板时,使用控制台或映像网址访问其他项目中的映像。
输入服务帐号的电子邮件地址
在 Google Cloud 控制台中,转到您要向其服务帐号授予访问权限的项目对应的 IAM 页面。
如果出现提示,请从列表中选择您的项目。
查找电子邮件地址采用以下格式的 Google API 服务代理:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
检索服务帐号的电子邮件地址后,您可以转到以下任一部分:
向 MIG 授予对项目中所有映像的访问权限
现在您已经获得服务帐号的电子邮件地址,接下来可以将该地址添加到其他项目中,并向其授予 Compute Image User 角色 (roles/compute.imageUser
)。
控制台
在 Google Cloud Console 中,转到映像项目的 IAM 页面。
如需添加新成员,请点击
授予访问权限。在新主帐号字段中,添加服务帐号电子邮件地址。
在角色列表中,将指针悬停在计算上,然后选择 Compute Image User。
可选:如需进一步控制用户对 Google Cloud 资源的访问权限,请添加条件角色绑定。
点击保存。
切换回该服务帐号所属的项目。
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
:服务帐号的电子邮件地址
API
使用
projects.getIamPolicy
方法获取映像项目的 IAM 政策: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 授予对项目中特定映像的访问权限
现在您已经获得服务帐号的电子邮件地址,接下来可以将该地址添加到其他项目中,并向其授予特定映像的 Compute Image User 角色 (roles/compute.imageUser
)。
控制台
在 Google Cloud 控制台中,转到映像项目对应的映像页面。
选中您要共享的映像旁边的复选框。
如需展开权限列,请点击显示信息面板。
在权限面板中,点击添加主帐号。
在新主帐号字段中,输入您要与之共享映像的服务帐号电子邮件地址。例如
test123@example.domain.com
。在角色列表中,选择计算,然后选择 Compute Image User。
可选:如需进一步控制用户对 Google Cloud 资源的访问权限,请添加条件角色绑定。
点击保存。
切换回该服务帐号所属的项目。
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
:服务帐号的电子邮件地址
API
使用
images.getIamPolicy
方法获取映像的 IAM 政策: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
:您要共享的映像的名称
控制共享映像和快照的使用
在与其他用户共享您的映像后,您可以控制这些用户在您的组织内部使用这些资源的位置。设置 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。
在配置完组织政策中的限制条件后,请进行测试以确保这些条件会创建您所需要的限制。
使用其他项目中的映像
如果某人向您授予了对其他项目中一个或多个映像的访问权限,您可以通过在请求中指定映像项目来访问该项目中的这些映像。
例如,如需使用另一个项目中的共享映像创建虚拟机,请按照以下步骤操作:
控制台
在 Google Cloud Console 中,转到创建实例页面。
- 为您的虚拟机指定名称。如需了解详情,请参阅资源命名惯例。
- 可选操作:更改此虚拟机的可用区。Compute Engine 会随机列出每个区域内的可用区,以支持跨多个可用区使用。
- 为您的虚拟机选择机器配置。
- 在启动磁盘部分,点击更改以配置您的启动磁盘,然后执行以下操作:
- 选择自定义映像标签。
- 要选择映像项目,请点击选择项目,然后执行以下操作:
- 选择包含该映像的项目。
- 点击打开。
- 在映像列表中,点击要导入的映像。
- 选择启动磁盘的类型和大小。
- 如需确认您的启动磁盘选项,请点击选择。
如需允许 HTTP 或 HTTPS 流量流向虚拟机,请在防火墙部分中选择允许 HTTP 流量或允许 HTTPS 流量。
Google Cloud 控制台会向虚拟机添加网络标记,并创建对应的入站防火墙规则,该规则允许
tcp:80
(HTTP) 或tcp:443
(HTTPS) 上的所有传入流量。网络标记可将防火墙规则与虚拟机相关联。如需了解详情,请参阅 Virtual Private Cloud 文档中的防火墙规则概览。- 如需启动并创建虚拟机,请点击创建。
gcloud
使用 gcloud compute instances create command
创建虚拟机,并使用 --image
和 --image-project
标志指定映像名称和映像所在的项目:
gcloud compute instances create VM_NAME \ --image=IMAGE \ --image-project=IMAGE_PROJECT
请替换以下内容:
VM_NAME
:新虚拟机的名称IMAGE
:映像的名称IMAGE_PROJECT
:映像所属的项目
如果命令成功,gcloud
将返回新虚拟机的属性作为响应:
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 中使用共享映像创建虚拟机的过程与使用公开可用映像创建虚拟机的过程相同。如需通过共享映像创建虚拟机,请使用 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
:要在其中创建虚拟机的项目的 IDZONE
:要在其中创建虚拟机的可用区MACHINE_TYPE_ZONE
:包含新虚拟机将使用的机器类型的可用区MACHINE_TYPE
:新虚拟机的预定义或自定义机器类型VM_NAME
:新虚拟机的名称IMAGE_PROJECT
:包含共享映像的项目的名称IMAGE
或IMAGE_FAMILY
:指定以下其中一项:IMAGE
:共享映像的名称。例如"sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2"
。IMAGE_FAMILY
:如果共享映像是作为自定义映像系列的一部分创建的,请指定该自定义映像系列。此项表示通过自定义映像系列中最新的未弃用的操作系统映像创建虚拟机。例如,如果您指定
"sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family"
,则 Compute Engine 会通过finance-debian-family
映像系列中最新版本的操作系统映像创建虚拟机。
NETWORK_NAME
:您要用于虚拟机的 VPC 网络。您可以指定default
来使用默认网络。ENABLE_SECURE_BOOT
(可选):如果您选择了支持安全强化型虚拟机功能的映像,则 Compute Engine 会默认启用虚拟可信平台模块 (vTPM) 和完整性监控。默认情况下,Compute Engine 不会启用安全启动。
如果为enableSecureBoot
指定true
,则 Compute Engine 会创建一个启用了所有三项安全强化型虚拟机功能的虚拟机。在 Compute Engine 启动您的虚拟机后,如需修改安全强化型虚拟机选项,您必须停止该虚拟机。
您还可以使用其他项目中的映像创建永久性启动磁盘。如需了解如何使用映像创建启动磁盘,请参阅创建独立的永久性启动磁盘。
撤消对共享映像的访问权限
如果某用户不再需要访问您的 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
:您要移除的身份必须采用
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
:您要从中移除身份的角色
如果您要撤消对目前处于 Beta 版阶段的资源的访问权限,请改用 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 角色列表。
- 了解映像。
- 了解如何使用共享映像创建虚拟机。
- 了解如何创建独立的永久性启动磁盘。
- 了解如何在 Deployment Manager 部署中使用此角色。
- 通过授予对特定 Compute Engine 资源而不是整个项目的访问权限来应用最小权限原则。