借助 Service Extensions,安全 Web 代理扩展程序可以向授权服务发送标注,以便在流量处理路径中插入自定义处理。本页面介绍了如何使用 授权政策配置安全 Web 代理扩展程序。
安全 Web 代理扩展程序配置有请求和内容 授权政策作为 授权扩展程序。 基于请求授权政策的扩展程序配置为在基于内容授权政策的扩展程序之前运行。
如需了解安全 Web 代理扩展程序的工作原理,请参阅 安全 Web 代理扩展程序概览。
如需了解与授权扩展程序相关的限制, 请参阅配额和限制页面。
准备工作
创建、设置和部署安全 Web 代理实例 ,名称为
swp-instance1,位置为您要用于 扩展程序的位置(例如us-west1)。部署代理时,必须使用启用了 传输层安全协议 (TLS) 检查的网关安全政策。
配置以下示例服务:
一个授权服务,用于 为请求授权政策配置扩展程序。 在此示例中,假设 FQDN 为
request-authz.com。一个清理服务,用于为内容授权政策配置扩展程序。在此示例中,假设 FQDN 为
content-sdp.com。
安全 Web 代理扩展程序只能以完全限定域名 (FQDN) 为目标。当您使用 FQDN 作为扩展程序的目标时,数据平面会使用 HTTP2 协议和 TLS 加密与端口 443 上的端点进行通信。不过,数据平面不会验证服务器证书。 出于安全考虑,请确保解析的端点位于 VPC 内。
为请求授权政策配置扩展程序
以下示例展示了如何配置一个授权扩展程序,该扩展程序将请求授权政策应用于 us-west1 中的安全 Web 代理实例。该政策要求流量在被允许到达目标 example.com/mcp 之前,先通过来自特定主账号的双向 TLS 身份验证。
gcloud
配置授权扩展程序。
在 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。如果扩展程序超时或失败,请求处理就会停止。当您优先考虑安全性或完整性而非可用性时,最好使用此默认选项。导入授权扩展程序。使用
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
在同一项目中,使用扩展程序配置授权政策。
对于发送到
example.com/mcp的任何请求,该政策都要求来自特定主账号的双向 TLS 身份验证,并进一步将授权决策委托给授权扩展程序my-swp-authz-request-ext。定义一个授权政策,将
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参考文档。将授权政策导入到项目中。使用
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
配置授权扩展程序。
在 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协议。导入授权扩展程序。使用
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
使用扩展程序配置授权政策。
定义一个授权政策,将扩展程序
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。此值表示自定义政策提供程序处理请求和响应流量,包括正文处理。将授权政策导入到项目中。使用
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 代理扩展程序的限制,请参阅以下部分:
后续步骤
- 在
Service Extensions GitHub 代码库中查看
ext_proc服务器的 Python 和 Go 示例。 - 管理扩展程序