設定授權擴充功能

有了 Service Extensions,應用程式負載平衡器就能向後端服務發出呼叫,在處理路徑中插入自訂處理程序。當負載平衡器收到要求標頭,且網址對應選擇後端服務後,授權擴充功能就會在要求處理路徑中執行。本頁說明如何設定授權擴充功能,以使用授權政策中定義的自訂授權引擎。

如要瞭解應用程式負載平衡器擴充功能,請參閱「Cloud Load Balancing 擴充功能總覽」。

簡介

透過 Cloud Load Balancing,您可以設定授權政策,對進入負載平衡器的流量強制執行存取控管。有時,複雜的授權決策無法輕易以授權政策表示。

您可以透過授權擴充功能設定授權政策,將授權決策委派給自訂授權引擎。在資料路徑中,授權擴充功能會在路徑擴充功能之後執行,但會在流量擴充功能之前執行。如要進一步瞭解授權政策,請參閱「授權政策總覽」。

對於每項授權要求,Proxy 會將要求標頭轉送至擴充功能。視供應商的回應而定,Proxy 會轉送或拒絕要求。

預覽中,您可以為區域性外部應用程式負載平衡器和區域性內部應用程式負載平衡器,分別設定要求授權政策和內容授權政策的授權擴充功能。根據要求授權政策的擴充功能,會設定為在根據內容授權政策的擴充功能之前執行。

如要瞭解應用程式負載平衡器擴充功能相關限制,請參閱「配額與限制」頁面。

設定基本授權擴充功能

以下範例說明如何使用授權政策設定授權擴充功能 my-authz-ext,將全域外部應用程式負載平衡器的授權決策委派出去。

gcloud

  1. 按照「設定呼叫外送後端服務」一文中的說明,建立必要資源。

    在本練習中,請建立全域外部應用程式負載平衡器。將服務命名為 authz-service,轉送規則命名為 fr1

  2. 設定授權擴充功能。

    1. 在 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」。如要瞭解支援的屬性,請參閱「支援的屬性」。

    2. 匯入授權擴充功能。使用 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 指令

  3. 使用擴充功能設定授權政策。

    1. 定義授權政策,將擴充功能 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
      
    2. 將授權政策匯入專案。使用 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

  1. 設定名為 lb-request-authz-service 的呼叫後端服務,並在 us-west1 中設定名為 fr2 的轉送規則。

    針對這項服務,設定具備 VM 執行個體群組後端的區域外部應用程式負載平衡器

  2. 設定授權擴充功能。

    1. 在 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。如果擴充功能逾時或失敗,要求處理程序就會停止。如果安全或完整性比可用性更重要,建議使用這個預設選項。

    2. 匯入授權擴充功能。使用 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
      
  3. 在同一個專案中,設定具有擴充功能的授權政策。

    對於 example.com/mcp 的任何要求,這項政策都要求特定主體進行相互 TLS 驗證,並將授權決策進一步委派給授權擴充功能 my-lb-authz-request-ext

    1. 定義授權政策,將擴充功能與轉送規則建立關聯。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 參考文件

    2. 將授權政策匯入專案。使用 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

  1. 設定名為 lb-content-authz-service 的呼叫後端服務,並在 us-west1 中設定名為 fr3 的轉送規則。

    針對這項服務,設定具備 VM 執行個體群組後端的區域外部應用程式負載平衡器

    使用 FULL_DUPLEX_STREAMED body 處理模式中的 ext_proc 通訊協定設定擴充功能伺服器,並支援所有事件。

  2. 設定授權擴充功能。

    1. 在 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 通訊協定。

    2. 匯入授權擴充功能。使用 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
      
  3. 使用擴充功能設定授權政策。

    1. 定義授權政策,將擴充功能 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"
      EOF
      

      policyProfile 的值必須為 CONTENT_AUTHZ

    2. 將授權政策匯入專案。使用 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
      

授權擴充功能的限制

授權擴充功能有以下限制:

  • 授權政策只能有一個授權擴充功能。
  • 轉送規則可搭配多項授權政策使用,但只能有一項是自訂授權政策。

如要瞭解所有擴充功能適用的限制,請參閱「擴充功能限制」。

後續步驟