使用 Deployment Manager 维护自定义角色

背景

通过 Cloud Identity and Access Management 自定义角色,您可以向用户帐号和服务帐号授予精细权限。与由 Google 维护并相应更新的预定义角色不同,在新权限可用后,自定义角色由您的组织维护。

Cloud Deployment Manager 可让您更轻松地配置和维护自定义角色。您可以借助 Deployment Manager 描述使用配置文件的角色,然后将其签入您所选的源代码控制系统中。通过结合使用 Deployment Manager 和源代码控制,您可以更轻松地生成“配置即代码”,以便:

  • 跟踪自定义角色随时间变化的情况
  • 在测试和验证自定义角色后,通过发布阶段提升自定义角色
  • 自动了解角色在整个组织中的部署方式

使用 Deployment Manager 维护自定义角色的情形

请考虑以下情形,这些情形演示了使用 Deployment Manager 维护自定义角色的好处:

  • 控制对新权限的访问:您拥有一个包含 Google Cloud Platform 服务的权限的自定义角色。该服务添加了新的测试版功能并公开了新权限。您的自定义角色不会自动沿用这些新权限 - 必须手动添加它们。 在将新权限添加到自定义角色之前,贵组织中的用户将无法使用测试版功能。 您可以借助 Deployment Manager 的配置文件和源代码控制来审核现有权限,根据需要更新自定义角色并维护修订历史记录。
  • 角色生命周期管理:您有一个新的自定义角色,您已为其分配了 ALPHA 发布阶段。在测试和验证自定义角色之后,您可以使用 Deployment Manager 更新自定义角色的配置,并在不使用 Google Cloud Platform Console 的情况下将其提升到 BETA 阶段。
  • 了解自定义角色的采用:通过在源代码控制中添加贵组织的更多自定义角色定义,您可以更轻松地进行共享、从使用模式中获得有用信息,并对多个项目实施限制。

了解 Deployment Manager 配置文件

Deployment Manager 使用三种不同类型的文件来描述部署。下面描述了每种类型:

  • 配置是描述资源及其属性的 YAML 文件。对于 Cloud IAM 自定义角色,每个 YAML 文件都会指定一个或多个自定义角色的所有属性(例如其名称、说明和权限)。
  • 架构指定给定资源的所有可能属性及其默认值。对于 Cloud IAM 自定义角色,存在项目级层和组织层级自定义角色的架构。
  • 模板是 Jinja 或 Python 文件,可让您将配置分解为可重用部分来增强配置。对于 Cloud IAM 自定义角色,提供了两个模板:一个用于项目级层自定义角色,一个用于组织层级自定义角色。

如需详细了解这些类型,请参阅 Deployment Manager 基础知识

准备工作

如果您不熟悉 Deployment Manager,请先阅读快速入门。然后再按以下步骤操作:

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 启用 Deployment Manager and Cloud IAM API。

    启用 API

  5. 安装并初始化 Cloud SDK

完成这些必备步骤后,您就可以开始使用 Deployment Manager 和 Cloud IAM 来维护自定义角色了。

为 Google API 服务帐号授予权限

要使用 Deployment Manager 维护自定义角色,您必须先向 Google API 服务帐号授予相应的权限。默认情况下,系统会为每个组织和项目创建此帐号。

  1. 在 Google Cloud Platform Console 中打开 IAM 页面。
    打开 IAM 页面
  2. 点击选择项目,选择您的项目,然后点击打开
  3. 从成员列表中找到名为 Google API 服务代理的成员。
  4. 要编辑服务帐号的角色,请点击编辑按钮,然后添加角色 > 角色管理员角色。
  5. 点击保存以应用该角色。

在为 Google API 服务帐号授予维护自定义角色的权限后,您可以使用 Deployment Manager 部署自定义角色示例。

将自定义角色部署到您的项目

上一节所述,Deployment Manager 使用一组配置文件来描述部署。对于 Cloud IAM,请考虑以下两个与项目自定义角色有关的示例文件:

project_custom_role.yaml

    imports:
    - path: project_custom_role.jinja

    resources:
    - name: custom-role
      type: project_custom_role.jinja
      properties:
        roleId: myCustomRole
        title: My Title
        description: My description.
        includedPermissions:
        - iam.roles.get
        - iam.roles.list
    

此 YAML 文件为授予 iam.roles.getiam.roles.list 权限的自定义角色(名为 custom-role)指定了相关属性。请注意,它引用了两次 .jinja 文件;这些引用使用 Jinja 模板提供的值(如下所述)。

project_custom_role.jinja

    # Copyright 2017 Google LLC. All rights reserved.
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #     http://www.apache.org/licenses/LICENSE-2.0
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.

    resources:
    - name: custom-role
      type: gcp-types/iam-v1:projects.roles
      properties:
        parent: projects/{{ env["project"] }}        roleId: {{ properties["roleId"] }}        role:
          title: {{ properties["title"] }}          description: {{ properties["description"] }}          stage: {{ properties["stage"] }}          includedPermissions: {{ properties["includedPermissions"] }}    

此 Jinja 文件为自定义角色提供了一个模板,以最大限度地减少多个角色重复使用相同属性的情况。如果相应的 YAML 文件未指定每个属性的值,则从 .schema 文件插入默认值。

如需使用 Deployment Manager 部署此自定义角色,请执行以下操作:

  1. 将此 GitHub 存储库的内容下载到本地计算机。
  2. 在终端窗口,转到已下载代码库中的 examples/v2/iam_custom_role/jinja 目录。它包含 project_custom_role.yaml 文件和相关的 Jinja 文件。
  3. 执行以下命令以部署自定义角色示例,并将 [YOUR-DEPLOYMENT-NAME] 占位符值替换为您选择的部署名称:

        gcloud deployment-manager deployments create \
           [YOUR-DEPLOYMENT-NAME] --config project_custom_role.yaml
        
  4. 等待操作完成。系统会显示部署指纹和进度指示器:

        The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q==
        Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
        
  5. 如果操作成功,您将看到以下状态消息:

        Create operation operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc completed successfully.
        NAME         TYPE                             STATE      ERRORS  INTENT
        custom-role  gcp-types/iam-v1:projects.roles  COMPLETED  []
        

查看您部署的自定义角色

在 Deployment Manager 中查看您的自定义角色:

  1. 在终端窗口中,执行以下命令:

        gcloud deployment-manager deployments describe [YOUR-DEPLOYMENT-NAME]
        
  2. 您会看到部署说明,包括有关其状态的详尽信息、任何错误等。

        fingerprint: oaJoGesEFYvsAldP2bm5jQ==
        id: '3222872306422524501'
        insertTime: '2018-01-29T13:40:10.822-08:00'
        manifest: manifest-1517262010855
        name: [YOUR-DEPLOYMENT-NAME]
        operation:
        endTime: '2018-01-29T13:40:26.500-08:00'
        name: operation-1517262010573-563f1172be0c9-ce5f0242-239fe1af
        operationType: insert
        progress: 100
        startTime: '2018-01-29T13:40:11.535-08:00'
        status: DONE
        user: id-7201362145@my-example-project.iam.gserviceaccount.com
        NAME         TYPE                             STATE      INTENT
        custom-role  gcp-types/iam-v1:projects.roles  COMPLETED
        
  3. 您还可以通过检索部署的清单来查看有关自定义角色配置的详细信息。在上述步骤 2 的 describe 命令的输出中,记下 manifest ID。复制此 ID(包括 manifest- 前缀),然后用它替换下面的占位符值:

        gcloud deployment-manager manifests describe [YOUR-MANIFEST-ID] \
            --deployment [YOUR-DEPLOYMENT-NAME]
        
  4. 该清单中包含有关自定义角色部署的详尽信息,包括源 project_custom_role.yamlproject_custom_role.jinja 文件的原始内容。具体来说,请记下清单底部附近的 resources 块,其中汇总了有关自定义角色的详细信息:

        ...
        resources:

    • name: custom-role properties: description: My description. includedPermissions:
      • iam.roles.get
      • iam.roles.list roleId: aCustomRole stage: ALPHA title: My Title resources:
      • name: custom-role type: gcp-types/iam-v1:projects.roles type: project_custom_role.jinja ...

要在 Google Cloud Platform Console 中查看您的自定义角色,请执行以下操作:

  1. 在 Google Cloud Platform Console 中打开 IAM 页面。
    打开 IAM 页面
  2. 点击选择项目
  3. 选择项目并点击打开
  4. 在左侧菜单上,点击角色
  5. 从列表中点击新创建的自定义角色的名称。它应该类似于下面的屏幕截图: