借助 Service Extensions,应用负载平衡器可以向后端服务发送标注,以便在处理路径中插入自定义处理。 授权扩展程序会在 请求处理路径中运行,具体时间是负载均衡器收到请求标头后以及 网址映射选择后端 服务后。本页面介绍了如何配置授权扩展程序,以使用 授权政策中定义的自定义授权引擎。
如需大致了解应用负载平衡器扩展程序,请参阅 Cloud Load Balancing 扩展程序概览。
简介
借助 Cloud Load Balancing,您可以配置授权政策,以对进入负载平衡器的流量强制执行访问权限控制。有时,复杂的授权决策无法使用授权政策轻松表达。
您可以使用授权扩展程序配置授权政策,以将授权决策委托给自定义授权引擎。在数据路径中,授权扩展程序会在路由扩展程序之后但在流量扩展程序之前执行。如需详细了解授权政策,请参阅 授权政策概览。
对于每个授权请求,代理会将请求标头转发给扩展程序。根据提供方的响应,代理会转发或拒绝该请求。
在预览版中,对于 区域级外部应用负载平衡器和区域级内部应用负载平衡器 ,您可以分别为请求授权 政策和内容授权政策配置授权扩展程序。基于请求授权政策的扩展程序配置为在基于内容授权政策的扩展程序之前运行。
如需了解与应用负载平衡器扩展程序相关的限制, 请参阅配额和限制页面。
配置基本授权扩展程序
以下示例展示了如何使用授权政策配置授权扩展程序 my-authz-ext,以委托全球外部应用负载平衡器的授权决策。
gcloud
按照 配置标注后端服务中的说明创建所需资源。
在本练习中,创建一个全球外部应用负载平衡器。将服务命名为
authz-service,并将转发规则命名为fr1。配置授权扩展程序。
在 YAML 文件中定义扩展程序,以将其与后端服务
authz-service相关联。使用提供的示例值。cat >authz-extension.yaml <<EOF name: my-authz-ext authority: ext11.com loadBalancingScheme: EXTERNAL_MANAGED service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service forwardHeaders: - Authorization failOpen: false timeout: "0.1s" forwardAttributes: - request.mcp_param - connection.client_cert_leaf EOF将
PROJECT_ID替换为 项目 ID。如需详细了解 YAML 文件中的字段,请参阅 API 文档中的 ExtensionChain 。
借助
forwardAttributes字段,您可以指定要转发给授权服务的请求、连接和位置属性。您最多可以为每个扩展程序配置 16 个属性。如需详细了解支持的属性, 请参阅 支持的属性。导入授权扩展程序。使用
gcloud service-extensions authz-extensions import命令 以及以下示例值。gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=global
使用扩展程序配置授权政策。
定义将扩展程序
my-authz-ext与转发规则fr1相关联的授权政策。使用提供的示例值。CUSTOM操作表示正在使用扩展程序。cat >authz-policy.yaml <<EOF name: my-authz-policy target: loadBalancingScheme: EXTERNAL_MANAGED resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1" action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext" EOF将授权政策导入到项目中。使用
gcloud network-security authz-policies import命令 以及以下示例值。gcloud network-security authz-policies import my-authz-policy \ --source=authz-policy.yaml \ --location=global
根据配置文件配置授权扩展程序
您可以分别为请求和内容授权政策配置授权扩展程序。
对于请求授权政策
以下示例展示了如何配置将请求授权政策应用于 us-west1 中的转发规则的授权扩展程序。该政策要求流量在被允许到达目标 example.com/mcp 之前,先通过来自特定正文的双向 TLS 身份验证。
gcloud
配置标注后端服务 名为
lb-request-authz-service在us-west1中,并使用转发规则 名为fr2。对于该服务,请设置具有虚拟机实例组后端的区域级外部应用负载平衡器。
配置授权扩展程序。
在 YAML 文件中定义扩展程序,以将扩展程序与后端服务
lb-request-authz-service相关联。使用提供的示例值。cat >lb-request-authz-extension.yaml <<EOF name: my-lb-request-authz-ext authority: ext11.com loadBalancingScheme: INTERNAL_MANAGED service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service forwardHeaders: - Authorization failOpen: false timeout: "0.1s" wireFormat: EXT_AUTHZ_GRPC EOF将
PROJECT_ID替换为 项目 ID。扩展程序必须与后端服务位于同一区域。
默认情况下,所有 Service Extensions 标注都使用 Envoy 外部处理或
ext_proc协议。 对于授权标注,预览版中还支持外部授权或ext_authz协议。当wireFormat选项设置为EXT_AUTHZ_GRPC时,标注会使用ext_authz协议。如果未指定该选项,标注会使用ext_proc协议。对于请求授权政策,
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-lb-request-authz-ext \ --source=lb-request-authz-extension.yaml \ --location=us-west1
在同一项目中,使用扩展程序配置授权政策。
对于发送到
example.com/mcp的任何请求,该政策都需要来自特定正文的双向 TLS 身份验证,并进一步将授权决策委托给授权扩展程序my-lb-authz-request-ext。定义将
my-lb-request-authz-ext扩展程序与转发规则fr2相关联的授权政策。使用提供的示例值。cat >lb-request-authz-policy.yaml <<EOF name: my-lb-request-authz-policy target: resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2" 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-lb-request-authz-ext" EOF对于请求授权政策,
policyProfile的值必须为REQUEST_AUTHZ。此值表示自定义政策提供方对请求执行操作以允许或拒绝流量。CUSTOM操作表示扩展程序与代理相关联。如需详细了解授权政策资源,请参阅
authzPolicy参考文档。将授权政策导入到项目中。使用
gcloud beta network-security authz-policies import命令 以及以下示例值。gcloud beta network-security authz-policies import my-lb-request-authz-policy \ --source=lb-request-authz-policy.yaml \ --location=us-west1
对于内容授权政策
以下示例展示了如何配置将内容授权政策应用于 us-west1 中的转发规则的授权扩展程序。该政策要求内容清理服务对应用载荷执行深度检查,以允许或拒绝请求,或根据需要更改请求和响应。
gcloud
在
us-west1中配置名为lb-content-authz-service的标注后端服务 ,并使用名为fr3的转发规则。对于该服务,请设置具有虚拟机实例组后端的区域级外部应用负载平衡器。
使用
ext_proc协议以FULL_DUPLEX_STREAMED正文处理模式 配置扩展程序服务器,并支持所有事件。配置授权扩展程序。
在 YAML 文件中定义扩展程序,以将扩展程序与后端服务
lb-content-authz-service相关联。使用提供的示例值。cat >lb-content-authz-extension.yaml <<EOF name: my-lb-content-authz-ext authority: ext11.com loadBalancingScheme: INTERNAL_MANAGED service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service 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-lb-content-authz-ext \ --source=lb-content-authz-extension.yaml \ --location=us-west1
使用扩展程序配置授权政策。
定义将扩展程序
my-lb-content-authz-ext与转发规则fr3相关联的授权政策。使用提供的示例值。cat >lb-content-authz-policy.yaml <<EOF name: lb-content-authz-policy target: resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3" 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-lb-authz-content-ext" EOFpolicyProfile的值必须为CONTENT_AUTHZ。将授权政策导入到项目中。使用
gcloud beta network-security authz-policies import命令 以及以下示例值。gcloud beta network-security authz-policies import my-lb-content-authz-policy \ --source=lb-content-authz-policy.yaml \ --location=us-west1
授权扩展程序的限制
以下是授权扩展程序的一些限制:
- 一个授权政策只能有一个授权扩展程序。
- 转发规则可以与多个授权政策搭配使用,但其中只能有一个自定义授权政策。
如需了解适用于所有扩展程序的限制,请参阅 扩展程序的限制。
后续步骤
- 在
Service Extensions
GitHub 代码库中查看
ext_authz和ext_proc服务器的 Python 和 Go 示例。 - 配置路由扩展程序
- 配置流量扩展程序
- 管理扩展程序