要控制对 Google Cloud 中资源的访问权限,请使用 Identity and Access Management (IAM)。您可以使用 IAM 设置权限,指定谁对项目中的哪些资源具有哪种访问权限。如需 IAM 的说明,请参阅 IAM 概览。
部署资源时,您还可通过在配置中提前设置 IAM 政策来控制谁可以访问这些资源。例如,如果您计划创建可由特定用户管理的 Pub/Sub 主题,可以通过在配置中指定 IAM 政策将其表达给 Deployment Manager。创建或更新部署时,Deployment Manager 将调用 IAM API 以在资源上设置适当的权限。
准备工作
- 如果要使用本指南中的命令行示例,请安装 “gcloud” 命令行工具。
- 如果希望使用本指南中的 API 示例,请设置 API 访问权限。
在 Deployment Manager 中使用 IAM 政策
IAM 政策是用户及其角色的集合。您可以使用基本角色或预定义角色在项目级层设置 IAM 政策。部分服务(如 Cloud Pub/Sub)也支持在资源层级设置 IAM 政策。
如果某项服务不支持在资源层级设置 IAM 政策,Deployment Manager 将返回 NO_METHOD_TO_UPDATE_ACCESS_CONTROL
错误。
如需了解角色以及可以应用这些角色的资源列表,请参阅了解角色。
授予 Deployment Manager 设置 IAM 政策的权限
Deployment Manager 使用 Google API 服务账号代表您调用其他 Google API 和管理 Google Cloud 资源。您必须为项目的 Google API 服务账号授予基本 roles/owner
角色,以便此账号可以应用您在配置中定义的 IAM 政策。
- 在项目的 Google Cloud 控制台中,转到 IAM 页面。
- 如果出现提示,请从列表中选择您的项目。
查找电子邮件地址采用以下格式的 Google API 服务账号:
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
授予 API 服务账号
roles/owner
角色:控制台
- 在 Google Cloud 控制台中,展开 Google API 服务账号的角色下拉列表,然后选择项目 > 所有者。
- 点击保存以保存所做更改。
gcloud
使用 Google Cloud CLI 向项目的 IAM 政策添加绑定:
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/owner
其中:
[PROJECT_ID]
是项目的 ID。[SERVICE_ACCOUNT_EMAIL]
是服务账号的电子邮件地址。
例如:
gcloud projects add-iam-policy-binding database-images \ --member serviceAccount:123456789012@cloudservices.gserviceaccount.com \ --role roles/owner
API
在 API 中,对以下网址发出
POST
请求,其中[PROJECT_ID]
是项目的 ID:POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
请求主体应该包含您要应用于该项目的绑定列表。
roles/owner
角色应该是绑定的一部分。例如:{ "policy": { "version": "0", "bindings": [ { "role": "roles/owner", "members": [ "user:example@gmail.com", "serviceAccount:123456789012@cloudservices.gserviceaccount.com" ] } ] } }
在配置中设置 IAM 政策
接下来,在配置或模板中,您可以按照以下说明设置 IAM 政策:
将
accessControl
部分添加到您想应用访问权限控制政策的每项资源的顶层配置中。为资源指定所需的
gcpIamPolicy
。每个 IAM 政策都可能包含一系列绑定。每个绑定会将一系列成员绑定到一个角色。如果您使用
accessControl
管理服务账号,请详细了解如何管理服务账号。
例如,以下 accessControl
部分添加了将这些角色授予用户的绑定:
用户 | 角色 |
---|---|
alice@example.com |
roles/pubsub.editor |
|
roles/pubsub.publisher |
resources:
- name: a-new-pubsub-topic
type: pubsub.v1.topic
properties:
...
accessControl:
gcpIamPolicy:
bindings:
- role: roles/pubsub.editor
members:
- "user:alice@example.com"
- role: roles/pubsub.publisher
members:
- "user:jane@example.com"
- "serviceAccount:my-other-app@appspot.gserviceaccount.com"
如需详细了解 IAM 政策,请阅读 IAM 文档。