本页面适用于 Apigee 和 Apigee Hybrid。
借助 Identity and Access Management (IAM) 条件,您可以为 Google Cloud 资源(包括 API Hub 资源)定义和强制执行有条件的访问权限控制。如需详细了解 IAM Conditions,请参阅 IAM Conditions 概览。
在 API Hub 中,您可以根据以下 IAM 资源条件属性强制执行有条件的访问权限:
- resource.service 条件属性:用于根据正在使用的 Google Cloud 服务配置有条件的访问权限。例如,您可以设置条件,限制用户访问使用
apihub.googleapis.com
的资源。如需查看支持的值列表,请参阅资源服务值。 - resource.type 条件属性:用于根据要访问的资源类型配置有条件的访问权限。例如,您可以设置条件,限制用户访问
apihub.googleapis.com/Api
。如需查看支持的值列表,请参阅资源类型值。 - resource.name 条件属性:用于根据资源名称的全部或部分内容配置有条件的访问权限。如需查看支持的 API 中心名称格式列表,请参阅资源名称格式。
添加 IAM 条件
如需将 IAM 条件添加到现有主账号(用户、群组或服务账号),请执行以下步骤:
- 在 Google Cloud 控制台中,转到 IAM 页面。
- 选择您的项目、文件夹或组织。
- 从主账号列表中,找到要添加 IAM 条件的主账号,然后点击
此时将显示修改访问权限窗格。
(修改主账号)。
- 找到要添加 IAM 条件的角色,然后点击 + 添加 IAM 条件。
- 在添加条件窗格中,提供以下信息:
- 标题:输入要添加到角色的条件的名称。
- 说明:(可选)输入条件的说明。
- 您可以使用条件构建器或条件编辑器来添加条件。
条件构建器提供一个交互式界面,用于选择所需的条件类型、运算符以及有关表达式的其他适用详情。条件编辑器提供一个基于文本的界面,您可以使用 CEL 语法手动输入条件表达式。
如需详细了解如何使用条件构建器或条件编辑器,请参阅配置基于资源的访问权限。
- 点击保存以应用条件。
- 在修改访问权限窗格中再次点击保存,以更新主账号。
将 IAM 条件用于 API Hub 的示例
示例 1:根据资源名称使用 IAM 条件对所有 API 资源进行访问权限控制。
以下条件表达式定义了访问权限控制:
- 访问以前缀开头的 API 资源。这包括对所有 API 资源的访问,包括 API 版本、部署、规范、操作和定义。
- 对其他 API Hub 资源拥有默认的基于角色的无条件访问权限。
( resource.name.startsWith("projects/PROJECT_ID/locations/LOCATION/apis/API_ID_PREFIX") || ( resource.type != "apihub.googleapis.com/Api" && resource.type != "apihub.googleapis.com/Version" && resource.type != "apihub.googleapis.com/Spec" && resource.type != "apihub.googleapis.com/ApiOperation" && resource.type != "apihub.googleapis.com/Definition" ) )
请替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。LOCATION
:API Hub 位置。API_ID_PREFIX
:API 资源名称的前缀。
示例 2:使用基于资源类型的 IAM 条件对多个 API 进行访问权限控制。
以下条件表达式定义了访问权限控制:
- 访问以前缀开头的 API Hub API 资源。
- 访问以指定版本 ID 开头的 API Hub 版本资源。
- 访问以指定规范 ID 开头的 API Hub 规范资源。
- 对其他 API Hub 资源拥有默认的基于角色的无条件访问权限。
( resource.service == "apihub.googleapis.com" && resource.type == "apihub.googleapis.com/Api" && resource.name.startsWith("projects/PROJECT_ID/locations/LOCATION/apis/API1_ID_PREFIX") ) || ( resource.service == "apihub.googleapis.com" && resource.type == "apihub.googleapis.com/Version" && resource.name == "projects/PROJECT_ID/locations/LOCATION/apis/API2_ID/versions/API2_VERSION_ID" ) || ( resource.service == "apihub.googleapis.com" && resource.type == "apihub.googleapis.com/Spec" && resource.name == "projects/PROJECT_ID/locations/LOCATION/apis/API3_ID/versions/API3_VERSION_ID/specs/API3_SPEC_ID" ) || ( resource.type != "apihub.googleapis.com/Api" && resource.type != "apihub.googleapis.com/Version" && resource.type != "apihub.googleapis.com/Spec" && resource.type != "apihub.googleapis.com/ApiOperation" && resource.type != "apihub.googleapis.com/Definition" )
PROJECT_ID
:您的 Google Cloud 项目的 ID。LOCATION
:API Hub 位置。API1_ID_PREFIX
:第一个 API 资源名称的前缀。API2_ID
:第二个 API 资源的 ID。API2_VERSION_ID
:第二个 API 版本资源的 ID。API3_ID
:第三个 API 资源的 ID。API3_VERSION_ID
:第三个 API 版本资源的 ID。API3_SPEC_ID
:第三个 API 规范资源的 ID。