使用 Deployment Manager 维护自定义角色

背景

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

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

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

准备工作

  • 启用 IAM and Cloud Deployment Manager API。

    启用 API

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

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

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

了解 Deployment Manager 配置文件

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

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

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

准备工作

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

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Deployment Manager and IAM API。

    启用 API

  5. 安装 Google Cloud CLI。
  6. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  7. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  8. 确保您的 Google Cloud 项目已启用结算功能

  9. 启用 Deployment Manager and IAM API。

    启用 API

  10. 安装 Google Cloud CLI。
  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init

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

为 Google API 服务账号授予权限

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

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM 页面

  2. 从主账号列表中找到名为 Google API 服务代理的主账号。

  3. 如需修改服务账号的角色,请点击修改 按钮,然后添加角色 > Role Administrator 角色。

  4. 点击保存以应用该角色。

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

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

如上一节中所述,Deployment Manager 使用一组配置文件来描述部署。对于 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 文件为名为 custom-role 的自定义角色指定了相关属性,以便向 iam.roles.getiam.roles.list 授予权限。请注意,它引用了两次 .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 控制台中查看您的自定义角色,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 IAM 页面。

    转到 IAM 页面

  2. 选择项目并点击打开

  3. 在左侧菜单上,点击角色

  4. 从列表中点击新创建的自定义角色的名称。它应该类似于下面的屏幕截图: