使用 Service Extensions 委托授权

本页介绍了如何使用 Service Extensions 将 Agent Gateway 的授权委托给 Identity-Aware Proxy、Model Armor 和其他自定义授权引擎。

授权政策和扩展程序

借助授权政策,您可以对通过 Agent Gateway 发布的端点的流量强制执行集中式访问权限控制和治理政策。为了处理复杂的访问权限控制、内容安全和治理决策,Agent Gateway 可让您通过授权扩展程序配置授权政策,从而将授权和内容安全决策委托给您选择的指定授权引擎。

授权扩展程序会拦截通过 Agent Gateway 部署的请求,并向指定的授权服务发出实时 gRPC 调用。这样一来,服务便可在流量继续传输到目的地之前检查、修改或阻止流量。您可以将授权委托给 Google Cloud Identity-Aware Proxy、Model Armor 和语义治理政策等服务,也可以委托给您选择的任何自定义授权引擎。

授权政策使用政策配置文件来确定发送给授权扩展程序的流量数据类型:

  • 基于请求的授权 (REQUEST_AUTHZ):在处理任何应用载荷之前评估 HTTP 请求标头。此配置文件用于身份验证和访问权限控制,例如将授权委托给 Identity-Aware Proxy。
  • 基于内容的授权 (CONTENT_AUTHZ):评估完整的 HTTP 请求和响应载荷。此配置文件用于深度内容检查和 AI 安全,例如委托给 Model Armor 以确保提示和回答安全,或委托给语义治理政策以强制执行自然语言限制。

自定义授权引擎可以使用 REQUEST_AUTHZ 或 CONTENT_AUTHZ 扩展程序,具体取决于它们是检查标头还是完整的应用载荷。

您可以为基于请求的政策和基于内容的政策分别配置授权扩展程序,也可以在网关上将两者结合起来,以实现全面的安全性。 如需查看推荐配置,请参阅推荐的入站和出站配置。

如需详细了解授权政策、政策配置文件及其使用情形,请参阅授权政策概览。

为了在整个智能体生命周期内实现全面的安全性,我们建议采用以下多网关架构模式:

  • 客户端到代理的网关:客户端到代理(入站)网关仅支持单个 CONTENT_AUTHZ 政策。这意味着,您无法在入站流量上同时使用 Model Armor 和语义治理政策。我们强烈建议使用 Model Armor CONTENT_AUTHZ 政策来防范提示注入攻击。不过,如果您想改用语义治理政策扩展程序,则必须确保网关上未配置 Model Armor。 Ingress 网关不支持其他类型的服务扩展。

  • 智能体到任意位置的网关:智能体到任意位置(出站)网关最多支持 4 项授权政策。出站网关支持 REQUEST_AUTHZ 和 CONTENT_AUTHZ 政策配置文件,您可以在此限制范围内配置每种类型的多个政策。

    我们建议采用以下配置:

    • 一种 REQUEST_AUTHZ 政策,用于委托 Identity-Aware Proxy (IAP) 授权代理身份。
    • 一项或多项 CONTENT_AUTHZ 政策,用于将进一步的决策委托给 Model Armor 或 semantic governance policy,以防范敏感数据暴露,并对传出的工具调用和响应强制执行自然语言限制。

    如需详细了解政策的评估方式,请参阅出站流量政策评估。

这种多网关拓扑可确保 Model Armor 筛查传入的提示,而 IAP、Model Armor 和语义治理政策则筛查传出的回答。

出站流量政策评估

如果出站网关上配置了多个授权政策,系统会根据其政策配置文件类型按顺序评估这些政策:

  1. REQUEST_AUTHZ基于标头的政策:系统会先评估这些政策类型。例如,IAP 扩展程序会检查调用代理的 mTLS 身份并验证其 IAM 允许政策,然后再处理任何内容。如果请求未通过此检查,则会被立即拒绝。
  2. CONTENT_AUTHZ(基于内容的)政策:接下来会评估这些政策类型。如果请求通过了基于标头的检查,系统会将载荷流式传输到基于内容的授权扩展程序(例如语义治理政策引擎),以进行深入的内容检查和合规性评估。

准备工作

在开始之前,请确保满足以下要求:

  • Agent Gateway 已部署。请参阅配置 Agent Gateway。

  • 您必须拥有已部署的 Agent Gateway 资源的 networkservices.agentGateways.use IAM 权限,才能将授权政策附加到网关。

使用扩展程序配置授权政策

本部分介绍了如何配置授权政策,以将授权和内容安全决策委托给 Identity-Aware Proxy、Model Armor 和其他自定义服务。

将授权委托给 IAP

您可以配置请求授权扩展程序,以将授权政策的访问权限决策委托给 IAP。

以下步骤展示了如何为 Agent Gateway 实例配置具有授权政策的授权扩展。

  1. 准备工作:关闭禁止将绑定访问权限的政策绑定到资源 (constraints/iam.managed.disableAccessPolicyBindings) 受管理的组织政策限制条件的强制执行。默认情况下,此布尔值限制条件会针对新组织启用,并会阻止您将 IAM 统一访问政策绑定到资源。如需了解详情,请参阅使用布尔值规则更新政策。

  2. 为代理和工具创建所需的 IAM 出站流量政策。如需了解详情,请参阅创建 IAM 代理政策。

  3. 如需在创建智能体网关时启用 IAP(通过使用访问权限授权参数),请参阅以“智能体到任意位置(出站)”模式配置智能体网关。

  4. 配置授权扩展程序以指向 IAP。

    1. 在 YAML 文件中定义扩展程序。使用提供的示例值。如果您想以试运行仅审核模式部署扩展程序,以测试授权政策而不强制执行该政策,可以在 metadata 块内指定 iamEnforcementMode 字段。

      cat >iap-request-authz-extension.yaml <<EOF
      name: my-iap-request-authz-ext
      service: iap.googleapis.com
      failOpen: false
      timeout: 1s
      metadata:
        iapPolicyVersion: "V2"
      EOF
      

      如果您想以试运行仅审核模式部署扩展程序,以便在不强制执行授权政策的情况下测试该政策,可以在 metadata 块内指定 iamEnforcementMode 字段。这样一来,您就可以验证政策,并最大限度地降低因配置错误而导致流量中断的风险:

      cat >iap-request-authz-extension.yaml <<EOF
      name: my-iap-request-authz-ext
      service: iap.googleapis.com
      failOpen: false
      timeout: 1s
      metadata:
        iapPolicyVersion: "V2"
        iamEnforcementMode: "DRY_RUN"
      EOF
      

      准备好开始强制执行政策后,请从 metadata 块中移除 iamEnforcementMode: "DRY_RUN" 字段。

    2. 导入授权扩展程序。将 gcloud service-extensions authz-extensions import 命令与以下示例值搭配使用。

      gcloud service-extensions authz-extensions import my-iap-request-authz-ext \
          --source=iap-request-authz-extension.yaml \
          --location=LOCATION
      
  5. 在同一项目中,配置一项授权政策,将决策委托给扩展程序。

    1. 定义将 my-iap-request-authz-ext 扩展程序与网关相关联的授权政策。使用提供的示例值。

      cat >iap-request-authz-policy.yaml <<EOF
      name: my-iap-request-authz-policy
      target:
        resources:
          - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"
      policyProfile: REQUEST_AUTHZ
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-iap-request-authz-ext"
      EOF
      

      请将 PROJECT_ID 替换为您的项目 ID。

    2. 将授权政策导入项目。将 gcloud network-security authz-policies import 命令与以下示例值搭配使用。

      gcloud network-security authz-policies import my-iap-request-authz-policy \
          --source=iap-request-authz-policy.yaml \
          --location=LOCATION
      

向 Model Armor 委托授权

您可以配置授权扩展程序,以将授权政策的内容安全决策委托给 Model Armor。

以下示例展示了如何使用 Agent Gateway 的授权政策配置此类授权扩展。

控制台

如需使用 Google Cloud 控制台为 Agent Gateway 启用 Model Armor,请执行以下步骤:

  1. 创建所需的 Model Armor 模板。

  2. 如需在创建 Agent Gateway 时启用 Model Armor,请参阅配置 Agent Gateway(通过使用启用 Model Armor 复选框)。Model Armor 模板在“客户端到代理”模式和“代理到任意位置”模式下均受支持。

  3. 使用 Model Armor 时,您必须向 Agent Gateway 服务账号授予使用 Model Armor 模板所需的权限。服务账号的格式为:service-PROJECT_NUMBER@gcp-sa-dep.,其中 PROJECT_NUMBER 是您创建网关的项目的项目编号。

    即使网关和模板位于同一项目中,您也必须完成此步骤。授予以下角色:

    • 网关所属项目中的 roles/modelarmor.calloutUser 和 roles/serviceusage.serviceUsageConsumer 角色。
    • 包含 Model Armor 模板的项目的 roles/modelarmor.user 角色。

    您需要使用 gcloud CLI 完成此步骤。

    gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/modelarmor.calloutUser
    gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/serviceusage.serviceUsageConsumer
    gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/modelarmor.user
    

    替换以下内容:

    • GATEWAY_PROJECT_ID:您在其中创建了网关的项目的 ID。
    • GATEWAY_PROJECT_NUMBER:您创建网关的项目的项目编号。
    • MODEL_ARMOR_PROJECT_ID:包含 Model Armor 模板的项目的项目 ID。

    如果您将 Agent Gateway 用于 Agent Runtime,则 Agent Runtime 服务代理也需要这些权限,如通过 Agent Gateway 路由 Agent Runtime 流量中所述。

gcloud

  1. 创建所需的 Model Armor 模板。

  2. 使用 Model Armor 时,您必须向 Agent Gateway 服务账号授予使用 Model Armor 模板所需的权限。服务账号的格式为:service-PROJECT_NUMBER@gcp-sa-dep.,其中 PROJECT_NUMBER 是您创建网关的项目的项目编号。

    即使网关和模板位于同一项目中,您也必须完成此步骤。授予以下角色:

    • 网关所属项目中的 roles/modelarmor.calloutUser 和 roles/serviceusage.serviceUsageConsumer 角色。
    • 包含 Model Armor 模板的项目的 roles/modelarmor.user 角色。
    gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/modelarmor.calloutUser
    gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/serviceusage.serviceUsageConsumer
    gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \
        --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
        --role=roles/modelarmor.user
    

    替换以下内容:

    • GATEWAY_PROJECT_ID:您在其中创建了网关的项目的 ID。
    • GATEWAY_PROJECT_NUMBER:您创建网关的项目的项目编号。
    • MODEL_ARMOR_PROJECT_ID:包含 Model Armor 模板的项目的项目 ID。
  3. 配置授权扩展程序以指向 Model Armor。

    1. 在 YAML 文件中定义扩展程序。使用提供的示例值。

      cat >ma-content-authz-extension.yaml <<EOF
      name: my-ma-content-authz-ext
      service: modelarmor.LOCATION.rep.googleapis.com
      metadata:
        model_armor_settings: '[
          {
          "response_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
          "request_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID"
          }
        ]'
      failOpen: false
      timeout: 1s
      EOF
      
    2. 导入授权扩展程序。使用以下示例值运行 gcloud service-extensions authz-extensions import 命令。

      gcloud service-extensions authz-extensions import my-ma-content-authz-ext \
         --source=ma-content-authz-extension.yaml \
         --location=LOCATION
      
  4. 使用扩展程序配置授权政策。

    1. 定义将扩展程序 my-ma-content-authz-ext 与 Agent Gateway 相关联的授权政策。

      代理到任意目的地

      cat >ma-content-authz-policy.yaml <<EOF
      name: my-ma-content-authz-policy
      target:
        resources:
          - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"
      policyProfile: CONTENT_AUTHZ
      action: CUSTOM
      customProvider: