跨项目共享类型

本页面介绍如何与其他项目共享属于您的项目的类型和类型提供程序。例如,假设您有一个项目,用于维护公司预先批准的类型提供程序。您希望能够将该项目中的这些类型提供程序提供给其他项目,并将该项目用作类型的中央代码库。 同样,您也可以使用此方法跨项目共享复合类型。

要设置访问权限,该类型所属项目的 Project Owner 需要将 deploymentmanager.typeViewer(测试阶段)角色授予要使用该类型的项目的服务账号。此外,他们还需要将角色授予想要查看和列出其他项目类型的用户。

准备工作

限制

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

  • 如果授予 deploymentmanager.typeViewer 角色,即会授予对特定项目中所有类型的权限。无法将共享限制于单独的类型。
  • 无法将此角色授予 allAuthenticatedUsersallUsers

授予项目访问权限以使用类型

要授予对属于其他项目的类型的访问权限,相应类型所属项目的 Project Owner 必须将 deploymentmanager.typeViewer 角色授予要使用这些类型的项目的 Google API 服务账号

  1. 在将使用这些类型的项目的 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM 页面

  2. 如果出现提示,请从列表中选择您的项目。
  3. 查找电子邮件地址采用以下格式的 Google API 服务账号

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

    控制台

    1. 在 Google Cloud 控制台中,转到包含您要共享的类型的项目的 IAM 页面。

      转到 IAM 页面

    2. 从项目列表中选择项目。
    3. 点击添加按钮添加新成员。
    4. 成员框中,输入服务账号的电子邮件地址。
    5. 展开角色下拉列表,然后选择其他 > Deployment Manager Types Viewer(测试版)
    6. 点击添加以添加账号。

    gcloud

    使用 Google Cloud CLI 向项目的 IAM 政策添加绑定:

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/deploymentmanager.typeViewer

    其中:

    • [PROJECT_ID] 是您要共享的映像所属项目的 ID。
    • [SERVICE_ACCOUNT_EMAIL] 是您要共享类型的项目中的服务账号的电子邮件。

    例如:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/deploymentmanager.typeViewer

    API

    在 API 中,向以下网址发出 POST 请求,其中 [PROJECT_ID] 是您要共享的类型所属项目的 ID。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    请求主体应该包含您要应用于该项目的绑定列表。roles/deploymentmanager.typeViewer 角色应该是绑定的一部分。例如:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/deploymentmanager.typeViewer",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gserviceaccount.com"
               ]
           }
           ]
       }
    

    }

在配置中使用其他项目的类型

获得类型的访问权限后,就可以使用语法在配置中指定类型。对于复合类型

type: [PROJECT_ID]/composite:[TYPE]

对于类型提供程序

type: [PROJECT_ID]/[TYPE]:[COLLECTION]

其中:

  • [PROJECT_ID] 是该类型所属项目的 ID。
  • [TYPE] 是类型提供程序或复合类型的名称。
  • [COLLECTION] 是您正在创建的具体资源。它仅适用于基本类型。如需详细了解如何指定基本类型,请阅读调用配置中的类型提供程序

例如,如果项目 ID 为 my-type-repository,那么您可以为类型指定如下信息:

resources:
- name: a-special-vm
  type: my-type-repository/composite:autoscaled-igm
  properties:
    ...

授予用户列出和查看类型的权限

为项目的服务账号授予 deploymentmanager.typeViewer 角色后,该项目可在您的配置中部署这些类型,但不允许用户查看或列出这些类型。如果要为个别用户授予查看类型的权限,则必须向每个用户授予 deploymentmanager.typeViewer 角色。

例如,为了让 Jane 能够为不属于她的项目运行 gcloud beta deployment-manager types list --project another-project 命令,another-project 的所有者必须为 Jane 授予 deploymentmanager.typeViewer 角色。

使用 gcloud CLI,您可以像这样为 Jane 授予该角色:

 gcloud projects add-iam-policy-binding another-project \
        --member user:jane@gmail.com --role deploymentmanager.typeViewer

有关添加和删除用户角色的完整说明,请阅读授予、更改和撤消项目成员的访问权限文档。

后续事项