Configurazione dei criteri di audit per i tuoi servizi
Questo tutorial supporta solo l'implementazione del control plane in-cluster .
Un criterio di audit ti consente di controllare l'accesso ai dati dei tuoi servizi in Cloud Service Mesh. L'audit dei servizi ti aiuta a rispondere alle domande "chi ha fatto cosa, quando e, possibilmente, perché". Con un criterio di audit, puoi specificare quando viene creato un audit log e il contenuto dei log. Questa guida spiega come installare Cloud Service Mesh in modo da poter utilizzare un criterio di audit.
Poiché visualizzi gli audit log in Esplora log di Cloud Logging nella Google Cloud console, i criteri di audit 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 audit estende
AuthorizationPolicy
aggiungendo un'azione AUDIT. Ha effetto solo nell'ambito del criterio di destinazione (che può essere un workload, uno spazio dei nomi o l'intero mesh). I criteri vengono ORed insieme, ovvero una richiesta viene registrata se un criterio lo prevede. Se nessun criterio di audit si applica a un determinato workload, non viene generato alcun audit log per quel workload.
Di seguito è riportato un esempio di criterio di audit per controllare tutti gli accessi WRITE 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 esiste un audit log su ingress-gateway.
- Il contenuto dell'audit non è configurabile.
- Attualmente, gli audit log di Cloud Service Mesh hanno la stessa proprietà di affidabilità dei normali access log. Ad esempio, se un pod di workload viene riavviato, alcuni audit log per il workload, se non persistenti, possono essere persi.
Prima di iniziare
Segui i passaggi descritti in Installa strumenti dipendenti e convalida il cluster per:- Installare gli strumenti richiesti
- Scaricare
asmcli - Concedere le autorizzazioni amministrative del cluster
- Convalidare il progetto e il cluster
Prepara la configurazione del gateway
Cloud Service Mesh ti offre la possibilità di eseguire il deployment dei gateway e di gestirli all'interno del mesh di servizi. Un gateway descrive un bilanciatore del carico che opera al limite del mesh e riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono proxy Envoy che 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 separatamente il control plane e i gateway. Per ulteriori
informazioni, consulta Installazione e upgrade dei gateway.
Personalizzazione dell'installazione di Cloud Service Mesh
Per utilizzare un criterio di audit, personalizza l'installazione di Cloud Service Mesh:
Installazioni
Segui i passaggi descritti in Installare Cloud Service Mesh. Quando esegui
asmcli install, includi la seguente opzione:--option audit-authorizationpolicyAd 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-authorizationpolicyAssicurati di specificare tutti gli altri file di overlay necessari per configurare Cloud Service Mesh.
Completa l'installazione di Cloud Service Mesh per abilitare l'inserimento automatico del proxy sidecar sui workload. Vedi Eseguire il deployment e il nuovo deployment dei workload.
Upgrade
Segui i passaggi descritti in Eseguire l'upgrade di Cloud Service Mesh. Quando esegui
asmcli install, includi la seguente opzione:--option audit-authorizationpolicyAd 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-authorizationpolicyAssicurati di specificare tutti gli altri file di overlay necessari per configurare Cloud Service Mesh.
Completa l'installazione di Cloud Service Mesh per abilitare l'inserimento automatico del proxy sidecar sui workload. Per maggiori dettagli, vedi Passare al nuovo control plane.
Utilizzo dell'audit logging
Questa sezione utilizza l'esempio Bookinfo per mostrare come utilizzare l'audit logging.
Esegui il deployment dell' applicazione di esempio Bookinfo nello spazio dei nomi predefinito.
Ottieni l'indirizzo IP esterno del gateway in entrata e invia richieste all'applicazione di esempio per generare traffico moderato.
Nella Google Cloud console, vai al menu di navigazione e seleziona Logging > Esplora log:
Seleziona un Google Cloud progetto.
Poiché non hai ancora eseguito il deployment di un criterio di audit, non saranno presenti audit log. Tieni presente che l'audit log è diverso dall'access log. Per visualizzare
stackdriveraccess log, inserisci la seguente query nel campo Generatore di query e fai clic su Esegui query:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"Per ulteriori informazioni sull'utilizzo di Esplora log, vedi Panoramica di Esplora log.
Configurazione del criterio di audit e controllo degli audit log
Questa sezione fornisce diverse opzioni per l'audit dell'applicazione Bookinfo. Dopo aver eseguito il deployment del criterio di audit, puoi inviare alcune richieste e poi controllare l'audit log in Esplora log.
Inserisci il comando seguente per ottenere le credenziali di autenticazione per interagire con il cluster. Questo comando imposta anche il contesto attuale di
kubectlsul cluster.gcloud container clusters get-credentials CLUSTER_NAME \ --project=PROJECT_ID \ --zone=CLUSTER_LOCATIONApplica il seguente criterio di audit per controllare le richieste
GETal 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"] EOFInvia alcune richieste a Bookinfo.
In Esplora log, inserisci la seguente query nel campo Generatore di query, e fai clic su Esegui query:
logName="projects/PROJECT_ID/logs/server-istio-audit-log"La query restituisce log simili ai seguenti:

Applica il seguente criterio per controllare le richieste al servizio
bookinfo-ratings. I criteri di audit sono cumulativi. Dopo aver applicato il seguente criterio, vedrai gli audit log 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"] EOFIl nuovo criterio di audit deve essere propagato prima di entrare in vigore.
Invia almeno 10 richieste a Bookinfo per assicurarti di raggiungere il servizio di valutazione, quindi controlla l'audit log in Esplora log. L'audit log è simile al seguente:

Applica il seguente criterio di audit 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: - {} EOFInvia altre richieste a Bookinfo, quindi controlla l'audit log in Esplora log. L'audit log ora registra tutte le richieste:

Se vuoi limitare di nuovo il criterio di audit a ProductPage e Ratings, puoi eliminare il criterio
audit-all:kubectl delete authorizationpolicy audit-all -n default
Risoluzione dei problemi
Se non vedi audit log dopo aver abilitato un criterio di audit, ecco alcune cose che puoi controllare:
Assicurati che ci sia traffico per il periodo di tempo specificato in Esplora log. Se stai eseguendo il test con Bookinfo, puoi inviare richieste eseguendo più volte il comando seguente:
curl -s http://EXTERNAL_IP/productpage | grep BookstoreControlla se esiste un
AuthorizationPolicysul gateway in entrata che blocca le richieste al servizio sottoposto ad audit.Controlla gli access log
stackdrivercon il seguente filtro in Esplora log per verificare se le richieste hanno raggiunto l'applicazione:logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"
Per assicurarti che Stackdriver sia configurato e che l'audit log sia abilitato, esegui il dump della configurazione dello stato attuale di
istiod. Inconfig_dump, cercaenable_audit_loge il nome del criterio di audit.istioctl dashboard envoy POD_NAME.NAMESPACE

Per assicurarti che le richieste corrispondano alle regole dei criteri di audit, puoi controllare i log di debug del controllo dell'accesso basato sui ruoli (RBAC). Attiva il logging di debug RBAC con il comando seguente:
kubectl exec POD_NAME -n NAMESPACE -c istio-proxy -- pilot-agent request POST 'logging?rbac=debug'Invia alcune richieste, quindi controlla i log del pod con il comando
kubectl logs:kubectl logs POD_NAME -n NAMESPACE -c istio-proxy