In questa pagina viene spiegato come attivare il controllo dettagliato del sistema operativo attiva Nodi di Google Kubernetes Engine in esecuzione Container-Optimized OS. Questa pagina spiega anche come configurare un agente di logging fluent-bit per inviare i log in Cloud Logging. L'abilitazione dell'audit log di Linux non è supportata in GKE Autopilot, perché Google gestisce i nodi e le macchine virtuali (VM) sottostanti.
L'audit logging del sistema operativo è diverso Cloud Audit Logs e Audit log di Kubernetes.
Panoramica
I log del sistema operativo sui nodi forniscono informazioni preziose sullo stato del cluster e dei carichi di lavoro, come messaggi di errore, tentativi di accesso esecuzioni binarie. Puoi usare queste informazioni per risolvere i problemi o indagare incidenti di sicurezza.
Per raccogliere i log da ciascun nodo in un cluster, utilizza una
DaemonSet
che esegue esattamente un pod su ciascun nodo del cluster in cui il DaemonSet è idoneo.
da pianificare. Questo pod configura il daemon di logging auditd
sull'host e
configura l'agente Logging per l'invio dei log a Logging o a qualsiasi
di un altro servizio di importazione di log.
Per definizione, il controllo avviene dopo un evento ed è una sicurezza post mortem. misurare. i log controllati da soli non sono probabilmente sufficienti per condurre analisi sul tuo cluster. Valuta come utilizzare al meglio i log controllati nell'ambito della tua attività in generale strategia di sicurezza.
Limitazioni
I meccanismi di logging descritti in questa pagina funzionano solo sui nodi in esecuzione Container-Optimized OS nei cluster GKE Standard.
Come funziona il DaemonSet di logging
In questa sezione viene descritto come DaemonSet di logging di esempio in modo che tu possa configurarlo in base alle tue esigenze. La prossima sezione spiega come eseguire il deployment del DaemonSet.
Il manifest di esempio definisce un oggetto DaemonSet, un ConfigMap e uno spazio dei nomi che li contengono.
Il DaemonSet esegue il deployment di un pod su ciascun nodo del cluster. Il pod contiene due
containerizzati. Il primo è un file init
container
che avvia il servizio systemd cloud-audit-setup disponibile
Nodi di Container-Optimized OS.
Il secondo container,
cos-auditd-fluent-bit
, contiene un'istanza di
fluent-bit che è configurato
per raccogliere gli audit log Linux dal journal dei nodi ed esportarli in
in Cloud Logging.
L'esempio di logging DaemonSet registra i seguenti eventi:
auditd
modifiche alla configurazione di sistema- Controlli delle autorizzazioni AppArmor
execve()
,socket()
,setsockopt()
emmap()
esecuzioni- connessioni di rete
- accessi utente
- Sessione SSH e tutte le altre TTY (incluse le sessioni
kubectl exec -t
)
Configurazione del DaemonSet di logging
Configuri il DaemonSet di logging utilizzando un ConfigMap,
cos-auditd-fluent-bit-config
. L'esempio fornito invia gli audit log
Logging, ma puoi configurarlo in modo che invii i log a
per altre destinazioni.
Il volume dei log prodotti da auditd
può essere molto grande e potrebbe richiedere
costi aggiuntivi in quanto consuma risorse di sistema e invia più log rispetto
la configurazione predefinita del logging. Puoi configurare i filtri per gestire il logging
volume:
- Puoi impostare i filtri nel
cos-auditd-fluent-bit-config
ConfigMap in modo che determinati dati non vengano registrati. Consulta le documentazione fluent-bit per Grep, Modifica, Modificatore record e altri filtri. - Puoi anche configurare Logging per filtrare i log in entrata. Per ulteriori informazioni consulta Configurare e gestire i sink.
Deployment del DaemonSet di logging
Puoi utilizzare un cluster esistente o crearne uno nuovo.
Scarica i manifest di esempio:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yaml
Modifica i manifest di esempio in base alle tue esigenze. Consulta le sezione precedente per i dettagli su come funziona il DaemonSet.
Inizializza le variabili comuni:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGION
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del tuo cluster.COMPUTE_REGION
: il Compute Engine region per il tuo cluster. Per cluster di zona, usa la zona.
Esegui il deployment dello spazio dei nomi di logging, del DaemonSet e del ConfigMap:
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-auditd
Se 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 27s
Viene eseguito il deployment di un pod 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
--limit
perché 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}""
Esportazione dei log
Per scoprire come eseguire il routing dei log alle destinazioni supportate, consulta Configura e gestisci i sink.
Esegui la pulizia
Per disabilitare il logging di auditd
, elimina il DaemonSet di logging e
riavvia i nodi. La configurazione dell'audit viene bloccata una volta abilitata e può essere eseguita solo
modificato ricreando il nodo.
Elimina dal cluster il DaemonSet, il ConfigMap e il relativo spazio dei nomi:
kubectl delete -f cos-auditd-logging.yaml
Riavvia i nodi del cluster. Per prima cosa, ottieni il gruppo di istanze a cui appartengono:
instance_group=$(gcloud compute instance-groups managed list \ --format="value(name)" \ --filter=${CLUSTER_NAME})
Quindi ottieni le istanze stesse:
instances=$(gcloud compute instance-groups managed list-instances ${instance_group} \ --format="csv(instance)[no-heading][terminator=',']")
Infine, ricrea le istanze:
gcloud compute instance-groups managed recreate-instances ${instance_group} \ --instances=${instances}
Passaggi successivi
- Guarda il video Cloud Forensics 101 per per muovere i primi passi con le analisi forensi del cloud.
- Scopri di più sull'audit logging di Kubernetes e sui criteri di controllo.
- Leggi la Panoramica sulla sicurezza di Kubernetes Engine.
- Scopri di più su Cloud Audit Logs.