有了 Service Extensions,應用程式負載平衡器就能向後端服務發出呼叫,在處理路徑中插入自訂處理程序。當負載平衡器收到要求標頭,且網址對應選擇後端服務後,授權擴充功能就會在要求處理路徑中執行。本頁說明如何設定授權擴充功能,以使用授權政策中定義的自訂授權引擎。
如要瞭解應用程式負載平衡器擴充功能,請參閱「Cloud Load Balancing 擴充功能總覽」。
簡介
透過 Cloud Load Balancing,您可以設定授權政策,對進入負載平衡器的流量強制執行存取控管。有時,複雜的授權決策無法輕易以授權政策表示。
您可以透過授權擴充功能設定授權政策,將授權決策委派給自訂授權引擎。在資料路徑中,授權擴充功能會在路徑擴充功能之後執行,但會在流量擴充功能之前執行。如要進一步瞭解授權政策,請參閱「授權政策總覽」。
對於每項授權要求,Proxy 會將要求標頭轉送至擴充功能。視供應商的回應而定,Proxy 會轉送或拒絕要求。
在預覽中,您可以為區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,分別設定要求授權政策和內容授權政策的授權擴充功能。根據要求授權政策的擴充功能,會設定為在根據內容授權政策的擴充功能之前執行。
如要瞭解應用程式負載平衡器擴充功能相關限制,請參閱「配額與限制」頁面。
設定基本授權擴充功能
以下範例說明如何使用授權政策設定授權擴充功能 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 中的轉送規則。這項政策要求流量必須通過特定主體的相互傳輸層安全標準 (mTLS) 驗證,才能抵達目的地 example.com/mcp。
gcloud
設定名為
lb-request-authz-service的呼叫後端服務,並在us-west1中設定名為fr2的轉送規則。針對這項服務,設定具備 VM 執行個體群組後端的區域外部應用程式負載平衡器。
設定授權擴充功能。
在 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-extfr2使用提供的樣本值。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動作表示擴充功能與 Proxy 相關聯。如要進一步瞭解授權政策資源,請參閱
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
設定名為
lb-content-authz-service的呼叫後端服務,並在us-west1中設定名為fr3的轉送規則。針對這項服務,設定具備 VM 執行個體群組後端的區域外部應用程式負載平衡器。
使用
FULL_DUPLEX_STREAMEDbody 處理模式中的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 範例。 - 設定路徑擴充功能
- 設定流量擴充功能
- 管理擴充功能