Configurazione delle funzionalità avanzate dei criteri di autorizzazione
Il criterio di autorizzazione di Cloud Service Mesh fornisce mesh, spazio dei nomi e dell'accesso ai carichi di lavoro nel mesh. Questa pagina descrive i dettagli della configurazione del criterio di autorizzazione avanzato di Cloud Service Mesh tra cui la modalità dry run e il denial logging. Le funzionalità descritte in questa pagina si presuppone che tu abbia familiarità con le nozioni di base i concetti relativi alle norme descritti in Panoramica dei criteri di autorizzazione.
Modalità dry run
Il criterio di autorizzazione di Cloud Service Mesh supporta la modalità di prova, che ti consente di verificare un criterio di autorizzazione con traffico di produzione reale senza applicarlo. La modalità dry run consente di comprendere meglio l'effetto di un'autorizzazione prima di applicarlo. In questo modo si riduce il rischio di danneggiare generato da un criterio di autorizzazione non corretto.
Utilizza l'annotazione "istio.io/dry-run": "true"
nel criterio di autorizzazione per impostarlo sulla modalità di prova.
Esempio di modalità dry run
L'esempio seguente, deny-path-headers
, mostra
un criterio con l'annotazione dry-run
impostata su "true
. Il criterio di autorizzazione
rifiuta le richieste al percorso headers
e consente tutte le altre richieste.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: deny-path-headers
annotations:
"istio.io/dry-run": "true"
spec:
selector:
matchLabels:
app: httpbin
action: DENY
rules:
- to:
- operation:
paths: ["/headers"]
Quando applichi un criterio di autorizzazione in modalità di prova, Cloud Service Mesh registra il risultato dell'applicazione in Cloud Logging, ma non applica il criterio. La richiesta è sempre consentita e puoi controllare Explorer dei log per decidere se il criterio di autorizzazione funziona o meno come previsto.
Dettagli di logging della prova secca
Dopo aver applicato un criterio di autorizzazione in modalità di prova, puoi visualizzarne i risultati in Esplora log.
Vai a Esplora log. Nell'URL seguente, sostituisci
PROJECT_ID
con l'ID del tuo progetto:https://console.cloud.google.com/logs/query?project=PROJECT_ID
Nel campo Query Builder, inserisci una query per trovare il criterio di autorizzazione della modalità di prova. Nella seguente query, sostituisci
NAMESPACE
con il tuo spazio dei nomi:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" labels.destination_namespace="NAMESPACE" labels.dry_run_result="AuthzDenied"
Fai clic su Esegui query.
Modifica l'intervallo di tempo in base alle tue esigenze.
Il seguente screenshot mostra le etichette di prova nel log di traffico
Esplora log dopo l'applicazione del criterio deny-path-headers
di esempio:
La modalità dry run supporta i criteri di autorizzazione ALLOW
e DENY
, oltre a
alle
Risultati di prova di Istio.
Cloud Service Mesh archivia i risultati di prova in Cloud Logging nel seguente
etichette:
- dry_run_result: il risultato del dry run è "AuthzAllowed" o "AuthzDenied".
- dry_run_policy_name: lo spazio dei nomi e il nome dell'autorizzazione corrispondente che prendono la decisione di prova.
- dry_run_policy_rule: l'indice della regola del criterio di autorizzazione corrispondente che prende la decisione relativa al dry run.
La tabella seguente mostra i dettagli registrati per un'autorizzazione in modalità dry run:
Criterio di autorizzazione applicato in modalità di prova | Risultato della corrispondenza | Risultato dry run | Cloud Logging |
---|---|---|---|
Solo criterio DENY |
Senza corrispondenza | consentito | dry_run_result: "AuthzAllowed" |
Con corrispondenza | rifiutato | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
|
Solo ALLOW criterio |
Senza corrispondenza | rifiutato | dry_run_result: "AuthzDenied" |
Con corrispondenza | consentito | dry_run_result: "AuthzAllowed" dry_run_policy_name: dry_run_policy_rule: |
|
Criterio sia ALLOW che DENY |
Nessuna corrispondenza | rifiutato | dry_run_result: "AuthzDenied" |
Solo norma DENY corrispondente |
rifiutato | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
|
Solo norma ALLOW corrispondente |
consentito | dry_run_result: "AuthzAllowed" dry_run_policy_name: dry_run_policy_rule: |
|
Corrispondenza con entrambe le norme | rifiutato | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
Quando hai dubbi sul risultato del dry run, puoi disattivare la modalità dry run utilizzando uno dei seguenti approcci:
Rimuovere completamente l'annotazione del trasferimento di prova.
Modifica il valore dell'annotazione di prova in
false
.
Dopo aver applicato il criterio con la modalità dry run disabilitata, Cloud Service Mesh applica il criterio.
Log dei rifiuti
Il criterio di autorizzazione nega una richiesta se non è consentita dal criterio. Per i protocolli HTTP (incluso gRPC), la richiesta viene rifiutata con il codice di stato 403. Per i protocolli non HTTP, la connessione viene terminata direttamente. Il log del traffico di Cloud Logging include informazioni aggiuntive utili per comprendere il motivo del rifiuto del traffico. Ad esempio, il log indica quanti vengono rifiutate dai criteri di autorizzazione, il che può aiutarti a determinare la regola del criterio che ha causato il rifiuto e i rifiuti dal backend un'applicazione.
Nell'esempio seguente, l'annotazione dry-run
è impostata su "false
. Quando applichi il criterio di autorizzazione DENY
, Cloud Service Mesh lo applica.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: deny-path-headers
annotations:
"istio.io/dry-run": "false"
spec:
selector:
matchLabels:
app: httpbin
action: DENY
rules:
- to:
- operation:
paths: ["/headers"]
Dopo aver applicato un criterio di autorizzazioneDENY
, puoi vedere i risultati del
in Esplora log.
Vai a Esplora log. Nell'URL seguente, sostituisci
PROJECT_ID
con l'ID del tuo progetto:https://console.cloud.google.com/logs/query?project=PROJECT_ID
Nel campo Query-builder, inserisci una query per trovare
DENY
criterio di autorizzazione. Nella query seguente, sostituisciNAMESPACE
con il tuo spazio dei nomi:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" labels.destination_namespace="NAMESPACE" labels.response_details="AuthzDenied"
Fai clic su Esegui query.
Modifica l'intervallo di tempo in base alle tue esigenze.
Il seguente screenshot mostra una voce di log in Esplora log dopo il
il criterio deny-path-headers
di esempio è stato applicato per applicare il criterio. Puoi
per capire se il criterio di autorizzazione
era responsabile dell'errore 403,
alle etichette:
Il log del traffico di Esplora log include le seguenti etichette per rifiuto dell'autorizzazione:
- response_details: viene impostato su "AuthzDenied" se il rifiuto è causato da un criterio di autorizzazione.
- policy_name: contiene lo spazio dei nomi e il nome dell'autorizzazione
Criterio
DENY
che causa il rifiuto. Il valore è nel formato<Namespace>.<Name>
, ad esempio,foo.deny-path-headers
indica criterio di autorizzazionedeny-path-headers
nello spazio dei nomifoo
. - policy_rule: contiene l'indice della regola all'interno del criterio di autorizzazione che causa il rifiuto. Ad esempio, 0 indica la prima regola all'interno del criterio.
Passaggi successivi
Per un elenco di tutti i criteri di autorizzazione nel service mesh:
kubectl get authorizationpolicy --all-namespaces
Se è in vigore un criterio di autorizzazione, puoi eliminarlo con
kubectl delete
:
kubectl delete authorizationpolicy -n NAMESPACE AUTH_POLICY_NAME
Per ulteriori informazioni su come ottenere il log del traffico, vedi Accedi ai log.