Configurare un'estensione di autorizzazione

Service Extensions consente ai bilanciatori del carico delle applicazioni di inviare callout ai servizi di backend per inserire l'elaborazione personalizzata nel percorso di elaborazione. Le estensioni di autorizzazione vengono eseguite nel percorso di elaborazione delle richieste quando il bilanciatore del carico riceve le intestazioni delle richieste e dopo che la mappa URL sceglie il servizio di backend. Questa pagina descrive come configurare le estensioni di autorizzazione per utilizzare un motore di autorizzazione personalizzato definito in una policy di autorizzazione.

Per una panoramica delle estensioni del bilanciatore del carico delle applicazioni, consulta la panoramica delle estensioni di Cloud Load Balancing.

Introduzione

Cloud Load Balancing consente di configurare policy di autorizzazione che applicano il controllo dell'accesso al traffico in entrata nei bilanciatori del carico. A volte, le decisioni di autorizzazione complesse non possono essere espresse facilmente utilizzando una policy di autorizzazione.

Puoi configurare le policy di autorizzazione con le estensioni di autorizzazione per delegare le decisioni di autorizzazione ai motori di autorizzazione personalizzati. Nel percorso dei dati, le estensioni di autorizzazione vengono eseguite dopo le estensioni di route, ma prima delle estensioni di traffico. Per ulteriori informazioni sulle policy di autorizzazione, consulta la panoramica delle policy di autorizzazione.

Per ogni richiesta di autorizzazione, il proxy inoltra le intestazioni delle richieste all'estensione. A seconda della risposta del provider, il proxy inoltra o rifiuta la richiesta.

In Anteprima, per i bilanciatori del carico delle applicazioni esterni regionali e i bilanciatori del carico delle applicazioni interni regionali, puoi configurare le estensioni di autorizzazione separatamente per le policy di autorizzazione delle richieste e le policy di autorizzazione dei contenuti. Le estensioni basate sulle policy di autorizzazione delle richieste sono configurate per essere eseguite prima di quelle basate sulle policy di autorizzazione dei contenuti.

Per informazioni sui limiti relativi alle estensioni del bilanciatore del carico delle applicazioni, consulta la pagina Quote e limiti.

Configurare un'estensione di autorizzazione di base

L'esempio seguente mostra come configurare un'estensione di autorizzazione, my-authz-ext, con una policy di autorizzazione per delegare le decisioni di autorizzazione per un bilanciatore del carico delle applicazioni esterno globale.

gcloud

  1. Crea le risorse richieste come descritto in Configurare un servizio di backend callout.

    Per questo esercizio, crea un bilanciatore del carico delle applicazioni esterno globale. Assegna al servizio il nome authz-service e alla regola di forwarding il nome fr1.

  2. Configura l'estensione di autorizzazione.

    1. Definisci l'estensione in un file YAML che la associa al servizio di backend, authz-service. Utilizza i valori di esempio forniti.

      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
      

      Sostituisci PROJECT_ID con l' ID progetto.

      Per ulteriori informazioni sui campi del file YAML, consulta ExtensionChain nella documentazione dell'API. Per informazioni sugli attributi supportati, consulta Attributi supportati.

    2. Importa l'estensione di autorizzazione. Utilizza il gcloud service-extensions authz-extensions import comando con i seguenti valori di esempio.

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      

      Se vuoi impostare il protocollo su ext_authz, utilizza invece il gcloud beta service-extensions authz-extensions import comando.

  3. Configura una policy di autorizzazione con l'estensione.

    1. Definisci una policy di autorizzazione che associa l'estensione my-authz-ext alla regola di forwarding fr1. Utilizza i valori di esempio forniti. L'azione CUSTOM indica che è in uso un'estensione.

      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. Importa la policy di autorizzazione nel progetto. Utilizza il gcloud network-security authz-policies import comando con i seguenti valori di esempio.

      gcloud network-security authz-policies import my-authz-policy \
          --source=authz-policy.yaml \
          --location=global
      

Configurare le estensioni di autorizzazione in base ai profili

Puoi configurare le estensioni di autorizzazione separatamente per le policy di autorizzazione delle richieste e dei contenuti.

Per una policy di autorizzazione delle richieste

L'esempio seguente mostra come configurare un'estensione di autorizzazione che applica una policy di autorizzazione delle richieste a una regola di forwarding in us-west1. La policy richiede che il traffico superi autenticazione TLS reciproca (mTLS) da un'entità specifica prima di poter raggiungere la destinazione, example.com/mcp.

gcloud

  1. Configura un servizio di backend callout denominato lb-request-authz-service in us-west1 con una regola di forwarding denominata fr2.

    Per il servizio, configura un bilanciatore del carico delle applicazioni esterno regionale con backend di gruppi di istanze VM.

  2. Configura l'estensione di autorizzazione.

    1. Definisci l'estensione in un file YAML che la associa al servizio di backend, lb-request-authz-service. Utilizza i valori di esempio forniti.

      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
      

      Sostituisci PROJECT_ID con l' ID progetto.

      L'estensione deve trovarsi nella stessa regione del servizio di backend.

      Per impostazione predefinita, tutti i callout di Service Extensions utilizzano il protocollo di elaborazione esterna di Envoy o ext_proc. Nel caso dei callout di autorizzazione, è supportato anche il protocollo di autorizzazione esterna o ext_authz in anteprima. Quando l'opzione wireFormat è impostata su EXT_AUTHZ_GRPC, il callout utilizza il protocollo ext_authz. Se l'opzione non è specificata, il callout utilizza il protocollo ext_proc.

      Per le policy di autorizzazione delle richieste, il valore wireFormat può essere EXT_AUTHZ_GRPC in modo che il callout utilizzi il protocollo ext_authz, anche se è supportato anche il protocollo ext_proc.

      Per impostazione predefinita, failOpen è impostato su false. Se l'estensione va in timeout o non riesce, l'elaborazione delle richieste si interrompe. Questa opzione predefinita è preferibile quando si dà la priorità alla sicurezza o all'integrità rispetto alla disponibilità.

    2. Importa l'estensione di autorizzazione. Utilizza il gcloud beta service-extensions authz-extensions import comando con i seguenti valori di esempio.

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. Nello stesso progetto, configura una policy di autorizzazione con l'estensione.

    Per qualsiasi richiesta a example.com/mcp, la policy richiede l'autenticazione mutual TLS da un'entità specifica e delega ulteriormente la decisione di autorizzazione all'estensione di autorizzazione, my-lb-authz-request-ext.

    1. Definisci una policy di autorizzazione che associa l'estensione my-lb-request-authz-ext alla regola di forwarding fr2. Utilizza i valori di esempio forniti.

      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
      

      Per le policy di autorizzazione delle richieste, il valore di policyProfile deve essere REQUEST_AUTHZ. Questo valore indica che il provider di policy personalizzate agisce sulle richieste per consentire o negare il traffico.

      L'azione CUSTOM indica che un'estensione è associata al proxy.

      Per ulteriori informazioni su una risorsa policy di autorizzazione, consulta la authzPolicy documentazione di riferimento.

    2. Importa la policy di autorizzazione nel progetto. Utilizza il gcloud beta network-security authz-policies import comando con i seguenti valori di esempio.

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

Per una policy di autorizzazione dei contenuti

L'esempio seguente mostra come configurare un'estensione di autorizzazione che applica una policy di autorizzazione dei contenuti a una regola di forwarding in us-west1. La policy richiede a un servizio di sanificazione dei contenuti di eseguire un'ispezione approfondita dei payload dell'applicazione per consentire o negare le richieste o modificarle e le risposte, a seconda delle esigenze.

gcloud

  1. Configura un servizio di backend callout denominato lb-content-authz-service in us-west1 con una regola di forwarding denominata fr3.

    Per il servizio, configura un bilanciatore del carico delle applicazioni esterno regionale con backend di gruppi di istanze VM.

    Configura il server di estensione con il ext_proc protocollo in FULL_DUPLEX_STREAMED modalità di elaborazione del corpo e supportando tutti gli eventi.

  2. Configura l'estensione di autorizzazione.

    1. Definisci l'estensione in un file YAML che la associa al servizio di backend, lb-content-authz-service. Utilizza i valori di esempio forniti.

      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
      

      Per le policy di autorizzazione dei contenuti, il valore di policyProfile deve essere CONTENT_AUTHZ.

      Per le policy CONTENT_AUTHZ, il valore wireFormat non deve essere impostato esplicitamente come EXT_PROC_GRPC. Per impostazione predefinita, il callout utilizza il protocollo ext_proc.

    2. Importa l'estensione di autorizzazione. Utilizza il gcloud beta service-extensions authz-extensions import comando con i seguenti valori di esempio.

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. Configura una policy di autorizzazione con l'estensione.

    1. Definisci una policy di autorizzazione che associa l'estensione my-lb-content-authz-ext alla regola di forwarding, fr3. Utilizza i valori di esempio forniti.

      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
      

      Il valore di policyProfile deve essere CONTENT_AUTHZ.

    2. Importa la policy di autorizzazione nel progetto. Utilizza il gcloud beta network-security authz-policies import comando con i seguenti valori di esempio.

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

Limitazioni per le estensioni di autorizzazione

Di seguito sono riportate alcune limitazioni delle estensioni di autorizzazione:

  • Una policy di autorizzazione può avere una sola estensione di autorizzazione.
  • Una regola di forwarding può essere utilizzata con diverse policy di autorizzazione, di cui solo una può essere una policy di autorizzazione personalizzata.

Per le limitazioni applicabili a tutte le estensioni, consulta Limitazioni per le estensioni.

Passaggi successivi