Habilita registros auditd de Linux en nodos de GKE

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 el agente de Logging para enviar registros a Stackdriver.

El registro de auditoría del sistema operativo es distinto de Cloud Audit Logging 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 es elegible 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 Stackdriver 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 descritos en esta página solo funcionan en los nodos que ejecutan Container-Optimized OS.

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. El segundo contenedor, fluentd-gcp-cos-auditd, es para el agente de Stackdriver Logging, una aplicación basada en fluentd.

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() y mmap()
  • 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, fluentd-gcp-config-cos-auditd. En el ejemplo proporcionado, se envían registros de auditoría a Stackdriver, pero puedes configurarlo para que se envíen registros a destinos que no sean de Stackdriver.

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:

Implementa el DaemonSet de registro

  1. Puedes usar un clúster existente o crear uno nuevo.

  2. 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
    
  3. Edita los manifiestos de ejemplo para adaptarlos a tus necesidades. Consulta la sección anterior para obtener detalles sobre cómo funciona DaemonSet.

  4. Implementa el DaemonSet y ConfigMap de registro:

    kubectl apply -f cos-auditd-logging.yaml
    
  5. Verifica que los pods de registro se hayan iniciado. Si definiste un Namespace diferente en tus manifiestos, reemplaza cos-auditd con el nombre del espacio de nombres que usas.

    kubectl get pods --namespace=cos-auditd
    

    Si los pods se están ejecutando, 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.

  6. Ahora, puedes acceder a los registros de auditoría en Stackdriver.

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.

  1. Borra el DaemonSet, ConfigMap y su Namespace del clúster:

    kubectl delete -f cos-auditd-logging.yaml
    
  2. 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}
    

Próximos pasos