Configurazione dei criteri di audit per i tuoi servizi

Questo tutorial supporta solo l'implementazione del piano di controllo all'interno del cluster.

Un criterio di controllo ti consente di controllare l'accesso ai dati ai tuoi servizi in Cloud Service Mesh. L'audit dei tuoi servizi ti aiuta a rispondere alle domande "chi ha fatto cosa, quando e, eventualmente, perché". Con un criterio di controllo, puoi specificare quando viene creato un audit log e i relativi contenuti. Questa guida spiega come installare Cloud Service Mesh per usare un criterio di controllo.

Poiché visualizzi gli audit log nella Cloud Logging Esplora log nella console Google Cloud, controllo sono supportati solo sulle seguenti piattaforme:

  • GKE su Google Cloud
  • Google Distributed Cloud (solo software) per VMware
  • Google Distributed Cloud (solo software) per bare metal

Un criterio di controllo estende AuthorizationPolicy aggiungendo un'azione AUDIT. Viene applicato solo nell'ambito del criterio di destinazione (che può essere un carico di lavoro, uno spazio dei nomi o l'intero mesh). I criteri sono ORed insieme, ovvero una richiesta viene registrata se lo prevede un criterio. Se a un determinato carico di lavoro non viene applicato alcun criterio di controllo, non viene generato alcun log di controllo per quel carico di lavoro.

Ecco un esempio di criterio di controllo per controllare tutti gli accessi in scrittura al percorso/user/profile/* in myapi:

  apiVersion: security.istio.io/v1beta1
  kind: AuthorizationPolicy
  metadata:
    namespace: ns1
    name: anyname
  spec:
    selector:
      matchLabels:
        app: myapi
    action: AUDIT
    rules:
    - to:
      - operation:
          methods: ["POST", "UPDATE", "DELETE"]
          paths: ["/user/profile/*"]

Limitazioni

  • Non è presente alcun log di controllo su ingress-gateway.
  • I contenuti del controllo non sono configurabili.
  • Attualmente, gli audit log di Cloud Service Mesh hanno la stessa proprietà di affidabilità dei normali log di accesso. Ad esempio, se il pod di un carico di lavoro viene riavviato, alcuni log di controllo per il carico di lavoro, se non resi persistenti, possono andare persi.

Prima di iniziare

Segui i passaggi descritti in Installare gli strumenti dipendenti e convalidare il cluster per:

Prepara la configurazione del gateway

Cloud Service Mesh ti offre la possibilità di eseguire il deployment e gestire i gateway all'interno del tuo mesh di servizi. Un gateway descrive un bilanciatore del carico che opera a livello perimetrale mesh che riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono proxy Envoy che ti offrono un controllo granulare sul traffico in entrata e in uscita dal mesh.

asmcli non installa istio-ingressgateway. Ti consigliamo di eseguire il deployment e gestire il piano di controllo e i gateway separatamente. Per maggiori informazioni consulta Installazione e upgrade dei gateway.

Personalizzazione dell'installazione di Cloud Service Mesh

Per utilizzare un criterio di controllo, personalizza l'installazione di Cloud Service Mesh:

Installazioni

  1. Segui i passaggi in Installa Cloud Service Mesh. Quando esegui asmcli install, includi la seguente opzione:

    --option audit-authorizationpolicy
    

    Ad esempio:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name CLUSTER_NAME \
      --cluster_location CLUSTER_LOCATION \
      --ca mesh_ca \
      --output_dir DIR_PATH  \
      --enable_all \
      --option audit-authorizationpolicy
    

    Assicurati di specificare eventuali altri file overlay necessari per configurare Cloud Service Mesh.

  2. Completa l'installazione di Cloud Service Mesh per abilitare l'inserimento di proxy sidecar sui carichi di lavoro. Consulta: Esegui il deployment e riesegui il deployment dei carichi di lavoro.

Upgrade

  1. Segui i passaggi in Esegui l'upgrade di Cloud Service Mesh. Quando esegui asmcli install, includi la seguente opzione:

    --option audit-authorizationpolicy
    

    Ad esempio:

    ./asmcli install \
      --project_id PROJECT_ID \
      --cluster_name CLUSTER_NAME \
      --cluster_location CLUSTER_LOCATION \
      --ca mesh_ca \
      --output_dir DIR_PATH  \
      --enable_all \
      --option audit-authorizationpolicy
    

    Assicurati di specificare eventuali altri file overlay necessari per configurare Cloud Service Mesh.

  2. Completa l'installazione di Cloud Service Mesh per abilitare l'iniezione automatica di proxy sidecar nei tuoi carichi di lavoro. Per maggiori dettagli, consulta Passare al nuovo control plane

Utilizzo dell'audit logging

Questa sezione utilizza l'esempio Bookinfo per dimostrare come utilizzare la registrazione degli audit.

  1. Esegui il deployment dell'applicazione di esempio Bookinfo predefinito.

  2. Ottieni l'indirizzo IP esterno del gateway in entrata e invia richieste all'applicazione di esempio per generare del traffico.

  3. Nella console Google Cloud, vai al menu di navigazione e selezionare Logging > Esplora log:

    Vai a Esplora log

  4. Seleziona un progetto Google Cloud.

  5. Poiché non hai ancora implementato un criterio di controllo, non ci saranno audit log. Tieni presente che il log di controllo è diverso dal log degli accessi. Per visualizzare i log di accesso stackdriver, inserisci la seguente query nel campo Query builder e fai clic su Esegui query:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    Per ulteriori informazioni sull'utilizzo di Esplora log, consulta Panoramica di Esplora log.

Configurazione del criterio di controllo e controllo degli audit log

Questa sezione fornisce diverse opzioni per la verifica dell'applicazione Bookinfo. Dopo aver eseguito il deployment del criterio di controllo, puoi inviare alcune richieste e quindi controllare in Esplora log.

  1. Inserisci il seguente comando per ottenere credenziali di autenticazione di interagire con il cluster. Questo comando imposta anche il contesto corrente per kubectl sul cluster.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --project=PROJECT_ID \
        --zone=CLUSTER_LOCATION
    
  2. Applica il seguente criterio di controllo per controllare le richieste GET alla Percorso /productpage:

    kubectl apply -f - << EOF
    apiVersion: "security.istio.io/v1beta1"
    kind: "AuthorizationPolicy"
    metadata:
      name: "audit-productpage"
      namespace: default
    spec:
      action: AUDIT
      rules:
      - to:
        - operation:
            methods: ["GET"]
            paths: ["/productpage"]
    EOF
    
  3. Invia alcune richieste a Bookinfo.

  4. In Esplora log, inserisci la seguente query nel campo Query Builder: e fai clic su Esegui query:

    logName="projects/PROJECT_ID/logs/server-istio-audit-log"
    

    La query restituisce log simili ai seguenti:

    immagine

  5. Applica il seguente criterio per le richieste di controllo a bookinfo-ratings completamente gestito di Google Cloud. I criteri di audit sono cumulativi. Dopo aver applicato quanto segue vedi i log di controllo per le richieste a ProductPage e Ratings.

    kubectl apply -f - << EOF
    apiVersion: "security.istio.io/v1beta1"
    kind: "AuthorizationPolicy"
    metadata:
      name: "audit-ratings"
      namespace: default
    spec:
      action: AUDIT
      rules:
      - from:
        - source:
            principals: ["cluster.local/ns/default/sa/bookinfo-ratings"]
        to:
        - operation:
            methods: ["GET"]
    EOF
    

    Il nuovo criterio di controllo deve essere propagato prima di essere applicato.

  6. Invia almeno 10 richieste a Bookinfo per assicurarti di raggiungere il servizio di valutazione, quindi controlla il log di controllo in Esplora log. L'audit log simile al seguente:

    immagine

  7. Applica il seguente criterio di controllo a tutti i servizi nello spazio dei nomi predefinito.

    kubectl apply -f - << EOF
    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      namespace: default
      name: "audit-all"
    spec:
      action: AUDIT
      rules:
        - {}
    EOF
    
  8. Invia altre richieste a Bookinfo, quindi controlla il log di controllo Esplora log. Il log di controllo ora registra tutte le richieste:

    immagine

  9. Se vuoi limitare il criterio di controllo a ProductPage e Ratings, puoi eliminare il criterio audit-all:

    kubectl delete authorizationpolicy audit-all -n default
    

Risoluzione dei problemi

Se non visualizzi alcun log di controllo dopo aver attivato un criterio di controllo, ecco alcune cose che puoi controllare:

  1. Assicurati che ci sia traffico per il periodo di tempo specificato in Esplora log. Se esegui il test con Bookinfo, puoi inviare richieste eseguendo più volte il seguente comando:

    curl -s http://EXTERNAL_IP/productpage | grep Bookstore
    
  2. Controlla se nel gateway di ingresso è presente un AuthorizationPolicy che blocca le richieste al servizio sottoposto a controllo.

  3. Controlla i log di accesso stackdriver con il seguente filtro in Logs Explorer per verificare se le richieste hanno raggiunto l'applicazione:

    logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
    

    immagine

  4. Per assicurarti che Stackdriver sia configurato e che l'audit log sia abilitato, esegui il dump della configurazione dello stato attuale di istiod. Nella ricerca config_dump, cerca enable_audit_log e i criteri di controllo. nome.

    istioctl dashboard envoy POD_NAME.NAMESPACE
    

    immagine immagine immagine

  5. Per assicurarti che le tue richieste corrispondano alle regole dei criteri di controllo, puoi: Controllare i log di debug del controllo degli accessi basato su ruoli (RBAC, Role-Based Access Control). Attiva la registrazione di debug RBAC con il seguente comando:

    kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'
    
  6. Invia alcune richieste, quindi controlla i log del pod con Comando kubectl logs:

    kubectl logs POD_NAME -n NAMESPACE -c istio-proxy
    

Passaggi successivi