使用来自其他项目的映像

本页面介绍如何配置项目,以便 Deployment Manager 可以使用属于另一个项目的操作系统映像创建 Compute Engine 虚拟机实例。

例如,假设您有一个名为 Awesome Project 的项目,Deployment Manager 在其中创建和管理虚拟机实例。现在,假设您需要使用名为 Database Images 的项目的私有映像。 要授予对这些映像的访问权限,Database Images 的所有者必须将 IAM 角色 roles/compute.imageUser 授予 Awesome Project 的 Google API 服务账号,之后 Awesome Project 就可以使用 Database Images 项目中的映像了。

此外,您还可以采用此流程向托管实例组授予对其他项目映像的访问权限。

准备工作

限制

以下是使用此功能的限制:

  • 您必须在项目级别向项目的 Google API 服务账号授予 compute.imageUser 角色。
  • 如果授予 compute.imageUser 角色,即会授予对特定项目中所有映像的权限。无法只限于共享某些特定映像。
  • 您必须将此角色授予特定用户,而非 allAuthenticatedUsersallUsers

授予对映像的访问权限

如果映像所属项目的所有者要将映像的访问权限授予另一个项目,则必须向要使用这些映像的项目的 Google API 服务账号授予访问权限。

  1. 在项目的 Google Cloud 控制台中,前往需要访问另一个项目的私有映像的项目的 IAM 页面。

    转到 IAM 页面

  2. 如果出现提示,请从列表中选择您的项目。务必选择需要访问存储在另一个项目中的映像的项目。
  3. 查找 Google API 服务账号,该账号的电子邮件地址格式如下所示:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 记下上述电子邮件地址。接下来,所需映像所属项目的 Project Owner 可以向 Google API 服务账号授予 roles/compute.imageUser 角色。

    控制台

    1. 在 Google Cloud 控制台中,前往要访问的映像所属项目的 IAM 页面。

      转到 IAM 页面

    2. 从项目列表中选择项目。
    3. 点击添加按钮添加新成员。
    4. 成员框中,输入服务账号的电子邮件地址。
    5. 展开角色下拉列表并选择 Compute Engine > Compute Image User
    6. 点击添加以添加账号。

    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
    ...

添加映像后,完成配置创建,然后进行部署

后续事项