透過授權政策,您可以在透過不同Google Cloud 服務 (例如應用程式負載平衡器、Agent Gateway (私人預先發布版) 和 Secure Web Proxy) 處理要求或回應時,建立存取控管檢查和內容清除檢查。
對於 Agent Gateway 和 Secure Web Proxy,授權政策會直接附加至這些服務的閘道資源。如果是負載平衡器,授權政策會附加至負載平衡器的轉送規則資源。
授權政策 (AuthzPolicy) 會附加至負載平衡器的轉送規則,讓您根據要求來源和預期作業指定條件,允許、限制或委派要求授權。通過這些檢查的要求會轉送至負載平衡器的後端服務,而未通過檢查的要求則會遭到拒絕,並傳回未經授權的回應。
您可以為所有應用程式負載平衡器的轉送規則設定授權政策,負載平衡配置為 EXTERNAL_MANAGED 或 INTERNAL_MANAGED。
下列應用程式負載平衡器支援授權政策:
- 全域外部應用程式負載平衡器
- 區域性外部應用程式負載平衡器
- 區域性內部應用程式負載平衡器
- 跨區域內部應用程式負載平衡器
授權政策規則
授權政策由 HTTP 規則清單組成,可與傳入要求比對。
如果是具有 ALLOW 或 DENY 動作的授權政策,HTTP 規則 (AuthzRule) 會定義條件,判斷是否允許流量通過負載平衡器。至少須有一項 HTTP 規則。
對於具有 CUSTOM 動作的授權政策,HTTP 規則 (AuthzRule) 會定義相關條件,判斷是否要將流量委派給自訂供應商進行授權。HTTP 規則為選用,但必須提供自訂供應商。
如果至少有一項 HTTP 規則符合要求,或政策中未定義任何 HTTP 規則,就會發生政策比對。
授權政策 HTTP 規則包含下列欄位:
from:指定規則允許的用戶端身分。身分可衍生自相互傳輸層安全標準 (TLS) 連線中的用戶端憑證,也可以是與用戶端虛擬機器 (VM) 執行個體相關聯的環境身分,例如來自服務帳戶或安全標記。to:指定規則允許的作業,例如可存取的網址或允許的 HTTP 方法。when:指定必須符合的其他限制。您可以使用一般運算語言 (CEL) 運算式定義限制。
授權政策動作
評估要求時,授權政策會指定要對要求套用的動作 (AuthzAction)。授權政策至少須有一個動作,可以是下列其中一項:
ALLOW:如果要求符合ALLOW政策中指定的任何規則,則允許要求傳遞至後端。如果存在ALLOW政策,但沒有相符項目,系統就會拒絕要求。換句話說,如果沒有任何設定的授權政策 (含ALLOW動作) 與要求相符,系統就會拒絕要求。在 Cloud Logging 中,這項動作會記錄為denied_as_no_allow_policies_matched_request。如要套用
ALLOW動作,您至少需要一項 HTTP 規則。DENY:如果要求符合DENY政策中指定的任何規則,就會拒絕要求。如果存在DENY政策,但沒有相符項目,系統就會允許要求。換句話說,如果沒有任何設定的授權政策與要求相符,且動作為DENY,系統就會允許要求。在 Cloud Logging 中,這項動作會記錄為allowed_as_no_deny_policies_matched_request。如要套用
DENY動作,您至少需要一項 HTTP 規則。CUSTOM:將授權決策委派給自訂授權供應商,例如 IAP 或服務擴充功能。詳情請參閱「委派授權決策」。如果為
CUSTOM政策設定了 HTTP 規則,要求必須符合 HTTP 規則,才能叫用自訂供應商。不過,如果未定義任何 HTTP 規則,授權政策一律會將授權決策委派給自訂授權供應商。詳情請參閱「授權政策,可委派授權決策」一文中的範例。
授權政策評估順序
授權政策支援 CUSTOM、DENY 和 ALLOW 政策,可控管存取權。如果單一資源有多項授權政策,系統會先評估 CUSTOM 政策,接著是 DENY 政策,最後是 ALLOW 政策。評估結果取決於下列規則:
如果要求符合
CUSTOM政策,系統會使用自訂授權供應商評估CUSTOM政策。如果自訂供應器拒絕要求,系統就會拒絕要求。即使已設定DENY或ALLOW政策,系統也不會評估。如有任何與要求相符的
DENY政策,系統會拒絕要求。系統不會評估任何ALLOW政策,即使已設定也一樣。如果沒有
ALLOW政策,要求就會獲准。如果任何
ALLOW政策符合要求,請允許該要求。如果存在
ALLOW政策,但沒有相符項目,系統就會拒絕要求。換句話說,如果沒有任何設定的AuthzPolicies具有ALLOW動作,要求預設會遭到拒絕。
對於區域外部應用程式負載平衡器、區域內部應用程式負載平衡器、Agent Gateway 和 Secure Web Proxy (支援政策設定檔的Google Cloud 服務),授權政策的評估順序如下:
如果存在與要求相符的自訂要求授權 (
REQUEST_AUTHZ) 政策,系統會使用自訂授權提供者評估REQUEST_AUTHZ政策。如果自訂供應器拒絕要求,系統就會拒絕要求。即使已設定DENY、ALLOW和CONTENT_AUTHZ政策,系統也不會評估這些政策。如有任何與要求相符的
DENY政策,系統會拒絕要求。即使已設定ALLOW和CONTENT_AUTHZ政策,系統也不會評估這些政策。如果沒有
ALLOW政策,要求會繼續進行內容授權 (CONTENT_AUTHZ) 評估。如果任何
ALLOW政策與要求相符,要求就會進入CONTENT_AUTHZ評估程序。如果存在
ALLOW政策,但沒有相符項目,系統會拒絕要求。CONTENT_AUTHZ政策。如果存在與要求相符的
CONTENT_AUTHZ政策,則最後評估該政策。如果自訂供應器拒絕要求,系統就會拒絕要求。
授權政策中的政策設定檔
授權政策中的政策設定檔支援下列 Google Cloud 服務:
- 區域性外部應用程式負載平衡器
- 區域性內部應用程式負載平衡器
- Agent Gateway
- Secure Web Proxy
授權政策中的政策設定檔 (PolicyProfile) 屬於下列類型:
- 要求授權設定檔 (
REQUEST_AUTHZ): 根據 HTTP 要求標頭中的資訊,允許或拒絕流量。 - 內容授權設定檔 (
CONTENT_AUTHZ): 提供內容安全和篩選功能,可防範提示詞注入攻擊、避免敏感資料外洩,以及篩除有害內容。
您可以透過 REQUEST_AUTHZ 設定檔或 CONTENT_AUTHZ 設定檔設定授權政策,但不能同時使用兩者。如未指定政策設定檔,授權政策預設會使用 REQUEST_AUTHZ 設定檔。
要求授權設定檔
使用 REQUEST_AUTHZ 政策設定檔的授權政策可以直接評估或委派傳入流量的存取決策。您可以使用授權擴充功能,將存取決策委派給 Identity-Aware Proxy 或自訂授權引擎。REQUEST_AUTHZ政策設定檔會根據 HTTP 要求標頭中的資訊,允許或拒絕要求。
如果授權政策採用 REQUEST_AUTHZ 政策設定檔,則可對要求套用 ALLOW、DENY 或 CUSTOM 動作。ALLOW 或 DENY 動作表示系統會直接評估存取決策,而 CUSTOM 動作表示系統會委派存取決策。
委派存取決策時,負載平衡器轉送規則中設定的授權政策會指向在回呼後端服務上執行的要求授權擴充功能。對於每項授權要求,負載平衡器會使用 Envoy 的 ext_proc 或 ext_authz 通訊協定,將要求標頭轉送至授權擴充功能。負載平衡器 Proxy 會根據擴充功能的傳回內容,將要求轉送至後端服務或拒絕要求。
如未指定政策設定檔,授權政策預設會使用要求授權設定檔 (REQUEST_AUTHZ)。
內容授權設定檔
使用 CONTENT_AUTHZ 政策設定檔的授權政策可用於深入檢查應用程式酬載,視需要允許或拒絕要求,或變更要求或回應。您可以將存取決策委派給 Model Armor 或您自己的內容清除擴充功能。
具有 CONTENT_AUTHZ 政策設定檔的授權政策只能將 CUSTOM 動作套用至要求。也就是說,系統無法直接評估要求,必須委派處理。
授權政策是在負載平衡器的轉送規則中設定,並指向內容授權擴充功能。對於每項授權要求,負載平衡器都會使用 Envoy 的 ext_proc 通訊協定,以全雙工串流模式 (FULL_DUPLEX_STREAMED) 將完整的要求和回應內容 (包括標頭、主體和尾碼) 轉送至內容授權擴充功能。負載平衡器 Proxy 會根據擴充功能的傳回內容,將要求轉送至目的地或拒絕要求。如果是要求,目的地是負載平衡器的後端服務;如果是回應,目的地則是用戶端。
委派授權決策
授權政策可以直接評估,也可以委派。對於無法使用授權政策表示的複雜授權決策,您可以建立含有 CUSTOM 動作的授權政策,並透過 Service Extensions,將授權決策委派給 Google 代管服務或使用者管理的服務。
- Google 代管服務
- Model Armor
- Identity-Aware Proxy
- 使用者自行管理的服務
- 後端服務 Google Cloud
- 可透過完整網域名稱 (FQDN) 存取的服務,支援 Envoy 的
ext_proc或ext_authz通訊協定
下表摘要列出可透過 Service Extensions 將授權決策委派給哪些服務。
| 授權政策 | 直接評估 | 委派給 Service Extensions (授權擴充功能) | |||
|---|---|---|---|---|---|
| Google 代管服務 | 使用者管理的服務 | ||||
| Model Armor | Identity-Aware Proxy | Google Cloud 後端服務 | 以 FQDN 為基礎的服務 | ||
REQUEST_AUTHZ 個人資料 |
|||||
CONTENT_AUTHZ 個人資料 |
|||||
Service Extensions
您可以使用授權政策,將授權決策委派給Service Extensions,特別是授權擴充功能類型。授權擴充功能支援呼叫,可將自訂邏輯插入應用程式負載平衡器。 Google Cloud這項功能可讓您編寫自己的程式碼,對負載平衡器處理的流量執行各種活動,例如標頭重寫、增量安全性、自訂記錄和自訂使用者驗證。
透過 Service Extensions 呼叫,您可以指示負載平衡器使用 gRPC 呼叫,將負載平衡資料處理路徑中的流量轉送至呼叫服務 (可由使用者或 Google 管理)。如要瞭解不同類型的來電服務,請參閱先前的表格。 這些呼叫服務會執行授權擴充功能,並在將流量傳回負載平衡器進行後續處理前,套用各種政策或函式。下圖呈現此程序。
如要將授權決策委派給授權擴充功能,請建立在回呼服務上執行的授權擴充功能 (AuthzExtension)。接著,您可以建立授權政策,並使用 CUSTOM 動作將政策指向您建立的授權擴充功能。授權擴充功能可用於執行要求層級授權 (REQUEST_AUTHZ) 和內容清理 (CONTENT_AUTHZ)。
如要進一步瞭解如何將授權決策委派給使用者管理的Google Cloud 後端服務或以 FQDN 為基礎的服務,請參閱「將授權決策委派給使用者管理的服務」。
資料處理路徑中的授權擴充功能
將授權決策委派給 Service Extensions時, 特別是 授權擴充功能類型, 請注意下列術語:
當含有
REQUEST_AUTHZ政策設定檔的自訂授權政策指向授權擴充功能 (AuthzExtension) 時,授權擴充功能稱為要求授權擴充功能。如果授權政策的
CONTENT_AUTHZ政策設定檔指向授權擴充功能 (AuthzExtension),則該授權擴充功能稱為內容授權擴充功能。
在要求處理路徑中,系統會先叫用要求授權擴充功能,接著評估拒絕和允許政策,然後是內容授權擴充功能,最後是流量擴充功能。內容授權擴充功能也可以在回應處理路徑中叫用。下圖顯示不同擴充功能的叫用順序。
您可以將不同擴充功能視為在資料處理路徑的特定點觸發的掛鉤。如要進一步瞭解不同擴充功能,請參閱Service Extensions說明文件中的「負載平衡資料路徑中的擴充點」。
Model Armor
您可以使用授權政策啟用 Model Armor,套用 AI 防護機制,防止生成有害內容、提示詞注入和資料外洩。
如要這麼做,您可以建立授權擴充功能 (AuthzExtension),在 Model Armor 服務上執行。接著,您可以使用 CUSTOM 動作和 CONTENT_AUTHZ 設定檔建立授權政策,指向您建立的授權擴充功能。
如要進一步瞭解如何將授權委派給 Model Armor,請參閱「將授權決策委派給 Model Armor」。
Identity-Aware Proxy
您可以將授權決策委派給 Identity-Aware Proxy。IAP 會驗證使用者身分和要求內容,判斷是否授予應用程式或資源的存取權。
對於全域外部應用程式負載平衡器和跨區域內部應用程式負載平衡器,您無法透過授權擴充功能,將授權決策委派給 IAP。
對於區域外部應用程式負載平衡器和區域內部應用程式負載平衡器,您可以設定授權政策,透過授權擴充功能將授權決策委派給 IAP。
如要進一步瞭解如何將 IAP 做為授權服務,請參閱「將授權決策委派給 Identity-Aware Proxy」。
以主體為準的授權政策
如要以高精細度識別流量來源,您可以根據從用戶端憑證衍生的身分,設定授權政策。這個方法需要在負載平衡器上啟用前端 mTLS,並使用下列憑證屬性做為主體選取器進行識別:
- 用戶端憑證 URI SAN (
CLIENT_CERT_URI_SAN) - 用戶端憑證 DNS 名稱 SAN (
CLIENT_CERT_DNS_NAME_SAN) - 用戶端憑證通用名稱 (
CLIENT_CERT_COMMON_NAME)
如未指定任何主體選取器來進行識別,系統會使用 CLIENT_CERT_URI_SAN 做為預設主體選取器。也就是說,在做出授權決策時,系統會評估用戶端憑證的 URI SAN。
如要使用主體授權,必須符合下列條件:
必須啟用前端 mTLS。如果未啟用前端 mTLS,用戶端就不會提供憑證。因此,授權政策中任何以主體為準的規則,都找不到可供評估的憑證資訊。舉例來說,檢查
CLIENT_CERT_URI_SAN的規則會看到空值。必須有有效的用戶端憑證。即使啟用 mTLS,如果連線建立時缺少或使用無效憑證,系統也不會使用用戶端憑證進行授權。如果 mTLS 用戶端驗證模式設為寬容模式
ALLOW_INVALID_OR_MISSING_CLIENT_CERT,就會發生這種情況。 同樣地,授權政策中任何以主體為準的規則,都找不到可供評估的憑證資訊。舉例來說,檢查CLIENT_CERT_URI_SAN的規則會看到空值。
屬性大小限制的影響
授權決策會受到用戶端憑證屬性大小的影響。如果屬性超出大小限制,且政策已設定為驗證該特定屬性,要求就會遭到拒絕。
在下列情況下,系統可能會拒絕要求:
- 這項政策會根據
CLIENT_CERT_URI_SAN進行驗證,且憑證的 URI SAN 超過大小上限。 - 政策會根據
CLIENT_CERT_DNS_NAME_SAN進行驗證,且憑證的 DNS 名稱 SAN 超出大小限制。 - 這項政策會根據
CLIENT_CERT_COMMON_NAME進行驗證,且憑證的主體 (包含一般名稱) 超出大小限制。
如果憑證的屬性超過大小限制,但未由政策的主體選取器明確驗證,系統仍會根據設定的主體規則評估要求。舉例來說,如果政策設定為只驗證 CLIENT_CERT_DNS_NAME_SAN,則來自 URI SAN 過大的用戶端要求不會因此遭到拒絕。政策會根據 DNS 名稱 SAN 評估要求。
如要查看以主體為依據的授權政策範例,請參閱「授權政策,拒絕要求」。
以服務帳戶或安全標記為依據的授權政策
- 區域性內部應用程式負載平衡器
- 跨區域內部應用程式負載平衡器
授權政策會根據服務帳戶和安全標記,強制執行安全性規則,判斷流量的傳送者是誰或什麼,而不只是 IP 位址。因此,您可以使用服務帳戶和安全標記定義安全範圍,將規則從以 IP 為基礎改為以身分為基礎。舉例來說,您可以建立授權政策,執行下列操作:
拒絕特定服務帳戶 (
my-sa-123@PROJECT_ID.iam.gserviceaccount.com) 的 Compute Engine VM 存取/api/payments路徑。允許具有安全標記 (
environment: prod鍵/值組合) 的 Compute Engine VM 存取/api/payments路徑。
您可以根據服務帳戶或附加至各種 Google Cloud 服務的安全標記,套用授權政策。您可以允許、拒絕或委派進一步評估,這些 Google Cloud 服務 (連結至特定服務帳戶或安全代碼) 產生的任何流量。
下表列出支援使用服務帳戶和安全標記的各種 Google Cloud 服務。
| Google Cloud 服務 | 服務帳戶支援 | 安全標記支援 |
|---|---|---|
| Compute Engine 虛擬機器 (VM) | ||
| Google Kubernetes Engine (GKE) 節點 | ||
| Google Kubernetes Engine (GKE) 容器 | 1 | 1 |
| Cloud Run 的直接 VPC | 1 | |
| 無伺服器 VPC 存取連接器 | 2 | 2 |
| Cloud VPN | 1 | 1 |
| Cloud Interconnect 內部部署 | 1 | 1 |
| 應用程式負載平衡器 | 3 | 3 |
| 網路負載平衡器 | 3 | 3 |
1 不支援 Google Cloud。
2 來源 IP 位址是專屬位址,可做為替代位址。
3 在分層架構中,如果應用程式負載平衡器和網路負載平衡器做為流量來源,則不支援服務帳戶和標記。
下表列出支援使用服務帳戶和標記的不同虛擬私有雲 (VPC) 架構。
| 虛擬私有雲 | 虛擬私有雲架構 | 支援 |
|---|---|---|
| 虛擬私有雲內部 | 跨專案 (Shared VPC) | |
| 虛擬私有雲內部 | 跨區域 | |
| 跨虛擬私有雲 | 跨對等互連連結 (對等互連虛擬私有雲) | |
| 跨虛擬私有雲 | 跨 Private Service Connect | |
| 跨虛擬私有雲 | 跨 Network Connectivity Center 輪輻 |
如要進一步瞭解如何根據服務帳戶和附加至 Google Cloud 資源的標記設定授權政策,請參閱「根據服務帳戶或標記設定授權政策」。
配額
如要瞭解授權政策的配額,請參閱「授權政策的配額與限制」。
定價
如要查看定價資訊,請參閱網路定價:Cloud Load Balancing。