Logs de auditoría de Kubernetes

Supported OS Linux Mac OS Windows

Información general

Recopila logs de auditoría de Kubernetes para realizar un seguimiento de todo lo que ocurre dentro de tus clústeres Kubernetes, incluyendo cada llamada realizada a la API Kubernetes por cualquier servicio. Esto incluye el plano de control (los controladores incorporados, el planificador), los daemons de nodo (kubelet, kube-proxy y otros), los servicios de clúster (como el autoescalador de clúster), los usuarios que realizan solicitudes kubectl e incluso la propia API Kubernetes.

Con la integración de los logs de auditoría de Kubernetes pueded diagnosticar problemas de permisos, identificar políticas RBAC que necesitan actualizarse y rastrear las solicitudes de API lentas que afectan a todo tu clúster. Profundiza en estos temas con la charla de Datadog en KubeCon 2019.

Configuración

Esta integración está disponible para el Agent v6.0 o posterior

Configuración

Para obtener más información sobre la configuración de los logs de auditoría de Kubernetes, consulta las auditorías de Kubernetes.

Para habilitar los logs de auditoría logs en Kubernetes:

  1. Los logs de auditoría están deshabilitados por defecto en Kubernetes. Para habilitarlos en la configuración de tu servidor de API, especifica una ruta para el archivo de la política de auditoría:

    kube-apiserver
      [...]
      --audit-log-path=/var/log/kubernetes/apiserver/audit.log
      --audit-policy-file=/etc/kubernetes/audit-policies/policy.yaml
    
  2. Cree el archivo de la política en /etc/kubernetes/audit-policies/policy.yaml para especificar los tipos de solicitudes de API que quieres capturar en tus logs de auditoría. Las reglas de la política de auditoría se evalúan en orden. El servidor de API sigue la primera regla coincidente que encuentra para cada tipo de operación o recurso. Ejemplo de política de auditoría:

# /etc/kubernetes/audit-policies/policy.yaml

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
    # no registres solicitudes en los siguientes elementos
    - level: None
      nonResourceURLs:
          - '/healthz*'
          - '/logs'
          - '/metrics'
          - '/swagger*'
          - '/version'

    # limita el nivel a los Metadatos para que el token no se incluya en las especificaciones/el estado
    - level: Metadata
      omitStages:
          - RequestReceived
      resources:
          - group: authentication.k8s.io
            resources:
                - tokenreviews

    # auditoría extendida de la delegación de autenticación
    - level: RequestResponse
      omitStages:
          - RequestReceived
      resources:
          - group: authorization.k8s.io
            resources:
                - subjectaccessreviews

    # registra los cambios en los pods a nivel de RequestResponse
    - level: RequestResponse
      omitStages:
          - RequestReceived
      resources:
          # grupo de API central, añade servicios de API de terceros y tus servicios de API, si es necesario
          - group: ''
            resources: ['pods']
            verbs: ['create', 'patch', 'update', 'delete']

    # registra el resto de los elementos a nivel de los Metadatos
    - level: Metadata
      omitStages:
          - RequestReceived

En este ejemplo de archivo de política se configura el servidor de API para registrar con un máximo nivel de detalle determinados tipos de operaciones que generan cambios en un clúster (actualización, parche, creación, eliminación). También realiza un seguimiento de las solicitudes al recurso subjectaccessreviews al más alto nivel, para ayudar a solucionar los problemas de delegación de autenticación.

Es posible que quieras reducir el nivel de verbosidad a Metadata para los endpoints que contienen datos confidenciales, como el recurso tokenreviews. Datadog también omite la etapa RequestReceived de los logs.

En la última sección, para todo lo que no fue explícitamente configurado por las reglas anteriores, la política está configurada para registrar a nivel de Metadata. Como los logs de auditoría pueden ser verbosos, puedes elegir excluir acciones/verbos menos críticos, como por ejemplo las operaciones list, watch y get que no cambian el estado del clúster.

Recopilación de logs

  1. Instala el Agent en tu entorno Kubernetes.

  2. La recopilación de logs está deshabilitada por defecto. Habilítala en la sección env de tu DaemonSet:

    env:
        # (...)
        - name: DD_LOGS_ENABLED
          value: 'true'
    
  3. Monta el directorio del log de auditoría y también un directorio que el Agent utilice para almacenar un indicador para saber qué log se envió por última vez desde ese archivo. Para ello, añade lo siguiente en la sección volumeMounts del daemonset:

     # (...)
        volumeMounts:
          # (...)
          - name: pointdir
            mountPath: /opt/datadog-agent/run
          - name: auditdir
            mountPath: /var/log/kubernetes/apiserver
          - name: dd-agent-config
            mountPath: /conf.d/kubernetes_audit.d
      # (...)
      volumes:
        # (...)
        - hostPath:
            path: /opt/datadog-agent/run
          name: pointdir
        - hostPath:
            path: /var/log/kubernetes/apiserver
          name: auditdir
        - name: dd-agent-config
            configMap:
              name: dd-agent-config
              items:
                - key: kubernetes-audit-log
                  path: conf.yaml
      # (...)
    

    Esta acción también monta la carpeta conf.d que se utiliza para configurar el Agent para que recopile logs del archivo del log de auditoría.

  4. Configura el Agent para recopilar logs de ese archivo con un ConfigMap:

    kind: ConfigMap
    apiVersion: v1
    metadata:
        name: dd-agent-config
        namespace: default
    data:
        kubernetes-audit-log: |-
            logs:
              - type: file
                path: /var/log/kubernetes/apiserver/audit.log
                source: kubernetes.audit
                service: audit        
    

Validación

Ejecuta el subcomando de estado del Agent y busca Logs en la sección Checks.

Solucionar problemas

¿Necesitas ayuda? Ponte en contacto con el soporte de Datadog.

Referencias adicionales