En esta página se explica cómo habilitar los registros de auditoría detallados del sistema operativo 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 registro de fluent-bit para enviar registros a Cloud Logging. Habilitar los registros detallados puede proporcionar información valiosa sobre el estado de tu clúster y tus cargas de trabajo, como mensajes de error, intentos de inicio de sesión y ejecuciones binarias. Puede usar esta información para depurar problemas o investigar incidentes de seguridad.
No se admite la habilitación del registro de auditoría de Linux en los clústeres Autopilot de GKE, ya que Google gestiona los nodos y las máquinas virtuales subyacentes.
Esta página está dirigida a especialistas en seguridad que revisan y analizan registros de seguridad. Usa esta información para conocer los requisitos y las limitaciones de los registros del SO detallados y para guiar tu implementación al habilitarlos en tus nodos de GKE. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE. Google Cloud
Antes de leer esta página, asegúrate de que conoces los registros de auditoría del sistema operativo Linux.
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.
Información general
Para recoger los registros de cada nodo de un clúster, usa un DaemonSet, que ejecuta exactamente un pod en cada nodo del clúster en el que se puede programar el DaemonSet. Este pod configura el daemon de registro auditd
en el host y el agente de registro para enviar los registros a Logging o a cualquier otro servicio de ingesta de registros.
Por definición, la auditoría se produce después de un evento y es una medida de seguridad retrospectiva. Los registros de auditd por sí solos probablemente no sean suficientes para llevar a cabo análisis forenses en tu clúster. Piensa cómo puedes usar mejor el registro de auditoría como parte de tu estrategia de seguridad general.
Limitaciones
Los mecanismos de registro que se describen en esta página solo funcionan en nodos que ejecutan Container-Optimized OS en clústeres estándar de GKE.
Cómo funciona el DaemonSet de registro
En esta sección se describe cómo funciona el DaemonSet de registro de ejemplo para que puedas configurarlo según tus necesidades. En la siguiente sección se explica cómo implementar el DaemonSet.
El archivo de manifiesto de ejemplo define un DaemonSet, un ConfigMap y un espacio de nombres para contenerlos.
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 systemd cloud-audit-setup disponible en los nodos del SO optimizado para contenedores.
El segundo contenedor, cos-auditd-fluent-bit
, contiene una instancia de fluent-bit configurada para recoger los registros de auditoría de Linux del journal del nodo y exportarlos a Cloud Logging.
El DaemonSet de registro de ejemplo registra los siguientes eventos:
- Modificaciones de la configuración del sistema
auditd
- Comprobaciones de permisos de AppArmor
- Ejecuciones de
execve()
,socket()
,setsockopt()
ymmap()
- conexiones de red
- Inicios de sesión de usuarios
- Sesión SSH y todos los demás TTYs (incluidas las sesiones
kubectl exec -t
)
Configurar el DaemonSet de registro
Puedes configurar el DaemonSet de registro mediante 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 envíe registros a otros destinos.
El volumen de registros que genera auditd
puede ser muy grande y puede conllevar costes adicionales, ya que consume recursos del sistema y envía más registros que la configuración de registro predeterminada. Puedes configurar filtros para gestionar el volumen de registro:
- Puedes configurar filtros en
cos-auditd-fluent-bit-config
ConfigMap para que no se registren determinados datos. Consulta la documentación de fluent-bit sobre Grep, Modify, Record Modifier y otros filtros. - También puedes configurar Logging para filtrar los registros entrantes. Para obtener más información, consulta Configurar y gestionar sinks.
Desplegar el DaemonSet de registro
Puedes usar un clúster que ya tengas o crear uno.
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 archivos de manifiesto de ejemplo para adaptarlos a tus necesidades. Consulta la sección anterior para obtener información sobre cómo funciona DaemonSet. Ten en cuenta que la imagen
fluent-bit
que se usa en este manifiesto de ejemplo es solo para fines de demostración. Como práctica recomendada, sustituye la imagen por una de una fuente controlada con un resumen SHA-256.Inicializa las variables comunes:
export CLUSTER_NAME=CLUSTER_NAME export CLUSTER_LOCATION=COMPUTE_REGION
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clúster.COMPUTE_REGION
: la región de Compute Engine de tu clúster. En el caso de los clústeres zonales, usa la zona.
Despliega el espacio de nombres, el DaemonSet y el ConfigMap de registro:
envsubst '$CLUSTER_NAME,$CLUSTER_LOCATION' < cos-auditd-logging.yaml \ | kubectl apply -f -
Verifica que los pods de registro se hayan iniciado. Si has definido otro espacio de nombres en tus manifiestos, sustituye cos-auditd por el nombre del espacio de nombres que estés usando.
kubectl get pods --namespace=cos-auditd
Si los pods están en ejecución, el resultado será similar al 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 puede 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"
También 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}""
Exportar registros
Para saber cómo enrutar los registros a los destinos admitidos, consulta Configurar y gestionar sinks.
Inhabilitar registros
Para inhabilitar el registro de auditd
, elimina el DaemonSet de registro y reinicia los nodos. La configuración de auditoría se bloquea una vez habilitada y solo se puede cambiar recreando el nodo.
Elimina el DaemonSet, el ConfigMap y su espacio de nombres del clúster:
kubectl delete -f cos-auditd-logging.yaml
Reinicia los nodos del clúster. Primero, obtén el grupo de instancias al que pertenece:
instance_group=$(gcloud compute instance-groups managed list \ --format="value(name)" \ --filter=${CLUSTER_NAME})
A continuación, obtén las propias instancias:
instances=$(gcloud compute instance-groups managed list-instances ${instance_group} \ --format="csv(name)[no-heading][terminator=',']")
Por último, vuelve a crear las instancias:
gcloud compute instance-groups managed recreate-instances ${instance_group} \ --instances=${instances}
Siguientes pasos
- Consulta el vídeo Introducción a la informática forense en la nube para empezar a usar la informática forense en la nube.
- Consulta información sobre el registro de auditoría de Kubernetes y la política de auditoría.
- Consulta la descripción general de la seguridad de Kubernetes Engine.
- Consulta información sobre los registros de auditoría de Cloud.