Questa pagina spiega come attivare i log di controllo dettagliati del sistema operativo sui nodi Google Kubernetes Engine che eseguono Container-Optimized OS. Questa pagina spiega anche come configurare un agente di logging fluent-bit per inviare log a Cloud Logging. L'attivazione dei log dettagliati può fornire informazioni preziose sullo stato del cluster e dei carichi di lavoro, ad esempio messaggi di errore, tentativi di accesso ed esecuzioni di file binari. Puoi utilizzare queste informazioni per eseguire il debug dei problemi o esaminare gli incidenti di sicurezza.
L'abilitazione della registrazione auditd di Linux non è supportata nei cluster GKE Autopilot, perché Google gestisce i nodi e le macchine virtuali (VM) sottostanti.
Questa pagina è destinata agli esperti di sicurezza che esaminano e analizzano i log di sicurezza. Utilizza queste informazioni per comprendere i requisiti e le limitazioni dei log del sistema operativo dettagliati e guidare l'implementazione quando li attivi sui nodi GKE. Per scoprire di più sui ruoli comuni e sulle attività di esempio a cui facciamo riferimento nei contenuti di Google Cloud , consulta Ruoli utente e attività comuni di GKE.
Prima di leggere questa pagina, assicurati di conoscere i log di controllo del sistema operativo Linux.
L'audit logging del sistema operativo è diverso da Cloud Audit Logs e Kubernetes Audit Logs.
Panoramica
Per raccogliere i log da ogni nodo di un cluster, utilizza un
DaemonSet
che esegue esattamente un pod su ogni nodo del cluster in cui il DaemonSet è idoneo
per la pianificazione. Questo pod configura il daemon di logging auditd sull'host e
configura l'agente Logging per inviare i log a Logging o a qualsiasi
altro servizio di importazione dei log.
Per definizione, il controllo viene eseguito dopo un evento ed è una misura di sicurezza retrospettiva. I log auditd da soli probabilmente non sono sufficienti per eseguire l'analisi forense sul cluster. Valuta come utilizzare al meglio la registrazione auditd nell'ambito della tua strategia di sicurezza complessiva.
Limitazioni
I meccanismi di logging descritti in questa pagina funzionano solo sui nodi che eseguono Container-Optimized OS nei cluster GKE Standard.
Come funziona il DaemonSet di logging
Questa sezione descrive il funzionamento di example logging DaemonSet in modo che tu possa configurarlo in base alle tue esigenze. La sezione successiva spiega come eseguire il deployment di DaemonSet.
Il manifest di esempio definisce un DaemonSet, un ConfigMap e uno spazio dei nomi per contenerli.
DaemonSet esegue il deployment di un pod su ogni nodo del cluster. Il pod contiene due
container. Il primo è un container
init
che avvia il servizio systemd cloud-audit-setup disponibile sui nodi Container-Optimized OS.
Il secondo container, cos-auditd-fluent-bit, contiene un'istanza di fluent-bit configurata per raccogliere i log di controllo di Linux dal journal del nodo ed esportarli in Cloud Logging.
Il DaemonSet di logging di esempio registra i seguenti eventi:
- Modifiche alla configurazione del sistema
auditd - Controlli delle autorizzazioni AppArmor
execve(),socket(),setsockopt()emmap()- connessioni di rete
- accessi utente
- Sessione SSH e tutti gli altri TTY (incluse le sessioni
kubectl exec -t)
Configura il DaemonSet di logging
Configura il DaemonSet di logging utilizzando un ConfigMap,
cos-auditd-fluent-bit-config. L'esempio fornito invia gli audit log a
Logging, ma puoi configurarlo per inviare i log ad
altre destinazioni.
Il volume di log prodotti da auditd può essere molto elevato e comportare costi aggiuntivi perché consuma risorse di sistema e invia più log rispetto alla configurazione di logging predefinita. Puoi configurare i filtri per gestire il volume
di logging:
- Puoi configurare i filtri in
cos-auditd-fluent-bit-configConfigMap in modo che determinati dati non vengano registrati. Consulta la documentazione di Fluent Bit per i filtri Grep, Modify, Record Modifier e altri. - Puoi anche configurare la registrazione per filtrare i log in entrata. Per maggiori dettagli, vedi Configurare e gestire i sink.
Esegui il deployment di DaemonSet di logging
Puoi utilizzare un cluster esistente o crearne uno nuovo.
Scarica i file manifest di esempio:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yamlModifica i manifest di esempio in base alle tue esigenze. Per informazioni dettagliate sul funzionamento di DaemonSet, consulta la sezione precedente. Tieni presente che l'immagine
fluent-bitutilizzata in questo manifest di esempio è solo a scopo dimostrativo. Come best practice, sostituisci l'immagine con un'immagine proveniente da una fonte controllata con digest SHA-256.Inizializza le variabili comuni:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGIONSostituisci quanto segue:
CLUSTER_NAME: il nome del tuo cluster.COMPUTE_REGION: la regione di Compute Engine per il cluster. Per i cluster zonali, utilizza invece la zona.
Esegui il deployment dello spazio dei nomi, del DaemonSet e di ConfigMap per la registrazione:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -Verifica che i pod di logging siano stati avviati. Se hai definito uno spazio dei nomi diverso nei manifest, sostituisci cos-auditd con il nome dello spazio dei nomi che stai utilizzando.
kubectl get pods --namespace=cos-auditdSe i pod sono in esecuzione, l'output è simile al seguente:
NAME READY STATUS RESTARTS AGE cos-auditd-logging-g5sbq 1/1 Running 0 27s cos-auditd-logging-l5p8m 1/1 Running 0 27s cos-auditd-logging-tgwz6 1/1 Running 0 27sUn pod viene deployment su ciascun nodo del cluster, in questo caso il cluster ha tre nodi.
Ora puoi accedere agli audit log in Logging. In Esplora log, filtra i risultati utilizzando la seguente query:
LOG_ID("linux-auditd") resource.labels.cluster_name = "CLUSTER_NAME" resource.labels.location = "COMPUTE_REGION"In alternativa, puoi utilizzare gcloud CLI (utilizza
--limitperché il set di risultati può essere molto grande):gcloud logging read --limit=100 "LOG_ID("linux-auditd") AND resource.labels.cluster_name = "${CLUSTER_NAME}" AND resource.labels.location = "${CLUSTER_LOCATION}""
Esporta log
Per scoprire come instradare i log verso destinazioni supportate, consulta Configurare e gestire i sink.
Disattiva log
Per disattivare la registrazione auditd sui nodi, elimina il DaemonSet di registrazione e
poi esegui il deployment del
DaemonSet cos-auditd-logging-disable per ripristinare le modifiche del servizio systemd su ogni nodo. Dopo aver eseguito il deployment
di questo DaemonSet, non puoi abilitare la registrazione auditd a meno che i nodi non vengano ricreati.
Elimina il DaemonSet di logging originale e le risorse correlate:
kubectl delete daemonset cos-auditd-logging -n cos-auditd kubectl delete configmap fluent-bit-config -n cos-auditd # The namespace will be deleted by the cleanup daemonset's namespace definitionApplica il DaemonSet di pulizia cos-auditd-logging-disable:
kubectl apply -f 'https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/troubleshooting/os-audit/cos-auditd-logging-disable.yaml'Verifica che i pod
cleanup-auditdsiano in esecuzione su tutti i nodi:kubectl get pods -n cos-auditd -l name=cleanup-auditd -wAttendi che tutti i pod mostrino
Running.Dopo l'esecuzione dei pod di pulizia, verifica che non vengano generati nuovi log
linux-auditdeseguendo le query della sezione Deployment di DaemonSet di logging. Ad esempio, puoi utilizzare il seguente comando gcloud CLI:gcloud logging read --limit=10 --freshness="5m" \ "LOG_ID(\"linux-auditd\") AND \ resource.labels.cluster_name = \"${CLUSTER_NAME}\" AND \ resource.labels.location = \"${CLUSTER_LOCATION}\""Questo comando controlla i log degli ultimi cinque minuti. Se la pulizia è andata a buon fine, l'output è vuoto.
Allo stesso modo, quando utilizzi Cloud Explorer con lo stesso filtro, non dovresti visualizzare nuove voci di log dopo l'ora di pulizia.
Elimina il DaemonSet e lo spazio dei nomi di pulizia:
kubectl delete -f cleanup-auditd-daemonset.yamlQuesto comando eliminerà sia il DaemonSet che lo spazio dei nomi
cos-auditd.
Passaggi successivi
- Guarda Cloud Forensics 101 per iniziare a utilizzare la forense cloud.
- Scopri di più su Kubernetes Audit Logging e sulle norme di controllo.
- Leggi la panoramica della sicurezza di Kubernetes Engine.
- Scopri di più su Cloud Audit Logs.