为 Secure Web Proxy 配置扩展程序

借助 Service Extensions,安全 Web 代理扩展程序可以向授权服务发送标注,以便在流量处理路径中插入自定义处理。本页面介绍了如何使用 授权政策配置安全 Web 代理扩展程序。

安全 Web 代理扩展程序配置有请求和内容 授权政策作为 授权扩展程序。 基于请求授权政策的扩展程序配置为在基于内容授权政策的扩展程序之前运行。

如需了解安全 Web 代理扩展程序的工作原理,请参阅 安全 Web 代理扩展程序概览

如需了解与授权扩展程序相关的限制, 请参阅配额和限制页面。

准备工作

  1. 创建、设置和部署安全 Web 代理实例 ,名称为 swp-instance1,位置为您要用于 扩展程序的位置(例如 us-west1)。

    部署代理时,必须使用启用了 传输层安全协议 (TLS) 检查的网关安全政策。

  2. 配置以下示例服务:

    安全 Web 代理扩展程序只能以完全限定域名 (FQDN) 为目标。当您使用 FQDN 作为扩展程序的目标时,数据平面会使用 HTTP2 协议和 TLS 加密与端口 443 上的端点进行通信。不过,数据平面不会验证服务器证书。 出于安全考虑,请确保解析的端点位于 VPC 内。

为请求授权政策配置扩展程序

以下示例展示了如何配置一个授权扩展程序,该扩展程序将请求授权政策应用于 us-west1 中的安全 Web 代理实例。该政策要求流量在被允许到达目标 example.com/mcp 之前,先通过来自特定主账号的双向 TLS 身份验证。

gcloud

  1. 配置授权扩展程序。

    1. 在 YAML 文件中定义扩展程序,将该扩展程序与 request-authz.com 相关联。使用提供的示例值。

      cat >swp-request-authz-extension.yaml <<EOF
      name: my-swp-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: "request-authz.com"
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      安全 Web 代理扩展程序是区域资源,必须与您的安全 Web 代理实例位于同一区域。

      对于请求授权政策,wireFormat 值可以是 EXT_AUTHZ_GRPC,这样标注就会使用 ext_authz 协议,不过也支持 ext_proc 协议。

      默认情况下,failOpen 设置为 false。如果扩展程序超时或失败,请求处理就会停止。当您优先考虑安全性或完整性而非可用性时,最好使用此默认选项。

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

      gcloud beta service-extensions authz-extensions import my-swp-request-authz-ext \
          --source=swp-request-authz-extension.yaml \
          --location=us-west1
      
  2. 在同一项目中,使用扩展程序配置授权政策。

    对于发送到 example.com/mcp 的任何请求,该政策都要求来自特定主账号的双向 TLS 身份验证,并进一步将授权决策委托给授权扩展程序 my-swp-authz-request-ext

    1. 定义一个授权政策,将 my-swp-authz-request-ext 扩展程序与安全 Web 代理代理 swp-instance1 相关联。使用提供的示例值。

      cat >swp-request-authz-policy.yaml <<EOF
      name: my-swp-request-authz-policy
      target:
        resources:
          - "projects/PROJECT_ID/locations/us-west1/gateways/swp-instance1"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-swp-request-authz-ext"
      EOF
      

      PROJECT_ID 替换为 项目 ID

      对于请求授权政策,policyProfile 的值必须为 REQUEST_AUTHZ

      CUSTOM 操作表示扩展程序与代理相关联。

      如需详细了解授权政策资源,请参阅 authzPolicy参考文档

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

      gcloud beta network-security authz-policies import my-swp-request-authz-policy \
          --source=swp-request-authz-policy.yaml \
          --location=us-west1
      

为内容授权政策配置扩展程序

以下示例展示了如何配置一个授权扩展程序,该扩展程序将内容授权政策应用于 us-west1 中的安全 Web 代理实例。该政策要求内容清理服务对应用载荷执行深度检查,以允许或拒绝请求,或者根据需要更改请求和响应。

gcloud

  1. 配置授权扩展程序。

    1. 在 YAML 文件中定义扩展程序,将该扩展程序与 content-sdp.com 相关联。使用提供的示例值。

      cat >swp-authz-content-extension.yaml <<EOF
      name: my-swp-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: "content-sdp.com"
      failOpen: false
      timeout: "0.1s"
      EOF
      

      对于内容授权政策,policyProfile 的值必须为 CONTENT_AUTHZ

      对于 CONTENT_AUTHZ 政策,无需将 wireFormat 值显式设置为 EXT_PROC_GRPC。默认情况下,标注使用 ext_proc 协议。

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

      gcloud beta service-extensions authz-extensions import my-swp-content-authz-ext \
          --source=swp-content-authz-extension.yaml \
          --location=us-west1
      
  2. 使用扩展程序配置授权政策。

    1. 定义一个授权政策,将扩展程序 my-swp-content-authz-ext 与安全 Web 代理代理 swp-instance1 相关联。使用提供的示例值。

      cat >swp-content-authz-policy.yaml <<EOF
      name: my-swp-content-authz-policy
      target:
        resources:
          - "projects/PROJECT_ID/locations/us-west1/gateways/swp-instance1"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-swp-content-authz-ext"
      EOF
      

      对于内容授权政策,policyProfile 的值设置为 CONTENT_AUTHZ。此值表示自定义政策提供程序处理请求和响应流量,包括正文处理。

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

      gcloud beta network-security authz-policies import my-swp-content-authz-policy \
          --source=swp-content-authz-policy.yaml \
          --location=us-west1
      

安全 Web 代理扩展程序的限制

如需了解安全 Web 代理扩展程序的限制,请参阅以下部分:

后续步骤