本页面介绍如何授予、更改和撤消主账号对单个服务账号的访问权限。如需管理主账号对项目、文件夹或组织中所有服务账号的访问权限,请在项目、文件夹或组织级层管理其访问权限。
在 Identity and Access Management (IAM) 中,访问权限通过允许政策(也称为 IAM 政策)进行管理。允许政策已附加到 Google Cloud 资源。每个允许政策都包含一组角色绑定,这些角色绑定会将一个或多个主账号(例如用户或服务账号)与 IAM 角色相关联。这些角色绑定会向主账号授予指定的角色,包括允许政策所关联的资源以及该资源的所有后代。如需详细了解允许政策,请参阅了解允许政策。
服务账号既是其他主账号可以被授予访问权限的资源,也是可以被授予其他资源访问权限的主账号。本页面将服务账号视为资源,并介绍如何授予其他主账号访问服务账号的权限。如需了解如何向服务账号授予对其他资源的访问权限,请参阅以下指南:
- 如需向服务账号授予对项目、文件夹或组织的访问权限,请参阅管理对项目、文件夹和组织的访问权限。
- 如需向服务账号授予对其他资源的访问权限,请参阅管理对其他资源的访问权限。
本页面介绍如何使用 Google Cloud 控制台、Google Cloud CLI 和 REST API 管理服务账号的访问权限。您还可以使用 IAM 客户端库管理访问权限。
准备工作
Enable the IAM API.
了解服务账号。
所需的角色
如需获得管理服务账号的访问权限所需的权限,请让您的管理员为您授予该服务账号或拥有该服务账号的项目的 Service Account Admin (roles/iam.serviceAccountAdmin
) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色可提供管理服务账号的访问权限所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
如需管理对服务账号的访问权限,您需要具有以下权限:
-
iam.serviceAccounts.get
-
iam.serviceAccounts.list
-
iam.serviceAccounts.getIamPolicy
-
iam.serviceAccounts.setIamPolicy
查看当前访问权限
以下部分介绍如何使用 Google Cloud 控制台、gcloud CLI 和 REST API 查看谁有权访问服务账号。您还可以使用 IAM 客户端库获取服务账号的允许政策,以查看相关的访问权限。
控制台
在 Google Cloud 控制台中,转到服务账号页面。
选择一个项目。
点击服务账号的电子邮件地址。
转到权限标签页。有权访问此服务账号的主账号部分列出了被授予该服务账号角色的所有主账号。
此列表包括其访问权限来自其在父资源上被授予的角色的主账号。如需详细了解政策沿用,请参阅政策沿用和资源层次结构。
可选:如需查看服务代理的角色授权,请选中包括 Google 提供的角色授权复选框。
gcloud
如需查看谁有权访问您的服务账号,请获取服务账号的允许政策。如需了解如何解读允许政策,请参阅了解允许政策。
如需获取服务账号的允许政策,请对服务账号运行 get-iam-policy
命令:
gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH
请提供以下值:
SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。FORMAT
:政策的格式。使用json
或yaml
。PATH
:指向政策的新输出文件的路径。
例如,以下命令会获取服务账号 my-service-account
的政策,并以 JSON 格式将其保存到主目录中:
gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json
REST
如需查看谁有权访问您的服务账号,请获取服务账号的允许政策。如需了解如何解读允许政策,请参阅了解允许政策。
serviceAccounts.getIamPolicy
方法可获取服务账号的允许政策。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。POLICY_VERSION
:要返回的政策版本。请求应指定最新的政策版本,即政策版本 3。如需了解详情,请参阅在获取政策时指定政策版本。
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy
请求 JSON 正文:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
如需发送您的请求,请展开以下选项之一:
响应内容包含服务账号的允许政策。例如:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] } ] }
授予或撤消单个角色
您可以使用 Google Cloud 控制台和 gcloud CLI 快速授予或撤消单个主账号的单个角色,而无需直接修改服务账号的允许政策。常见的主账号类型包括 Google 账号、服务账号、Google 群组和网域。如需查看所有主账号类型的列表,请参阅与身份相关的概念。
政策更改通常会在 2 分钟内生效。但是,在某些情况下,更改可能需要长达 7 分钟的时间才能传播到整个系统。
如果您需要帮助来确定最合适的预定义角色,请参阅选择预定义角色。
授予单个角色
如需向主账号授予单个角色,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到服务账号页面。
选择一个项目。
点击服务账号的电子邮件地址。
转到权限标签页,找到有权访问此服务账号的主账号部分。
选择要向其授予一个角色的主账号:
如需向已具有服务账号上的其他角色的主账号授予角色,请找到包含主账号的行,点击该行中的
修改主账号,然后点击 添加其他角色。如需向服务代理授予角色,请选中包括 Google 提供的角色授权复选框以查看其电子邮件地址。
如需向尚未拥有服务账号的任何角色的主账号授予角色,请点击
Grant access(授予访问权限),然后输入该主账号的标识符,例如my-user@example.com
。
从下拉列表中选择要授予的角色。按照确保安全性的最佳做法,请选择一个仅包含主账号所需权限的角色。
可选:为角色添加条件。
点击保存。将向该主账号授予服务账号上的角色。
gcloud
要快速向主账号授予角色,请运行 add-iam-policy-binding
命令:
gcloud iam service-accounts add-iam-policy-binding SA_ID \ --member=PRINCIPAL --role=ROLE_NAME \ --condition=CONDITION
请提供以下值:
SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。PRINCIPAL
:主账号(或成员)的标识符,通常其格式如下:PRINCIPAL-TYPE:ID
。例如user:my-user@example.com
。如需查看PRINCIPAL
可以采用的值的完整列表,请参阅主要标识符。对于主账号类型
user
,标识符中的域名必须是 Google Workspace 网域或 Cloud Identity 网域。如需了解如何设置 Cloud Identity 网域,请参阅 Cloud Identity 概览。ROLE_NAME
:您要授予的角色的名称。请采用以下某种格式:- 预定义角色:
roles/SERVICE.IDENTIFIER
- 项目级自定义角色:
projects/PROJECT_ID/roles/IDENTIFIER
- 组织级自定义角色:
organizations/ORG_ID/roles/IDENTIFIER
如需了解完整的预定义角色的列表,请参阅了解角色。
- 预定义角色:
CONDITION
:可选。要添加到角色绑定的条件。如需详细了解条件,请参阅条件概览。
例如,如需向服务账号 my-service-account@my-project.iam.gserviceaccount.com
的用户my-user@example.com授予 Service Account User 角色,请运行以下命令:
gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \ --member=user:my-user@example.com --role=roles/iam.serviceAccountUser
撤消单个角色
如需撤消主账号的单个角色,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到服务账号页面。
选择一个项目。
点击服务账号的电子邮件地址。
转到权限标签页,找到有权访问此服务账号的主账号部分。
找到包含要撤消其访问权限的主账号的行。然后,点击该行中的
修改主账号。点击要撤消的角色对应的删除
按钮,然后点击保存。
gcloud
如需快速撤消用户的角色,请运行 remove-iam-policy-binding
命令:
gcloud iam service-accounts remove-iam-policy-binding SA_ID \ --member=PRINCIPAL --role=ROLE_NAME
请提供以下值:
SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。PRINCIPAL
:主账号(或成员)的标识符,通常其格式如下:PRINCIPAL-TYPE:ID
。例如user:my-user@example.com
。如需查看PRINCIPAL
可以采用的值的完整列表,请参阅主要标识符。对于主账号类型
user
,标识符中的域名必须是 Google Workspace 网域或 Cloud Identity 网域。如需了解如何设置 Cloud Identity 网域,请参阅 Cloud Identity 概览。ROLE_NAME
:要撤消的角色的名称。请采用以下某种格式:- 预定义角色:
roles/SERVICE.IDENTIFIER
- 项目级自定义角色:
projects/PROJECT_ID/roles/IDENTIFIER
- 组织级自定义角色:
organizations/ORG_ID/roles/IDENTIFIER
如需了解完整的预定义角色的列表,请参阅了解角色。
- 预定义角色:
例如,如需撤消服务账号 my-service-account@my-project.iam.gserviceaccount.com
的用户my-user@example.com的服务账号 User 角色,请运行以下命令:
gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \ --member=user:my-user@example.com --role=roles/iam.serviceAccountUser
使用 Google Cloud 控制台授予或撤消多个角色
您可以使用 Google Cloud 控制台为单个主账号授予和撤消多个角色:
在 Google Cloud 控制台中,转到服务账号页面。
选择一个项目。
点击服务账号的电子邮件地址。
转到权限标签页,找到有权访问此服务账号的主账号部分。
选择要修改其角色的主账号:
如需修改已拥有服务账号上角色的主账号的角色,请找到包含该主账号的行,然后点击该行中的
修改主账号,然后点击 添加其他角色。如需修改服务代理的角色,请选中包括 Google 提供的角色授权复选框以查看其电子邮件地址。
如需向未拥有服务账号的现有任何角色的主账号授予角色,请点击
授予访问权限,然后输入该主账号的电子邮件地址或其他标识符。
修改主账号的角色:
- 如需向尚未拥有资源的任何角色的主账号授予角色,请点击选择角色,然后从下拉列表中选择要授予的角色。
- 如需向主账号授予其他角色,请点击添加其他角色,然后从下拉列表中选择要授予的角色。
- 如需将某个主账号的某个角色替换为其他角色,请点击现有角色,然后从下拉列表中选择要授予的其他角色。
- 如需撤销主账号的某个角色,请点击要撤消的每个角色对应的删除 按钮。
点击保存。
以编程方式授予或撤消多个角色
如需进行涉及为多个主账号授予和撤销多个角色的大规模访问权限更改,请使用“读取-修改-写入”模式更新服务账号的允许政策:
- 通过调用
getIamPolicy()
读取当前允许政策。 - 使用文本编辑器或以编程方式修改允许政策,以添加或移除任何主账号或角色绑定。
- 通过调用
setIamPolicy()
写入更新后的允许政策。
本部分介绍如何使用 gcloud CLI 和 REST API 来更新允许政策。您还可以使用 IAM 客户端库来更新允许政策。
政策更改通常会在 2 分钟内生效。但是,在某些情况下,更改可能需要长达 7 分钟的时间才能传播到整个系统。
获取当前允许政策
gcloud
如需获取服务账号的允许政策,请对服务账号运行 get-iam-policy
命令:
gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH
请提供以下值:
SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。FORMAT
:允许政策的格式。使用json
或yaml
。PATH
:指向允许政策的新输出文件的路径。
例如,以下命令会获取服务账号 my-service-account
的允许政策,并以 JSON 格式将其保存到主目录中:
gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json
REST
serviceAccounts.getIamPolicy
方法可获取服务账号的允许政策。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。POLICY_VERSION
:要返回的政策版本。请求应指定最新的政策版本,即政策版本 3。如需了解详情,请参阅在获取政策时指定政策版本。
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy
请求 JSON 正文:
{ "options": { "requestedPolicyVersion": POLICY_VERSION } }
如需发送您的请求,请展开以下选项之一:
响应内容包含服务账号的允许政策。例如:
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] } ] }
将响应保存在相应类型(json
或 yaml
)的文件中。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
修改允许政策
通过编程或文本编辑器修改服务账号的允许政策的本地副本,以反映您要针对给定用户授予或撤消的角色。
为了确保您不会覆盖其他更改,请勿修改或移除允许政策的 etag
字段。etag
字段标识允许政策的当前状态。在您设置更新后的允许政策后,IAM 会将请求中的 etag
值与现有的 etag
进行比较,并且仅当值匹配时才会写入允许政策。
如需修改允许政策授予的角色,您需要修改允许政策中的角色绑定。角色绑定采用以下格式:
{ "role": "ROLE_NAME", "members": [ "PRINCIPAL_1", "PRINCIPAL_2", ... "PRINCIPAL_N" ], "conditions:" { CONDITIONS } }
占位符具有以下值:
ROLE_NAME
:您要授予的角色的名称。请采用以下某种格式:- 预定义角色:
roles/SERVICE.IDENTIFIER
- 项目级自定义角色:
projects/PROJECT_ID/roles/IDENTIFIER
- 组织级自定义角色:
organizations/ORG_ID/roles/IDENTIFIER
如需了解完整的预定义角色的列表,请参阅了解角色。
- 预定义角色:
PRINCIPAL_1
、PRINCIPAL_2
、...PRINCIPAL_N
:您要向其授予相应角色的主账号的标识符。主账号标识符通常采用以下格式:
PRINCIPAL-TYPE:ID
。例如user:my-user@example.com
。如需查看PRINCIPAL
可以采用的值的完整列表,请参阅主要标识符。对于主账号类型
user
,标识符中的域名必须是 Google Workspace 网域或 Cloud Identity 网域。如需了解如何设置 Cloud Identity 网域,请参阅 Cloud Identity 概览。CONDITIONS
:可选。指定何时授予访问权限的任何条件。
授予角色
要向主账号授予角色,请修改允许政策中的角色绑定。如需了解您可以授予哪些角色,请参阅了解角色或查看可授予的服务账号角色。如果您需要帮助来确定最合适的预定义角色,请参阅选择预定义角色。
(可选)您可以使用条件,仅在满足特定要求时授予角色。
如需授予允许政策中已包含的角色,请将该主账号添加到现有角色绑定:
gcloud
将主账号添加到现有角色绑定,以修改允许政策。请注意,此更改在您设置更新后的允许政策后才会生效。
例如,假设允许政策包含以下角色绑定,其将 Service Account User 角色 (roles/iam.serviceAccountUser
) 授予给 Kai:
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com"
]
}
如需向 Raha 授予相同的角色,请将 Raha 添加到现有角色绑定:
{ "role": "roles/iam.serviceAccountUser", "members": [ "user:kai@example.com", "user:raha@example.com" ] }
REST
将主账号添加到现有角色绑定,以修改允许政策。请注意,此更改在您设置更新后的允许政策后才会生效。
例如,假设允许政策包含以下角色绑定,其将 Service Account User 角色 (roles/iam.serviceAccountUser
) 授予给 Kai:
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com"
]
}
如需向 Raha 授予相同的角色,请将 Raha 添加到现有角色绑定:
{ "role": "roles/iam.serviceAccountUser", "members": [ "user:kai@example.com", "user:raha@example.com" ] }
如需授予允许政策中未包含的角色,请添加新的角色绑定:
gcloud
通过添加向主账号授予该角色的新角色绑定来修改允许政策。此更改在您设置更新后的允许政策后才会生效。
例如,如需向 Raha 授予 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator
),请将以下角色绑定添加到允许政策的 bindings
数组中:
{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"user:raha@example.com"
]
}
REST
通过添加向主账号授予该角色的新角色绑定来修改允许政策。此更改在您设置更新后的允许政策后才会生效。
例如,如需向 Raha 授予 Service Account Token Creator 角色 (roles/iam.serviceAccountTokenCreator
),请将以下角色绑定添加到允许政策的 bindings
数组中:
{
"role": "roles/iam.serviceAccountTokenCreator",
"members": [
"user:raha@example.com"
]
}
撤消角色
如需撤消角色,请从角色绑定中移除该主账号。如果角色绑定中没有其他主账号,请从允许政策中移除整个角色绑定。
gcloud
通过移除主账号或整个角色绑定来修改允许政策。此更改在您设置更新后的允许政策后才会生效。
例如,假设允许政策包含以下角色绑定,其向 Kai 和 Raha 授予 Service Account User 角色 (roles/iam.serviceAccountUser
):
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com",
"user:raha@example.com"
]
}
如需从 Kai 撤消角色,请从角色绑定中移除 Kai 的主账号标识符:
{
"role": "roles/iam.serviceAccountUser",
"members": [
user:raha@example.com
]
}
如需同时从 Kai 和 Raha 撤消角色,请从允许政策中移除该角色绑定。
REST
通过移除主账号或整个角色绑定来修改允许政策。此更改在您设置更新后的允许政策后才会生效。
例如,假设允许政策包含以下角色绑定,其向 Kai 和 Raha 授予 Service Account User 角色 (roles/iam.serviceAccountUser
):
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:kai@example.com",
"user:raha@example.com"
]
}
如需从 Kai 撤消角色,请从角色绑定中移除 Kai 的主账号标识符:
{
"role": "roles/iam.serviceAccountUser",
"members": [
user:raha@example.com
]
}
如需同时从 Kai 和 Raha 撤消角色,请从允许政策中移除该角色绑定。
设置允许政策
修改允许政策以授予和撤消角色后,请调用 setIamPolicy()
进行更新。
gcloud
如需设置资源的允许政策,请对服务账号运行 set-iam-policy
命令:
gcloud iam service-accounts set-iam-policy SA_ID PATH
请提供以下值:
SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。PATH
:包含新允许政策的文件的路径。
响应包含更新后的允许政策。
例如,以下命令会将存储在 policy.json
中的允许政策设置为服务账号 my-service-account@my-project.iam.gserviceaccount.com
的允许政策:
gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \ ~/policy.json
REST
serviceAccounts.setIamPolicy
方法会为服务账号设置更新后的允许政策。
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:您的 Google Cloud 项目 ID。项目 ID 是字母数字字符串,例如my-project
。SA_ID
:您的服务账号的 ID。此 ID 可以是服务账号的电子邮件地址(格式为SA_NAME@PROJECT_ID.iam.gserviceaccount.com
)或服务账号的唯一数字 ID。-
POLICY
:您要设置的政策的 JSON 格式。如需详细了解政策的格式,请参阅政策参考。例如,要设置上一步中显示的允许政策,请将
policy
替换为以下内容:{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "group:my-group@example.com" ] }, { "role": "roles/serviceAccountAdmin", "members": [ "user:my-user@example.com" ] } ] }
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy
请求 JSON 正文:
{ "policy": POLICY }
如需发送您的请求,请展开以下选项之一:
响应包含更新后的允许政策。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
后续步骤
- 了解要授予哪些角色以允许主账号以服务账号身份进行身份验证。
- 了解如何选择最合适的预定义角色。
- 查看使用服务账号的最佳实践,了解如何安全地使用服务账号。
- 了解如何管理对项目、文件夹和组织的访问权限。
- 了解管理对其他资源的访问权限的一般步骤。
- 了解如何使用条件角色绑定使主账号的访问权限有条件。