借助 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。如需了解支持的属性,请参阅支持的属性。
导入授权扩展服务。使用
gcloud service-extensions authz-extensions import命令以及以下示例值。gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=global如果您想将协议设置为
ext_authz,请改用gcloud beta service-extensions authz-extensions import命令。
使用扩展程序配置授权政策。
定义一项授权政策,将扩展程序
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
在
us-west1中配置名为lb-request-authz-service的标注后端服务,并使用名为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_proc协议也受支持,但分出仍会使用ext_authz协议。默认情况下,
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的转发规则。对于该服务,设置具有虚拟机实例组后端的区域级外部应用负载平衡器。
在
FULL_DUPLEX_STREAMED正文处理模式下,使用ext_proc协议配置扩展服务,并支持所有事件。配置授权扩展程序。
在 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 示例。 - 配置路线扩展服务
- 配置流量扩展程序
- 管理扩展程序