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.

  1. Vai a Esplora log. Nell'URL seguente, 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 policy di autorizzazione in modalità dry run. 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 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:

immagine

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.

  1. Vai a Esplora log. Nell'URL seguente, 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 policy di autorizzazione DENY. 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 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:

immagine

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 DENY che causa il rifiuto. Il valore è nel formato <Namespace>.<Name>, ad esempio foo.deny-path-headers indica la policy di autorizzazione deny-path-headers nello spazio dei nomi foo.
  • 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.