添加 IAM 条件

本页面适用于 ApigeeApigee 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 条件添加到现有主账号(用户、群组或服务账号),请执行以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    进入 IAM

  2. 选择您的项目、文件夹或组织。
  3. 从主账号列表中,找到要添加 IAM 条件的主账号,然后点击 修改主账号)。

    此时将显示修改访问权限窗格。

  4. 找到要添加 IAM 条件的角色,然后点击 + 添加 IAM 条件
  5. 添加条件窗格中,提供以下信息:
    1. 标题:输入要添加到角色的条件的名称。
    2. 说明:(可选)输入条件的说明。
    3. 您可以使用条件构建器条件编辑器来添加条件。

      条件构建器提供一个交互式界面,用于选择所需的条件类型、运算符以及有关表达式的其他适用详情。条件编辑器提供一个基于文本的界面,您可以使用 CEL 语法手动输入条件表达式。

      如需详细了解如何使用条件构建器条件编辑器,请参阅配置基于资源的访问权限

    4. 点击保存以应用条件。
  6. 修改访问权限窗格中再次点击保存,以更新主账号。

将 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。