本页介绍了如何授予、更改和撤消对资源的访问权限。对于您所拥有的资源,您可以使用精确的 IAM 角色,将不同级别的访问权限授予不同的用户。
您可以通过 Cloud Console、
gcloud
命令行工具、REST API 或客户端库管理用户角色。使用 Cloud Console 是最简单的一种方法,本文前半部分将介绍此方法以及如何使用 gcloud
命令行工具进行快速更新。后半部分将介绍如何使用编程方法处理较为复杂的场景。
如果要将 IAM 与 Identity-Aware Proxy (IAP) 配合使用,以确保对应用的访问安全无虞,请参阅 IAP 文档。
准备工作
- 了解可用的 IAM 角色。
所需权限
如需管理对项目的访问权限,您需要包含以下权限的角色:
resourcemanager.projects.get
resourcemanager.projects.getIamPolicy
resourcemanager.projects.setIamPolicy
如需获得这些权限,同时遵循最小权限原则,请让管理员向您授予以下角色之一:
- Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) - Security Admin (
roles/iam.securityAdmin
)
或者,管理员也可以向您授予具有所需权限的其他角色,例如自定义角色或更宽松的预定义角色。
使用 Cloud Console
使用 Cloud Console 是管理成员角色的一种简便方法。IAM 成员包括用户、服务帐号、Google 群组和网域。
查看当前访问权限
如需查看您的成员针对某项目及其资源具有哪些 IAM 角色,请执行以下操作:
在 Cloud Console 中,转到 IAM 页面。
此页面会显示您的项目中针对该项目具有 IAM 角色的所有成员。
可选。如需查看为 Google 管理的服务帐号授予的角色,请选择包括 Google 提供的角色授权。
授予访问权限
如需针对某项目向成员授予 IAM 角色,请执行以下操作:
在 Cloud Console 中,转到 IAM 页面。
点击添加。
输入电子邮件地址。您可以将个人、服务帐号或 Google 网上论坛群组添加为成员,但每个项目必须至少有一名个人成员。
选择角色。角色可赋予成员相应级别的权限。按照确保安全性的最佳做法,我们强烈建议向成员授予其所需的最小权限。拥有“Owner”级别权限的成员同时也是项目所有者,可以管理项目的所有方面,包括关停项目。
点击保存。
如需针对多个项目向成员授予角色,请执行以下操作:
在 Cloud Console 中,转到管理资源页面。
选择要授予权限的所有项目。
点击显示信息面板,然后点击权限标签页。
在新成员字段中输入电子邮件地址,然后从下拉菜单中选择所需角色。
点击保存。系统会在各个选中的项目中将已选定的角色授予相应成员。
撤消访问权限
在 Cloud Console 中,转到 IAM 页面。
找到要撤消其访问权限的成员,然后点击右侧的修改
按钮。点击要撤消的每个角色对应的删除
按钮,然后点击保存。
修改访问权限
修改访问权限没有特殊程序。按照授予和撤消访问权限的步骤操作,直至成员具备所需角色。
使用 gcloud 快速更新
您可以使用 gcloud
命令行工具的 add-iam-policy-binding
和 remove-iam-policy-binding
命令添加或撤消单个角色。
授予访问权限
要快速向成员授予角色,请运行 gcloud
工具的 add-iam-policy-binding
命令:
gcloud group add-iam-policy-binding resource \ --member=member --role=role-id
请提供以下值:
group
:您要更新的资源的gcloud
工具组。例如,您可以使用projects
或organizations
。resource
:资源的名称。member
:成员的标识符,通常其格式如下:member-type:id
。例如user:my-user@example.com
。如需查看member
可以采用的值的完整列表,请参阅政策绑定参考文档。role-id
:角色的名称。
例如,要向项目 my-project
的用户 my-user@example.com
授予“Viewer”角色,请使用以下命令:
gcloud projects add-iam-policy-binding my-project \ --member=user:my-user@example.com --role=roles/viewer
撤消访问权限
要快速撤消用户的角色,请运行 gcloud
工具的 remove-iam-policy-binding
命令:
gcloud group remove-iam-policy-binding resource \ --member=member --role=role-id
请提供以下值:
group
:您要更新的资源的gcloud
工具组。例如,您可以使用projects
或organizations
。resource
:资源的名称。member
:成员的标识符,通常其格式如下:member-type:id
。例如user:my-user@example.com
。如需查看member
可以采用的值的完整列表,请参阅政策绑定参考文档。role-id
:角色的名称。
例如,如需撤消项目 my-project
的用户 my-user@example.com
的 Viewer 角色,请使用以下命令:
gcloud projects remove-iam-policy-binding my-project \ --member=user:my-user@example.com --role=roles/viewer
以编程方式控制访问权限
在某些使用场景中,以编程方式管理访问权限控制更加轻松。您可以使用 gcloud
命令行工具、REST API 或客户端库以编程方式控制访问权限。在以下场景中,编程方法非常有用:在 Cloud Console 中执行大规模更新或自动更新(这很耗时),或对每个成员运行 gcloud
命令。
IAM 政策概览
您可以通过 IAM 政策管理对资源的访问权限。政策是将成员(例如用户帐号或服务帐号)与角色关联起来的多个绑定的统称。政策使用 JSON 或 YAML 表示。
以下示例显示了一个政策,其中 fatima@example.com
已被授予“Owner”角色,wei@example.com
和 service-account-13@appspot.gserviceaccount.com
已被授予“Editor”角色:
{
"bindings": [
{
"role": "roles/owner",
"members": [
"user:fatima@example.com"
]
},
{
"role": "roles/editor",
"members": [
"serviceAccount:service-account-13@appspot.gserviceaccount.com",
"user:wei@example.com"
]
}
],
"etag": "BwUjMhCsNvY=",
"version": 1
}
您可以使用“读取-修改-写入”模式更新资源的政策。也就是说,创建、修改或撤消用户访问权限所采用的方法并无不同。相反,所有修改均通过以下方式进行:
- 通过调用
getIamPolicy()
读取当前政策。 - 使用文本编辑器或以编程方式修改返回的政策,以添加或移除任何目标成员以及为其授予的角色。
- 通过调用
setIamPolicy()
写入更新后的政策。
为整个项目或组织授予权限是很常见的做法。但是,您还可以针对各种 Google Cloud 资源(例如 Compute Engine 实例或 Cloud Storage 存储分区)更精细地设置政策。如需查看角色的完整列表以及可以授予各角色的最低资源级别,请参阅了解角色。
获取当前政策
gcloud
运行资源的 get-iam-policy
命令。以下示例展示了项目的 get-iam-policy
命令:
gcloud projects get-iam-policy project-id --format=format > filepath
请提供以下值:
project-id
:要更新的项目(例如my-project
)。format
:值json
或yaml
。filepath
:指向政策的新输出文件的路径。
例如,以下命令以 JSON 格式获取项目 my-project
的政策,并将其保存到用户的主目录:
gcloud projects get-iam-policy my-project --format json > ~/policy.json
REST
Resource Manager API 的 projects.getIamPolicy
方法可获取项目的 IAM 政策。
在使用下面的请求数据之前,请先进行以下替换:
project-id
:您的 Google Cloud 项目 ID。policy-version
:要返回的政策版本。请求应指定最新的政策版本,即政策版本 3。如需了解详情,请参阅在获取政策时指定政策版本。
HTTP 方法和网址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy
请求 JSON 正文:
{ "options": { "requestedPolicyVersion": policy-version } }
如需发送您的请求,请展开以下选项之一:
您应该会收到类似以下内容的 JSON 响应:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:project-owner@example.com" ] }, { "role": "roles/iam.securityReviewer", "members": [ "user:fatima@example.com" ] } ] }
C#
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 C# 设置说明进行操作。如需了解详情,请参阅 IAM C# API 参考文档。
Java
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 IAM Java API 参考文档。
Python
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 IAM Python API 参考文档。
修改政策
通过编程或文本编辑器修改项目政策的本地副本,以反映您要针对给定用户授予或撤消的角色。
授予角色
要向成员授予角色,请修改政策中的角色绑定。如需了解您可以授予哪些角色,请参阅了解角色。
要授予政策中已包含的角色,请执行以下操作:
gcloud
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来授予角色。请注意,此政策更改在您设置更新后的政策后才会生效。
以下示例会向 wei@example.com
授予 Security Reviewer 角色 (roles/iam.securityReviewer
)。要授予此角色,请将用户附加到 members
数组进行绑定:
{
"role": "roles/iam.securityReviewer",
"members": [
"user:fatima@example.com",
"user:wei@example.com"
]
}
REST
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来授予角色。请注意,此政策更改在您设置更新后的政策后才会生效。
以下示例会向 wei@example.com
授予 Security Reviewer 角色 (roles/iam.securityReviewer
)。要授予此角色,请将用户附加到 members
数组进行绑定:
{
"role": "roles/iam.securityReviewer",
"members": [
"user:fatima@example.com",
"user:wei@example.com"
]
}
C#
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 C# 设置说明进行操作。如需了解详情,请参阅 IAM C# API 参考文档。
Java
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 IAM Java API 参考文档。
Python
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 IAM Python API 参考文档。
要授予政策中未包含的角色,请添加新的 binding
。
gcloud
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来添加新绑定。请注意,此政策更改在您设置更新后的政策后才会生效。
以下示例会向 fatima@example.com
授予 Reader 角色。如需授予此角色,请向政策的 bindings
数组添加新绑定:
{
"role": "roles/reader",
"members": [
"user:fatima@example.com"
]
}
REST
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来添加新绑定。请注意,此政策更改在您设置更新后的政策后才会生效。
以下示例会向 fatima@example.com
授予 Reader 角色。如需授予此角色,请向政策的 bindings
数组添加新绑定:
{
"role": "roles/reader",
"members": [
"user:fatima@example.com"
]
}
C#
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 C# 设置说明进行操作。如需了解详情,请参阅 IAM C# API 参考文档。
Java
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 IAM Java API 参考文档。
Python
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 IAM Python API 参考文档。
您只能授予与已激活的 API 服务相关的角色。如果某项服务(例如 Compute Engine)未处于活动状态,则无法授予与其(例如 Compute Engine)相关的特定角色。如需了解详情,请参阅启用和停用 API。
在项目上授予权限时有一些独特的限制,授予 Owner 角色时尤其如此。如需了解详情,请参阅 projects.setIamPolicy()
参考文档。
撤消角色
如需撤消角色,请执行以下操作:
gcloud
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来撤消角色。此政策更改将在设置更新后的政策后才会生效。
如需撤消成员的角色,请在政策的 bindings
数组中删除所需的成员或绑定。
REST
通过修改由 get-iam-policy
命令返回的 JSON 或 YAML 政策来撤消角色。此政策更改将在设置更新后的政策后才会生效。
如需撤消成员的角色,请在政策的 bindings
数组中删除所需的成员或绑定。
C#
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 C# 设置说明进行操作。如需了解详情,请参阅 IAM C# API 参考文档。
Java
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 IAM Java API 参考文档。
Python
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 IAM Python API 参考文档。
设置政策
修改了政策以授予相应角色后,请调用 setIamPolicy()
进行更新。
gcloud
使用 set-iam-policy
命令,并提供包含更新后政策的 JSON 文件的路径。以下示例展示了项目的 set-iam-policy
命令:
gcloud projects set-iam-policy project-id filepath
请提供以下值:
project-id
:要更新的项目(例如my-project
)。filepath
:包含新政策的文件的路径。
响应中包含更新后的政策。
REST
Resource Manager API 的 projects.setIamPolicy
方法会将请求中的政策设置为项目的新 IAM 政策。
在使用下面的请求数据之前,请先进行以下替换:
project-id
:您的 Google Cloud 项目 ID。policy
:您要设置的政策的 JSON 格式。如需详细了解政策的格式,请参阅政策参考文档。
HTTP 方法和网址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy
请求 JSON 正文:
{ "policy": { policy } }
如需发送您的请求,请展开以下选项之一:
响应中包含更新后的政策。
C#
Java
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 IAM Java API 参考文档。
Python
在试用此示例之前,请按照《IAM 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 IAM Python API 参考文档。
为防止多个源同时尝试更新政策而发生冲突,政策会包含 etag
值。当您调用 setIamPolicy()
时,IAM 会将请求中的 etag
值与现有的 etag
进行比较,并且仅在值一致时才会写入政策。
后续步骤
- 了解如何管理对文件夹的访问权限。
- 了解如何管理对组织的访问权限。
- 了解可用的 IAM 角色。
- 使用 Policy Troubleshooter 了解用户有权或无权访问某项资源的原因,或有权调用某个 API 的原因。
- 了解如何查看您可以针对特定资源授予的角色。
- 了解如何使用条件角色绑定使成员的访问权限有条件。
- 探索使用 Identity-Aware Proxy 保护您的应用的方法。