En esta página, se explica cómo habilitar los registros de auditoría del sistema operativo detallados en los nodos de Google Kubernetes Engine que ejecutan Container-Optimized OS. En esta página, también se explica cómo configurar un agente de Logging de fluent-bit para enviar registros a Cloud Logging. Los clústeres de GKE Autopilot no admiten la habilitación del registro auditd de Linux, ya que Google administra los nodos y las máquinas virtuales (VMs) subyacentes.
El registro de auditoría del sistema operativo es distinto de los Registros de auditoría de Cloud y los registros de auditoría de Kubernetes.
Descripción general
Los registros del sistema operativo en tus nodos proporcionan información valiosa sobre el estado del clúster y las cargas de trabajo, como los mensajes de error, los intentos de acceso y las ejecuciones binarias. Puedes usar esta información para depurar problemas o investigar incidentes de seguridad.
Para recopilar registros de cada nodo en un clúster, usa un DaemonSet que ejecute exactamente un Pod en cada uno de los nodos del clúster en los que el DaemonSet cumple los requisitos para ser programado. Este Pod configura el daemon de registro auditd
en el host y configura el agente de Logging para enviar los registros a Logging o a cualquier otro servicio de transferencia de registros.
Por definición, la auditoría ocurre después de un evento y es una medida de seguridad post mortem. Es probable que los registros auditd, por sí solos, no sean suficientes para detectar intrusiones en tu clúster. Considera cómo usar mejor el registro auditd como parte de tu estrategia general de seguridad.
Limitaciones
Los mecanismos de registro que se describen en esta página solo funcionan en nodos que ejecutan Container-Optimized OS en clústeres de GKE Standard.
Funcionamiento del DaemonSet de registro
En esta sección, se describe cómo funciona el registro de ejemplo de DaemonSet a fin de que puedas configurarlo según tus necesidades. En la siguiente sección, se explica cómo implementar DaemonSet.
En el manifiesto de ejemplo, se define un DaemonSet, un ConfigMap y un Namespace para contenerlos.
El DaemonSet implementa un pod en cada nodo del clúster. El pod contiene dos contenedores. El primero es un contenedor init que inicia el servicio cloud-audit-setup de systemd en los nodos de Container-Optimized OS.
El segundo contenedor, cos-auditd-fluent-bit
, contiene una instancia de fluent-bit que está configurada para recopilar los registros de auditoría de Linux del diario de nodos y exportarlos a Cloud Logging.
El DaemonSet del registro de ejemplo registra los siguientes eventos:
- Modificaciones de configuración del sistema de
auditd
- Comprobaciones de permisos de AppArmor
- Ejecuciones
execve()
,socket()
,setsockopt()
ymmap()
- Conexiones de red
- Accesos de usuario
- Sesión SSH y todos los demás TTY (incluidas las sesiones
kubectl exec -t
)
Configura el DaemonSet de registro
Configura el DaemonSet de registro con un ConfigMap, cos-auditd-fluent-bit-config
. En el ejemplo proporcionado, se envían registros de auditoría a Logging, pero puedes configurarlo para que se envíen registros a otros destinos.
El volumen de los registros generados por auditd
puede ser muy grande y puede generar costos adicionales debido a que consume recursos del sistema y envía más registros que la configuración de registro predeterminada. Puedes configurar filtros para administrar el volumen de registro:
- Puedes configurar filtros en el ConfigMap
cos-auditd-fluent-bit-config
para que ciertos datos no se registren. Consulta la documentación de fluent-bit para los filtros Grep, Modify, Record Modifier y otros filtros. - También puedes configurar Logging para filtrar los registros entrantes. Para obtener más información, consulta Configura y administra receptores.
Implementa el DaemonSet de registro
Puedes usar un clúster existente o crear uno nuevo.
Descarga los manifiestos de ejemplo:
curl https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-node-tools/master/os-audit/cos-auditd-logging.yaml > cos-auditd-logging.yaml
Edita los manifiestos de ejemplo para adaptarlos a tus necesidades. Consulta la sección anterior para obtener detalles sobre cómo funciona DaemonSet.
Inicializa variables comunes:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGION
Reemplaza lo siguiente:
CLUSTER_NAME
: El nombre de tu clúster.COMPUTE_REGION
: La región de Compute Engine del clúster. Para los clústeres zonales, usa la zona.
Implementa el DaemonSet, el ConfigMap y el Espacio de nombres de registro:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -
Verifica que los pods de registro se hayan iniciado. Si definiste un espacio de nombres diferente en tus manifiestos, reemplaza cos-auditd por el nombre del espacio de nombres que usas.
kubectl get pods --namespace=cos-auditd
Si los Pods están en ejecución, el resultado será el siguiente:
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
Se implementa un pod en cada nodo del clúster; en este caso, el clúster tiene tres nodos.
Ahora, puedes acceder a los registros de auditoría en Logging. En el Explorador de registros, filtra los resultados con la siguiente consulta:
LOG_ID("linux-auditd") resource.labels.cluster_name = "CLUSTER_NAME" resource.labels.location = "COMPUTE_REGION"
Como alternativa, puedes usar la CLI de gcloud (usa
--limit
porque el conjunto de resultados puede ser muy grande):gcloud logging read --limit=100 "LOG_ID("linux-auditd") AND resource.labels.cluster_name = "${CLUSTER_NAME}" AND resource.labels.location = "${CLUSTER_LOCATION}""
Cómo exportar registros
Para obtener información sobre cómo enrutar tus registros a destinos compatibles, consulta Configura y administra receptores.
Limpieza
Para inhabilitar el registro auditd
, borra el DaemonSet de registro y reinicia los nodos. La configuración de auditoría se bloquea una vez habilitada y solo se puede cambiar si se vuelve a crear el nodo.
Borra el DaemonSet, ConfigMap y su Namespace del clúster:
kubectl delete -f cos-auditd-logging.yaml
Reinicia los nodos de tu clúster. Primero, obtén el grupo de instancias al que pertenecen:
instance_group=$(gcloud compute instance-groups managed list \ --format="value(name)" \ --filter=${CLUSTER_NAME})
Luego, obtén las instancias:
instances=$(gcloud compute instance-groups managed list-instances ${instance_group} \ --format="csv(instance)[no-heading][terminator=',']")
Finalmente, vuelve a crear las instancias:
gcloud compute instance-groups managed recreate-instances ${instance_group} \ --instances=${instances}
¿Qué sigue?
- Mira Cloud Forensics 101 (Introducción a detección de intrusiones de Cloud) para comenzar con la detección de intrusiones en la nube.
- Obtén información sobre los registros de auditoría de Kubernetes y la política de auditoría.
- Consulta Descripción general de seguridad.
- Obtén más información sobre Cloud Audit Logging.