背景
通过 Identity and Access Management 自定义角色,您可以为用户账号和服务账号授予精细权限。与由 Google 维护并相应更新的预定义角色不同,自定义角色是在新权限推出后由您的组织维护。
Cloud Deployment Manager 可让您更轻松地配置和维护自定义角色。您可以借助 Deployment Manager 使用配置文件描述角色,然后将其签入您所选的源代码控制系统中。通过结合使用 Deployment Manager 和源代码控制,您可以更轻松地生成“配置即代码”,以便:
- 跟踪自定义角色随时间变化的情况
- 测试和验证自定义角色后,在整个发布阶段推广自定义角色
- 自动了解角色在整个组织中的部署方式
准备工作
-
Enable the IAM and Cloud Deployment Manager APIs.
使用 Deployment Manager 维护自定义角色的情形
请考虑以下情形,这些情形演示了使用 Deployment Manager 维护自定义角色的好处:
- 控制对新权限的访问:您拥有一个自定义角色,它包含某项 Google Cloud 服务的权限。该服务添加了新的 Beta 版功能并公开了新权限。您的自定义角色不会自动沿用这些新权限 - 必须手动添加它们。在将新权限添加到自定义角色之前,贵组织中的用户将无法使用测试版功能。您可以借助 Deployment Manager 的配置文件和源代码控制来审核现有权限,根据需要更新自定义角色并维护修订历史记录。
- 角色生命周期管理:您有一个新的自定义角色,您已为其分配了
ALPHA
发布阶段。在测试和验证自定义角色之后,您可以使用 Deployment Manager 更新自定义角色的配置,并在不使用 Google Cloud 控制台的情况下将其推进到BETA
阶段。 - 了解自定义角色的采用:通过在源代码控制中添加贵组织的更多自定义角色定义,您可以更轻松地进行共享,从使用模式中获得有用信息,并对多个项目实施访问权限控制。
了解 Deployment Manager 配置文件
Deployment Manager 使用三种不同类型的文件来描述部署。下面描述了每种类型:
- 配置是描述资源及其属性的 YAML 文件。对于 Identity and Access Management (IAM) 自定义角色,每个 YAML 文件都会指定一个或多个自定义角色的所有属性(例如其名称、说明和权限)。
- 架构指定给定资源的所有可能属性及其默认值。对于 IAM 自定义角色,存在项目级和组织级自定义角色的架构。
- 模板是 Jinja 或 Python 文件,通过使您能够将配置分解为多个可重复使用的部分来增强配置。适用于 IAM 自定义角色的模板有两个:一个用于项目级自定义角色,一个用于组织级自定义角色。
要详细了解这些类型,请参阅 Deployment Manager 基础知识。
准备工作
如果您不熟悉 Deployment Manager,请先完成快速入门,然后再按以下步骤操作:- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Deployment Manager and IAM APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Deployment Manager and IAM APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
完成这些必备步骤后,您就可以开始使用 Deployment Manager 和 IAM 来维护自定义角色了。
为 Google API 服务账号授予权限
要使用 Deployment Manager 维护自定义角色,您必须先向 Google API 服务账号授予适当的权限。默认情况下,系统会为每个组织和项目创建此账号。
在 Google Cloud 控制台中,前往 IAM 页面。
从主账号列表中找到名为 Google API 服务代理的主账号。
如需修改服务账号的角色,请点击修改
按钮,然后添加角色 > Role Administrator 角色。点击保存以应用该角色。
在为 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.get
和 iam.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 部署此自定义角色,请执行以下操作:
- 将此 GitHub 代码库的内容下载到本地机器。
- 在终端窗口中,转到下载的代码库中的
examples/v2/iam_custom_role/jinja
目录。它包含 project_custom_role.yaml 文件和相关的 Jinja 文件。 执行以下命令以部署示例自定义角色,并将 your-deployment-name 占位符值替换为您选择的部署名称:
gcloud deployment-manager deployments create \ your-deployment-name --config project_custom_role.yaml
等待操作完成。系统会显示部署指纹和进度指示器:
The fingerprint of the deployment is PUo2fmKdoFdJqiLViHjT3Q== Waiting for create [operation-1513228867042-560460d157ad1-b4ababb8-c6a7dddc]...done.
如果操作成功,您将看到以下状态消息:
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 中查看您的自定义角色:
在终端窗口中,执行以下命令:
gcloud deployment-manager deployments describe your-deployment-name
您会看到部署说明,包括有关其状态的详尽信息、任何错误等。
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
您还可以通过检索部署的manifest来查看有关自定义角色配置的详细信息。在上述步骤 2 的
describe
命令的输出中,记下manifest
ID。复制此 ID(包括manifest-
前缀),然后用它替换下面的占位值:gcloud deployment-manager manifests describe your-manifest-id \ --deployment your-deployment-name
该清单中包含有关自定义角色部署的详尽信息,包括源 project_custom_role.yaml 和 project_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 控制台中查看您的自定义角色,请执行以下操作:
在 Google Cloud 控制台中,前往 IAM 页面。
选择项目并点击打开。
在左侧菜单上,点击角色。
从列表中点击新创建的自定义角色的名称。它应该类似于下面的屏幕截图: