本页面介绍如何创建和管理 Identity and Access Management (IAM) 自定义角色。管理角色的操作包括修改、停用、列出、删除和取消删除角色。
准备工作
Enable the IAM API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.设置身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:
gcloud initC#
如需在本地开发环境中使用本页面上的 .NET 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Google Cloud
C++
如需在本地开发环境中使用本页面上的 C++ 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
如需了解详情,请参阅 Google Cloud 身份验证文档中的为本地开发环境设置 ADC。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Google Cloud
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Google Cloud
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
Create local authentication credentials for your user account:
gcloud auth application-default login
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
Google Cloud
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。
安装 Google Cloud CLI,然后使用联合身份登录 gcloud CLI。
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
了解 Google Cloud 资源层次结构。
阅读了解 IAM 自定义角色。
所需的角色
如需获得创建和管理自定义角色所需的权限,请让管理员向您授予以下 IAM 角色:
-
要管理其角色的项目的 Role Administrator (
roles/iam.roleAdmin)(如需管理项目的角色) -
要管理其角色的组织的 Organization Role Administrator (
roles/iam.organizationRoleAdmin)(如需管理组织的角色)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
查看项目、文件夹和组织的可用权限
您可以为整个组织或该组织中的特定项目创建自定义角色。自定义角色可用的权限取决于您创建该角色的位置。例如,如果有某项权限只能在组织级层使用,那么您便无法在项目级层自定义角色中添加该权限。
如需检查组织级层和项目级自定义角色可以使用哪些权限,您可以使用 gcloud CLI 或 Identity and Access Management API,列出特定组织或项目中可用的权限。例如,您可以获取可用于在项目中创建的自定义角色的所有权限。
某些权限可能对您不可见或不可用于自定义角色,即使这些权限在自定义角色中受支持也是如此。例如,如果您尚未为服务启用 API,则可能无法在自定义角色中使用某项权限。
如需详细了解可以添加到自定义角色的权限,请参阅支持的权限。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
使用
gcloud iam list-testable-permissions命令获取特定项目或组织中自定义角色可用的权限列表。响应会列出您可以在该项目或组织的自定义角色中使用的权限。要列出项目或组织的自定义角色中可用的权限,请运行此命令:
gcloud iam list-testable-permissions FULL_RESOURCE_NAME \ --filter="customRolesSupportLevel!=NOT_SUPPORTED"将
FULL_RESOURCE_NAME替换为以下某个值:-
项目:
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID(例如//cloudresourcemanager.googleapis.com/projects/my-project) -
组织:
//cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID(例如//cloudresourcemanager.googleapis.com/organizations/123456789012)
结果会指明自定义角色是否支持每个权限。 没有
customRolesSupportLevel字段的权限完全受支持。list-testable-permissions命令可能会返回数百个结果。以下部分示例显示了每个结果的格式:--- name: appengine.applications.create stage: GA --- customRolesSupportLevel: TESTING name: appengine.applications.disable stage: GA --- name: appengine.applications.get stage: GA --- name: appengine.applications.update stage: GA --- name: appengine.instances.delete stage: GA --- name: appengine.instances.get stage: GA ---
-
FULL_RESOURCE_NAME:由服务名称和资源路径组成的 URI。如需查看示例,请参阅完整资源名称。PAGE_SIZE:可选。要包含在响应中的权限的数量。默认值为 100,最大值为 1000。如果权限数大于页面大小,则响应中会包含分页令牌,您可以使用该令牌检索下一页结果。NEXT_PAGE_TOKEN:可选。此方法之前的响应中返回的分页令牌。如果已指定,则可测试权限列表将从上一个响应结束的位置开始。
C++
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM C++ API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
C#
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM C# API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
permissions.queryTestablePermissions方法可列出组织或项目可用的权限。在使用任何请求数据之前,请先进行以下替换:
HTTP 方法和网址:
POST https://iam.googleapis.com/v1/permissions:queryTestablePermissions
请求 JSON 正文:
{ "fullResourceName": "FULL_RESOURCE_NAME" "pageSize": PAGE_SIZE, "pageToken": "NEXT_PAGE_TOKEN" }如需发送您的请求,请展开以下选项之一:
响应包含权限列表。
{ "permissions": [ { "name": "iam.serviceAccountKeys.create", "stage": "GA" }, { "name": "iam.serviceAccountKeys.delete", "stage": "GA" }, { "name": "iam.serviceAccountKeys.get", "stage": "GA" } ], "nextPageToken": "CgoHBajEfjUDQyABEPaIv5vIiMDTVhgDIhtpYW0uc2VydmljZUFjY291bnRLZXlzLmxpc3Q" }获取角色元数据
在创建自定义角色之前,您应先获取预定义角色和自定义角色的元数据。角色元数据包括角色 ID 和角色所含的权限。您可以使用Google Cloud 控制台或 IAM API 查看元数据。
要查看角色元数据,请使用以下方法之一:
控制台
在 Google Cloud 控制台中,前往角色页面。
从页面顶部的下拉列表中选择您的组织或项目。
选中一个或多个角色对应的复选框以查看角色权限。 右侧面板会显示相应角色中所含的权限(如有)。
类型列中的图标表明这是自定义角色还是预定义角色

如果您想要查找包含特定权限的所有角色,请在“角色”列表顶部的过滤条件框中输入权限名称。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
-
使用
gcloud iam roles describe命令查看预定义角色和自定义角色的元数据。要查看预定义角色的元数据,请执行以下命令:
gcloud iam roles describe ROLE_ID
ROLE_ID是角色的 ID。预定义角色的 ID 中包含role前缀,例如roles/iam.roleViewer。以下示例演示了针对预定义角色
roles/iam.roleViewer执行describe命令时的输出结果:gcloud iam roles describe roles/iam.roleViewerdescription: Read access to all custom roles in the project. etag: AA== includedPermissions: - iam.roles.get - iam.roles.list - resourcemanager.projects.get - resourcemanager.projects.getIamPolicy name: roles/iam.roleViewer stage: GA title: Role Viewer
要查看自定义角色的元数据,请执行以下命令之一:
-
要查看在组织级层创建的自定义角色的元数据,请执行以下命令:
gcloud iam roles describe --organization=ORGANIZATION_ID ROLE_ID
-
要查看在项目级层创建的自定义角色的元数据,请执行以下命令:
gcloud iam roles describe --project=PROJECT_ID ROLE_ID
每个占位值的说明如下:
-
ORGANIZATION_ID是组织的数字 ID,例如123456789012。 -
PROJECT_ID是项目的名称,例如my-project。 -
ROLE_ID是角色的 ID,不包括projects/、organizations/或roles/等任何前缀。例如myCompanyAdmin。
如需了解详情,请参阅
gcloud iam roles describe的参考文档。 -
ROLE_NAME:完整的角色名称,包括任何organizations/、projects/或roles/前缀。例如organizations/123456789012/roles/myCompanyAdmin。
C++
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM C++ API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
C#
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM C# API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Go
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Go API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Java
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Java API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
Python
如需了解如何安装和使用 IAM 客户端库,请参阅 IAM 客户端库。 如需了解详情,请参阅 IAM Python API 参考文档。
如需向 IAM 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅准备工作。
REST
roles.get方法可获取角色的定义。在使用任何请求数据之前,请先进行以下替换:
HTTP 方法和网址:
GET https://iam.googleapis.com/v1/ROLE_NAME
如需发送您的请求,请展开以下选项之一:
响应中包含角色定义。
{ "name": "projects/my-project/roles/customRole", "title": "My Custom Role", "description": "My custom role description.", "includedPermissions": [ "storage.buckets.get", "storage.buckets.list" ], "etag": "BwWiPg2fmDE=" }创建自定义角色
您可以在项目或组织级层创建自定义角色。
组织级层自定义角色可以包含自定义角色支持的任何 IAM 权限。项目级层自定义角色可以包含任何受支持的权限,但只能在组织或文件夹级层使用的权限除外,例如
resourcemanager.organizations.get。如果您尝试将这类权限添加到项目级层自定义角色,则会收到错误消息:控制台
系统会显示以下警告消息:“不适用于项目级层自定义角色”。系统会从已包含权限列表中自动取消选择该权限,您可以继续创建此角色。
gcloud
系统会返回以下错误消息:
INVALID_ARGUMENT: Permission PERMISSION is not valid。除非您先从角色定义中移除该权限并重试此操作,否则系统将不会创建该自定义角色。REST API
系统会返回以下错误消息:
Permission PERMISSION is not valid,以及 HTTP 400 错误代码和INVALID_ARGUMENT状态。除非您先从角色定义中移除该权限并重试此操作,否则系统将不会创建该自定义角色。每个自定义角色最多可以包含 3000 个权限。此外,自定义角色的名称、描述和权限名称的总大小不得超过 64 KB。如果您需要创建更大的自定义角色,可以将权限拆分给多个自定义角色。请选择可显示自定义角色之间关系的角色名称,例如
Custom Admin (1 of 2)和