Configura le funzionalità avanzate della policy di autorizzazione
La policy di autorizzazione di Cloud Service Mesh fornisce il controllo dell'accesso a livello di mesh, spazio dei nomi e workload per i workload nel mesh. Questa pagina descrive in dettaglio la configurazione delle funzionalità avanzate della policy di autorizzazione di Cloud Service Mesh, tra cui la modalità dry run e il logging dei rifiuti. Le funzionalità descritte in questa pagina presuppongono che tu abbia familiarità con i concetti fondamentali relativi alle policy di autorizzazione e descritti in Panoramica delle policy di autorizzazione.
Modalità dry run
La policy di autorizzazione Cloud Service Mesh supporta la modalità dry run, che consente di testare una policy di autorizzazione con il traffico di produzione reale senza applicarlo. La modalità dry run consente di comprendere meglio l'effetto di una policy di autorizzazione prima di applicarla. Ciò contribuisce a ridurre il rischio di interruzione del traffico di produzione causata da una policy di autorizzazione errata.
Utilizza l'annotazione "istio.io/dry-run": "true" nella policy di autorizzazione
per impostarla in modalità dry run.
Esempio di modalità dry run
L'esempio seguente (deny-path-headers) mostra
una policy con l'annotazione dry-run impostata su "true. La policy di autorizzazione
nega 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 una policy di autorizzazione in modalità dry run, Cloud Service Mesh registra il risultato dell'applicazione forzata in Cloud Logging, ma non applica la policy. La richiesta è sempre consentita e puoi controllare Esplora log per decidere se la policy di autorizzazione funziona come previsto.
Dettagli del logging dry run
Dopo aver applicato una policy di autorizzazione in modalità dry run, puoi visualizzare i risultati della policy in Esplora log.
Vai a Esplora log. Nell'URL seguente, sostituisci
PROJECT_IDcon il tuo ID progetto:https://console.cloud.google.com/logs/query?project=PROJECT_IDNel campo Query Builder, inserisci una query per trovare la policy di autorizzazione in modalità dry run. Nella query seguente, sostituisci
NAMESPACEcon 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 esigenze.
Lo screenshot seguente mostra le etichette dry run nel log del traffico in
Esplora log dopo l'applicazione della policy deny-path-headers di esempio:

La modalità dry run supporta le policy di autorizzazione ALLOW e DENY, oltre ai
risultati dry run di Istio.
Cloud Service Mesh archivia i risultati della simulazione in Cloud Logging nelle seguenti etichette:
- dry_run_result: il risultato dry run è "AuthzAllowed" o "AuthzDenied".
- dry_run_policy_name: lo spazio dei nomi e il nome della policy di autorizzazione corrispondente che prende la decisione dry run.
- dry_run_policy_rule: l'indice della regola della policy di autorizzazione corrispondente che ha determinato la decisione dry run.
La tabella seguente mostra i dettagli registrati per una policy di autorizzazione in modalità dry run:
| Policy di autorizzazione applicata in modalità dry run | Risultato corrispondente | Risultato dry run | Cloud Logging |
|---|---|---|---|
Solo policy DENY |
Non corrispondente | consentita | dry_run_result: "AuthzAllowed" |
| Corrispondente | rifiutata | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
|
Solo policy ALLOW |
Non corrispondente | rifiutata | dry_run_result: "AuthzDenied" |
| Corrispondente | consentita | dry_run_result: "AuthzAllowed" dry_run_policy_name: dry_run_policy_rule: |
|
Policy ALLOW e DENY |
Nessuna corrispondente | rifiutata | dry_run_result: "AuthzDenied" |
Solo policy DENY corrispondente |
rifiutata | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
|
Solo policy ALLOW corrispondente |
consentita | dry_run_result: "AuthzAllowed" dry_run_policy_name: dry_run_policy_rule: |
|
| Entrambe le policy corrispondenti | rifiutata | dry_run_result: "AuthzDenied" dry_run_policy_name: dry_run_policy_rule: |
Quando hai la certezza del risultato dry run, puoi disabilitare la modalità dry run utilizzando uno dei seguenti approcci:
Rimuovi completamente l'annotazione del trasferimento dry run.
Modifica il valore dell'annotazione dry run impostandolo su
false.
Dopo aver applicato la policy con la modalità dry-run disabilitata, Cloud Service Mesh la applica.
Logging dei rifiuti
La policy di autorizzazione nega una richiesta se non è consentita dalla policy. 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 capire perché il traffico viene negato. Ad esempio, il log indica il numero di richieste rifiutate dalla policy di autorizzazione, il che può aiutarti a determinare quale regola della policy ha causato il rifiuto rispetto ai rifiuti dell'applicazione backend.
Nell'esempio seguente, l'annotazione dry-run è impostata su "false. Quando
applichi la policy di autorizzazione DENY, Cloud Service Mesh la 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 una policy di autorizzazioneDENY, puoi visualizzare i risultati della policy in Esplora log.
Vai a Esplora log. Nell'URL seguente, sostituisci
PROJECT_IDcon il tuo ID progetto:https://console.cloud.google.com/logs/query?project=PROJECT_IDNel campo Query Builder, inserisci una query per trovare la policy di autorizzazione
DENY. Nella query seguente, sostituisciNAMESPACEcon 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 esigenze.
Lo screenshot seguente mostra una voce di log in Esplora log dopo l'applicazione della
policy deny-path-headers di esempio per applicare in modo forzato la policy. Per capire se il codice 403 è dovuto alla policy di autorizzazione, esamina le etichette:

Il log del traffico di Esplora log include le seguenti etichette per il rifiuto dell'autorizzazione:
- response_details: è impostato su "AuthzDenied" se il rifiuto è causato da una policy di autorizzazione.
- policy_name: contiene lo spazio dei nomi e il nome della policy di autorizzazione
DENYche causa il rifiuto. Il valore è nel formato<Namespace>.<Name>, ad esempiofoo.deny-path-headersindica la policy di autorizzazionedeny-path-headersnello spazio dei nomifoo. - policy_rule: contiene l'indice della regola all'interno della policy di autorizzazione che causa il rifiuto, ad esempio 0 indica la prima regola all'interno della policy.
Passaggi successivi
Per un elenco di tutte le policy di autorizzazione nel mesh di servizi:
kubectl get authorizationpolicy --all-namespaces
Se è applicata una policy di autorizzazione, puoi eliminarla con
kubectl delete:
kubectl delete authorizationpolicy -n NAMESPACE AUTH_POLICY_NAME
Per saperne di più su come ottenere il log del traffico, consulta Log di accesso.