Configurazione delle funzionalità avanzate dei criteri di autorizzazione

Il criterio di autorizzazione di Cloud Service Mesh fornisce mesh, spazio dei nomi e dell'controllo 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à dry run, che consente di testare 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 ridurrai il rischio di danneggiare generato da un criterio di autorizzazione non corretto.

Utilizzi l'annotazione "istio.io/dry-run": "true" nel criterio di autorizzazione per passare alla modalità dry run.

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 nega le richieste al percorso headers e autorizza 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à dry run, Cloud Service Mesh registra le risultato dell'applicazione forzata per Cloud Logging, ma non per applicare i criteri. La richiesta è sempre consentita e puoi verificare Esplora log per decidere se il criterio di autorizzazione funziona o meno come previsto.

Dettagli logging dry run

Dopo aver applicato un criterio di autorizzazione in modalità dry run, puoi vedere i risultati del criterio in Esplora log.

  1. Vai a Esplora log. Nel seguente URL, sostituisci PROJECT_ID con il tuo ID progetto:

    https://console.cloud.google.com/logs/query?project=PROJECT_ID
    
  2. Nel campo Query-builder, inserisci una query per trovare la modalità dry run criterio di autorizzazione. Nella query seguente, 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"
    
  3. Fai clic su Esegui query.

  4. 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:

immagine

La modalità dry run supporta i criteri di autorizzazione ALLOW e DENY, oltre a alla 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 prendere la decisione di prova.

La tabella seguente mostra i dettagli registrati per un'autorizzazione in modalità dry run:

Criterio di autorizzazione applicato in modalità dry run Risultato della corrispondenza Risultato dry run Cloud Logging
Solo DENY criterio 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"
Corrisponde solo alla norma DENY rifiutato dry_run_result: "AuthzDenied"
dry_run_policy_name: .
dry_run_policy_rule:
Corrisponde solo alla norma ALLOW consentito dry_run_result: "AuthzAllowed"
dry_run_policy_name: .
dry_run_policy_rule:
Corrisponde a 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:

  • Rimuovi completamente l'annotazione dry run; o

  • 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 rifiuta 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. La Il log del traffico di Cloud Logging include informazioni aggiuntive utili per: a capire perché il traffico viene rifiutato. 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 applicare 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.

  1. Vai a Esplora log. Nel seguente URL, sostituisci PROJECT_ID con il tuo ID progetto:

    https://console.cloud.google.com/logs/query?project=PROJECT_ID
    
  2. Nel campo Query-builder, inserisci una query per trovare DENY criterio di autorizzazione. Nella query seguente, sostituisci NAMESPACE con il tuo spazio dei nomi:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver" labels.destination_namespace="NAMESPACE" labels.response_details="AuthzDenied"
    
  3. Fai clic su Esegui query.

  4. 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, in corrispondenza delle etichette:

immagine

Il log del traffico di Esplora log include le seguenti etichette per rifiuto dell'autorizzazione:

  • response_details: è impostata 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 la negazione. Il valore è nel formato <Namespace>.<Name>, ad esempio, foo.deny-path-headers indica criterio di autorizzazione deny-path-headers nello spazio dei nomi foo.
  • policy_rule: contiene l'indice della regola all'interno della sezione criterio di autorizzazione che causa il rifiuto, ad esempio 0 significa che la prima regola all'interno del criterio.

Passaggi successivi

Per un elenco di tutti i criteri di autorizzazione nel mesh di servizi:

kubectl get authorizationpolicy --all-namespaces

Se è in vigore un criterio di autorizzazione, puoi eliminarlo utilizzando kubectl delete:

kubectl delete authorizationpolicy -n NAMESPACE AUTH_POLICY_NAME

Per ulteriori informazioni su come ottenere il log del traffico, vedi Accedi ai log.