为 Secure Web Proxy 设置授权政策

本页面介绍了如何为 Secure Web Proxy 配置授权政策。

准备工作

创建授权政策

您可以针对两种不同的应用场景配置授权政策:

  • 管控智能体流量:如需保护从 AI 智能体到 Model Context Protocol (MCP) 服务器、工具和模型的出站流量,请参阅为智能体目标配置授权政策。您可以在 agentGateway 资源上配置政策和扩展程序绑定,以强制执行 MCP 工具限制、mTLS 代理身份和载荷清理。

  • 保护非智能体 Web 流量:如需保护来自非智能体企业工作负载的出站 Web 流量,请参阅后续部分中的示例。您可以直接在 Secure Web Proxy Gateway 资源上配置政策,以强制执行 mTLS 客户端证书身份、服务账号、安全标记或自定义授权扩展。

如需为 Secure Web Proxy 创建授权政策,请执行以下操作:

为智能体目标配置授权政策

将 Secure Web Proxy 部署为 Agent Gateway后,您可以定义授权政策,以检查和限制流向 MCP 工具服务器和 AI 智能体目的地的流量。

您可以配置在以下请求层强制执行访问权限控制的规则:

  • 网络规则:针对特定受信任的外部模型或 Agent Endpoint,跳过 TLS 检查或深度载荷分析。

  • 扩展程序绑定:使用 Service Extensions 中的 ExtensionBinding 资源来附加外部治理和安全处理器,例如用于代理身份验证的 Identity-Aware Proxy (IAP) 以及用于提示和回答清理的 Model Armor。

  • HTTP MCP 方法和工具过滤:对特定 MCP 操作(例如 tools/list 或 tools/call)实施精细控制,并验证参数以限制代理可以调用的工具。

授权规则的评估顺序

通过 Agent Gateway 处理出站 AI 智能体流量时,系统会按以下顺序评估规则:

  1. 网络 (L4) 授权规则:首先评估。如果 SNI 匹配规则适用(例如允许与外部模型端点直接通信),流量会绕过 TLS 拦截。

  2. TLS 拦截:未绕过的流量随后会被拦截,并使用网关的 TLS 检查政策进行解密。

  3. 扩展程序绑定规则:请求由配置的扩展程序服务(例如 IAP)进行评估,以验证请求标头上的调用方身份,并使用 Model Armor 检查解密的载荷,以确保提示安全并防止回答中发生敏感数据泄露。

  4. HTTP (L7) 授权规则:评估 HTTP 级授权政策,例如 MCP 工具限制和方法过滤。

示例 1:限制 MCP 工具执行

以下示例展示了附加到 agentGateway 资源的授权政策,该政策允许智能体发现工具 (tools/list),并仅运行已获批准的工具(get_weather 和 get_location 的 tools/call):

  1. 创建一个名为 authz-policy-mcp.yaml 的文件。

    name: authz-policy-restrict-tools
    target:
      resources:
      - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
        operations:
        - mcp:
            baseProtocolMethodsOption: MATCH_BASE_PROTOCOL_METHODS
            methods:
            - name: "tools/list"
            - name: "tools/call"
              params:
              - exact: "get_weather"
              - exact: "get_location"
    action: ALLOW
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Agent Gateway 和 Secure Web Proxy 实例部署到的区域
    • AGENT_GATEWAY_NAME:与 Secure Web Proxy 网关关联的 agentGateway 资源的名称
  2. 如需导入授权政策,请运行 gcloud network-security authz-policies import 命令。

    gcloud network-security authz-policies import authz-policy-restrict-tools \
        --source=authz-policy-mcp.yaml \
        --location=LOCATION
    

示例 2:使用 SNI 匹配绕过 TLS 拦截

如果某些外部模型提供商或代理 API 使用证书固定或不需要载荷检查,则您可以使用网络规则来匹配服务器名称指示 (SNI),并允许连接,而无需解密会话。

  1. 创建一个名为 authz-policy-sni.yaml 的文件。

    name: authz-policy-skip-interception
    target:
      resources:
      - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"
    policyProfile: REQUEST_AUTHZ
    networkRules:
    - to:
        operations:
        - snis:
          - exact: "api.example-model-provider.com"
    action: ALLOW
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Agent Gateway 和 Secure Web Proxy 实例部署到的区域
    • AGENT_GATEWAY_NAME:与 Secure Web Proxy 网关关联的 agentGateway 资源的名称
  2. 如需导入授权政策,请运行 gcloud network-security authz-policies import 命令。

    gcloud network-security authz-policies import authz-policy-skip-interception \
        --source=authz-policy-sni.yaml \
        --location=LOCATION
    

示例 3:使用扩展程序绑定通过 Model Armor 启用深度载荷检查

为防范提示词注入、有害输出或敏感数据泄露,您可以使用 Service Extensions 中的扩展程序绑定,将流量处理工作分流到 Model Armor 或自定义 ext_proc 处理器。

此模型通过以下方式将扩展程序提供方与使用方分开:

  • Google 服务 (1P):对于 Model Armor 和 IAP 等内置 Google 服务,Google 会管理底层基础设施。您可以使用预定义的端点 URI(modelarmor.googleapis.com 或 iap.googleapis.com)直接绑定服务。
  • 自定义和合作伙伴扩展程序(2P/3P):对于自定义内部处理器或第三方安全供应商,提供方会发布一个指向其 Private Service Connect 服务连接的 ProducerExtension 资源,而使用方会绑定该资源 URI。

如需详细了解如何在 agentGateway 资源上评估授权政策和扩展程序,请参阅使用 Service Extensions 委托授权和 Agent Gateway 上的可扩展政策。

如需为 Model Armor 配置扩展程序绑定,请执行以下操作:

  1. 启用 Service Extensions API。

    gcloud services enable serviceextensions.googleapis.com
    
  2. 创建一个名为 extension-binding-model-armor.yaml 的配置文件,该文件以 agentGateway 资源为目标,设置检查模板,并拦截发往 MCP 服务器的流量。

    name: ext-binding-model-armor
    target:
      resources:
      - "//networkservices.googleapis.com/projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"
    failOpen: false
    producerExtension: modelarmor.googleapis.com
    producerMetadata:
      model_armor_settings: '[
        {
          "request_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID",
          "response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID"
        }
      ]'
    matchConditions:
    - to:
        destination:
          resources:
          - prefix: "urn:mcp"
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Agent Gateway 和 Secure Web Proxy 实例部署到的区域
    • AGENT_GATEWAY_NAME:agentGateway 资源的名称
    • TEMPLATE_PROJECT_ID:创建 Model Armor 模板的项目 ID
    • REQUEST_TEMPLATE_ID:用于检查传入请求的模板的 ID
    • RESPONSE_TEMPLATE_ID:用于检查传出响应的模板的 ID

    注意:

    • 如果扩展程序服务无法访问,failOpen: false 会阻止流量。 如需允许流量在服务中断期间未经检查即通过,请设置 failOpen: true。
    • 如需绑定自定义内部或第三方扩展程序(而非 Model Armor),请将 producerExtension 设置为提供方的资源路径,格式如下:projects/PRODUCER_PROJECT_ID/locations/LOCATION/producerExtensions/PRODUCER_EXTENSION_NAME。
  3. 如需导入扩展程序绑定,请运行 gcloud beta service-extensions extension-bindings import 命令。

    gcloud beta service-extensions extension-bindings import ext-binding-model-armor \
        --source=extension-binding-model-armor.yaml \
        --location=LOCATION
    

如需详细了解如何绑定 IAP 以进行身份验证,请参阅将扩展程序绑定附加到 Agent Gateway。

基于 mTLS 身份的授权政策

Secure Web Proxy 支持根据从双向 TLS (mTLS) 证书派生的身份强制执行安全规则。在零信任环境中,基于这些身份强制执行规则特别有用,因为客户端和代理之间的流量由 mTLS 保护。如需了解详情,请参阅基于主体的授权政策。

以下示例展示了名为 swp1 的 Secure Web Proxy 实例的授权政策。此示例假定流向代理的流量使用 HTTPS 协议。

具有 REQUEST_AUTHZ 配置文件的政策会强制要求,所有流向 example.com/mcp 的流量都必须经过特定主体的 mTLS 身份验证,然后才能通过。该政策还会拒绝所有不以 example.com/mcp 为目的地的出站流量。

  1. 创建授权政策 YAML 文件。

    以下示例会创建一个 authz-policy.yaml 文件。仅当客户端提供的证书与定义的 SPIFFE ID 主体匹配时,该政策才允许流量流向指定的主机和路径。

    $ cat >authz-policy.yaml <<EOF
    name: test-authz-policy-mtls
    target:
      resources:
      - "projects/ PROJECT_ID /locations/ LOCATION /gateways/swp1"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - to:
      operations:
      - hosts:
          - exact: "example.com"
        paths:
          - exact: "/mcp"
      from:
        sources:
        - principals:
          - principalSelector: CLIENT_CERT_URI_SAN
            principal:
              exact: "spiffe:// PROJECT_ID .global.123.workload.id.goog/ns/ns1/sa/hellomcp"
    action: ALLOW
    EOF
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Secure Web Proxy 实例的区域
  2. 使用 gcloud network-security authz-policies import 命令创建授权政策并导入 YAML 文件。

    gcloud beta network-security authz-policies import my-authz-policy-allow
        --source=authz-policy.yaml
        --location= LOCATION 
    

    将 LOCATION 替换为 Secure Web Proxy 实例的区域。

基于服务账号或标记的授权政策

您可以根据附加到各种 Google Cloud 资源的服务账号或标记来应用授权政策。

此示例假定您已完成以下操作:

服务账号

  1. 创建一个授权政策 YAML 文件以允许某些请求。

    以下示例为名为 swp1 的 Secure Web Proxy 实例创建 authz-policy.yaml 文件。该政策已配置为允许来自包含服务账号 my-sa-123@56788. 的 Compute Engine 虚拟机 (VM) 实例的请求到达 example1.com/url1 路径。

    $ cat >authz-policy.yaml <<EOF
    name: my-authz-policy-allow
    target:
        resources:
        - "projects/PROJECT_ID/locations/ LOCATION /gateways/swp1"
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
            - resources:
                - iamServiceAccount:
                    exact: "my-sa-123@56788."
      to:
        operations:
        - hosts:
            - exact: "example1.com"
        paths:
        - prefix: "/url1"
    action: ALLOW
    EOF
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Secure Web Proxy 实例所在的区域
  2. 使用 gcloud network-security authz-policies import 命令创建授权政策并导入 YAML 文件。

    以下示例命令展示了如何导入之前创建的政策文件并创建授权政策:

    gcloud network-security authz-policies import my-authz-policy-allow
    
        --source=authz-policy.yaml
        --location= LOCATION 
    

    将 LOCATION 替换为 Secure Web Proxy 实例的区域。

标记

  1. 创建一个授权政策 YAML 文件以允许某些请求。

    以下示例为名为 swp1 的 Secure Web Proxy 实例创建 authz-policy-tag.yaml 文件。该政策仅允许来自标记值为 TAG_VALUE_PERMANENT_ID 的 Google Cloud资源的请求访问 example1.com/url1 网址路径。

    $ cat >authz-policy-tag.yaml <<EOF
    name: my-authz-policy-tag-allow
    target:
        resources:
        - "projects/PROJECT_ID/locations/ LOCATION /gateways/ GATEWAY_NAME "
    policyProfile: REQUEST_AUTHZ
    httpRules:
    - from:
        sources:
        - resources:
            - tagValueIdSet:
                ids: ["TAG_VALUE_PERMANENT_ID"]
      to:
        operations:
        - hosts:
            - exact: "example1.com"
            paths:
            - exact: "/url1"
    action: ALLOW
    EOF
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:Secure Web Proxy 实例所在的区域
    • GATEWAY_NAME:Secure Web Proxy 网关的名称
    • TAG_VALUE_PERMANENT_ID:标记值的永久 ID,例如 tagValues/123456789012
  2. 使用 gcloud network-security authz-policies import 命令创建授权政策并导入 YAML 文件。

    以下示例命令会导入之前创建的政策文件,并在指定的 Google Cloud 区域中创建授权政策:

    gcloud network-security authz-policies import my-authz-policy-tag-allow
        --source=authz-policy-tag.yaml
        --location= LOCATION 
    

    将 LOCATION 替换为 Secure Web Proxy 实例的区域。

用于委托授权决策的授权政策

对于无法使用标准 ALLOW 或 DENY 规则表达的复杂授权决策,您可以创建包含 CUSTOM 操作的授权政策。然后,您可以将授权决策委托给授权扩展(Service Extensions)。

当您配置具有 CUSTOM 操作的政策时,Secure Web Proxy 会将请求元数据或载荷分流到 Service Extensions。根据 Service Extensions 的响应,代理会允许或拒绝流量。

Secure Web Proxy 支持以下类型的委托:

  • 将请求授权决策委托给 Service Extensions:您可以使用配置了 CUSTOM 操作和 REQUEST_AUTHZ 配置文件的授权政策,根据请求元数据和标头委托决策。在此模式下,访问权限决策会委托给授权扩展。您可以使用此模式来验证身份和权限。

  • 将内容授权决策委托给 Service Extensions:您可以使用具有 CUSTOM 操作和 CONTENT_AUTHZ 配置文件的授权政策,根据请求的实际数据载荷将决策委托给授权扩展程序。此模式可让您启用深度内容检查和安全强制执行,通过与 Model Armor 等服务集成,扫描敏感信息或恶意模式。

限制

为 Secure Web Proxy 实现授权政策时,存在以下限制:

  • 目标和连接限制:Secure Web Proxy 的授权扩展不支持将 IAP 作为直接目标。

  • 政策冲突和兼容性:如果您有包含现有安全规则的网关安全政策,则无需移除这些规则。当您将授权政策应用于实例时,Secure Web Proxy 会忽略这些规则。

  • 协议和检查要求:如需配置 Secure Web Proxy 授权政策,您必须启用 TLS 检查。

后续步骤