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
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-servicee alla regola di forwarding il nomefr1.Configura l'estensione di autorizzazione.
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 EOFSostituisci
PROJECT_IDcon 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.
Importa l'estensione di autorizzazione. Utilizza il
gcloud service-extensions authz-extensions importcomando con i seguenti valori di esempio.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=globalSe vuoi impostare il protocollo su
ext_authz, utilizza invece ilgcloud beta service-extensions authz-extensions importcomando.
Configura una policy di autorizzazione con l'estensione.
Definisci una policy di autorizzazione che associa l'estensione
my-authz-extalla regola di forwardingfr1. Utilizza i valori di esempio forniti. L'azioneCUSTOMindica 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" EOFImporta la policy di autorizzazione nel progetto. Utilizza il
gcloud network-security authz-policies importcomando 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
Configura un servizio di backend callout denominato
lb-request-authz-serviceinus-west1con una regola di forwarding denominatafr2.Per il servizio, configura un bilanciatore del carico delle applicazioni esterno regionale con backend di gruppi di istanze VM.
Configura l'estensione di autorizzazione.
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 EOFSostituisci
PROJECT_IDcon 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 oext_authzin anteprima. Quando l'opzionewireFormatè impostata suEXT_AUTHZ_GRPC, il callout utilizza il protocolloext_authz. Se l'opzione non è specificata, il callout utilizza il protocolloext_proc.Per le policy di autorizzazione delle richieste, il valore
wireFormatpuò essereEXT_AUTHZ_GRPCin modo che il callout utilizzi il protocolloext_authz, anche se è supportato anche il protocolloext_proc.Per impostazione predefinita,
failOpenè impostato sufalse. 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à.Importa l'estensione di autorizzazione. Utilizza il
gcloud beta service-extensions authz-extensions importcomando 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
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.Definisci una policy di autorizzazione che associa l'estensione
my-lb-request-authz-extalla regola di forwardingfr2. 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" EOFPer le policy di autorizzazione delle richieste, il valore di
policyProfiledeve essereREQUEST_AUTHZ. Questo valore indica che il provider di policy personalizzate agisce sulle richieste per consentire o negare il traffico.L'azione
CUSTOMindica che un'estensione è associata al proxy.Per ulteriori informazioni su una risorsa policy di autorizzazione, consulta la
authzPolicydocumentazione di riferimento.Importa la policy di autorizzazione nel progetto. Utilizza il
gcloud beta network-security authz-policies importcomando 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
Configura un servizio di backend callout denominato
lb-content-authz-serviceinus-west1con una regola di forwarding denominatafr3.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_procprotocollo inFULL_DUPLEX_STREAMEDmodalità di elaborazione del corpo e supportando tutti gli eventi.Configura l'estensione di autorizzazione.
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" EOFPer le policy di autorizzazione dei contenuti, il valore di
policyProfiledeve essereCONTENT_AUTHZ.Per le policy
CONTENT_AUTHZ, il valorewireFormatnon deve essere impostato esplicitamente comeEXT_PROC_GRPC. Per impostazione predefinita, il callout utilizza il protocolloext_proc.Importa l'estensione di autorizzazione. Utilizza il
gcloud beta service-extensions authz-extensions importcomando 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
Configura una policy di autorizzazione con l'estensione.
Definisci una policy di autorizzazione che associa l'estensione
my-lb-content-authz-extalla 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" EOFIl valore di
policyProfiledeve essereCONTENT_AUTHZ.Importa la policy di autorizzazione nel progetto. Utilizza il
gcloud beta network-security authz-policies importcomando 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
- Visualizza gli esempi di server
ext_authzeext_procin Python e Go nel repository GitHub di Service Extensions . - Configurare un'estensione di route
- Configurare un'estensione di traffico
- Gestire le estensioni