本页面介绍如何配置项目,以便 Deployment Manager 可以使用属于另一个项目的操作系统映像创建 Compute Engine 虚拟机实例。
例如,假设您有一个名为 Awesome Project 的项目,Deployment Manager 在其中创建和管理虚拟机实例。现在,假设您需要使用名为 Database Images 的项目的私有映像。
要授予对这些映像的访问权限,Database Images 的所有者必须将 IAM 角色 roles/compute.imageUser
授予 Awesome Project 的 Google API 服务账号,之后 Awesome Project 就可以使用 Database Images 项目中的映像了。
此外,您还可以采用此流程向托管实例组授予对其他项目映像的访问权限。
准备工作
- 如果要使用本指南中的命令行示例,请安装 “gcloud” 命令行工具。
- 如果希望使用本指南中的 API 示例,请设置 API 访问权限。
- 了解 Deployment Manager 配置。
- 了解 Compute Engine 私有映像。
- 阅读有关身份和访问权限管理 (IAM) 的文档。
- 了解 Deployment Manager IAM 角色,尤其是
roles/compute.imageUser
角色。
限制
以下是使用此功能的限制:
- 您必须在项目级别向项目的 Google API 服务账号授予
compute.imageUser
角色。 - 如果授予
compute.imageUser
角色,即会授予对特定项目中所有映像的权限。无法只限于共享某些特定映像。 - 您必须将此角色授予特定用户,而非
allAuthenticatedUsers
或allUsers
。
授予对映像的访问权限
如果映像所属项目的所有者要将映像的访问权限授予另一个项目,则必须向要使用这些映像的项目的 Google API 服务账号授予访问权限。
- 在项目的 Google Cloud 控制台中,前往需要访问另一个项目的私有映像的项目的 IAM 页面。
- 如果出现提示,请从列表中选择您的项目。务必选择需要访问存储在另一个项目中的映像的项目。
查找 Google API 服务账号,该账号的电子邮件地址格式如下所示:
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
记下上述电子邮件地址。接下来,所需映像所属项目的 Project Owner 可以向 Google API 服务账号授予
roles/compute.imageUser
角色。控制台
- 在 Google Cloud 控制台中,转到项目的 IAM 页面 包含您要访问的映像
- 从项目列表中选择项目。
- 点击添加按钮添加新成员。
- 在成员框中,输入服务账号的电子邮件地址。
- 展开角色下拉列表并选择 Compute Engine > Compute Image User。
- 点击添加以添加账号。
gcloud
使用 Google Cloud CLI 向项目的 IAM 政策添加绑定:
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser
其中:
[PROJECT_ID]
是您要共享的映像所属项目的 ID。[SERVICE_ACCOUNT_EMAIL]
是该服务账号的电子邮件地址。
例如:
gcloud projects add-iam-policy-binding database-images \ --member serviceAccount:123456789012@cloudservices.gserviceaccount.com \ --role roles/compute.imageUser
API
在 API 中,向以下网址发出
POST
请求,其中[PROJECT_ID]
是您要共享的映像所属项目的 ID。POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
请求正文应该包含您要应用于该项目的绑定列表。
roles/compute.imageUser
角色应该是绑定的一部分。例如:{ "policy": { "version": "0", "bindings": [ { "role": "roles/owner", "members": [ "user:example@gmail.com" ] }, { "role": "roles/compute.imageUser", "members": [ "serviceAccount:123456789012@cloudservices.gservbiceaccount.com" ] } ] }
}
在配置中使用其他项目的映像
在向某项目授予对另一个项目的映像的访问权限后,该项目的用户可以通过在模板或配置中指定映像所属项目的 ID 来使用相应映像:
image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]
例如,如果图片项目 ID 为 database-images
,那么您可以在配置中提供以下映像 URI:
resources: - name: a-special-vm type: compute.v1.instances properties: machineType: zones/us-central1-a/machineTypes/f1-micro image: projects/database-images/global/images/example-database-image ...