Процедура аудита (Kubernetes auditing) позволяет отслеживать обращения к API-серверу и анализировать события, происходящие в кластере. Аудит может быть полезен для отладки неожиданных сценариев поведения, а также для соблюдения требований безопасности.

Kubernetes поддерживает настройку аудита через механизм Audit policy, который позволяет задавать правила логирования интересующих операций. Результаты аудита по умолчанию записываются в лог-файл /var/log/kube-audit/audit.log.

Встроенные политики аудита

В Deckhouse Virtualization Platform (DVP) по умолчанию разворачивается базовая политика аудита, которая может быть дополнена пользовательскими правилами.

В этой политике реализованы следующие правила:

  • Не логировать частые обновления Endpoints, EndpointSlices и Events.
  • Не логировать операции выбора лидера на ресурсах Lease.
  • Не логировать ConfigMap cert-manager, используемые для выбора лидера.
  • Не логировать ресурсы VerticalPodAutoscalerCheckpoints.
  • Не логировать PATCH-операции VerticalPodAutoscaler от recommender.
  • Не логировать ресурсы UpmeterHookProbes.
  • Не логировать любые операции в неймспейсе d8-upmeter.
  • Не логировать обновления ConfigMap ingress-nginx для выборов лидера.
  • Не логировать операции create/delete AuthRequest от health-check dex.
  • Логировать операции create/delete для ресурсов Node с телом запроса/ответа.
  • Логировать запросы kubectl logs (pods/log) на уровне Metadata.
  • Логировать операции create/update/patch/delete от системных ServiceAccount (kube-system, d8-*).
  • Логировать операции create/update/patch/delete для ресурсов Pod.
  • Логировать операции create/update/patch/delete в системных неймспейсах (kube-system, d8-*).
  • Логировать все LIST-запросы во всех неймспейсах.
  • Логировать операции create/delete для ресурсов ServiceAccount.
  • Логировать операции create/update/delete/patch для ресурсов Role и ClusterRole.
  • Логировать операции create/update/delete для ресурсов ClusterRoleBinding.
  • Логировать операции с pod subresource для attach и ephemeral-контейнеров.
  • Логировать создание ресурсов VirtualMachineOperation с телом запроса/ответа.
  • Логировать операции create/update/patch/delete для ресурсов virtualization.deckhouse.io.
  • Логировать операции update/patch для внутренних virtualization subresources.
  • Логировать GET-операции для API-группы subresources.virtualization.deckhouse.io.
  • Логировать операции create/update/patch/delete для ресурсов Pod.
  • Логировать операции create/update/patch/delete в неймспейсе d8-virtualization.
  • Логировать операции create/update/patch/delete для ресурсов ModuleConfig.
  • Не логировать запросы аутентифицированных пользователей.
  • Логировать все оставшиеся (неаутентифицированные) запросы на уровне Metadata.

Подробная информация о правилах, а также пример итоговой политики доступны в документации модуля control-plane-manager

Эти правила из базовой политики активны по умолчанию. Чтобы отключить их, установите параметр basicAuditPolicyEnabled в значение false.

Пример:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: control-plane-manager
spec:
  version: 1
  settings:
    apiserver:
      auditPolicyEnabled: true
      basicAuditPolicyEnabled: false

Настройка собственной политики аудита

Чтобы создать расширенную политику аудита API Kubernetes, выполните следующие шаги:

  1. Включите параметр auditPolicyEnabled в настройках модуля control-plane-manager:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: control-plane-manager
    spec:
      version: 1
      settings:
        apiserver:
          auditPolicyEnabled: true
    
  2. Создайте Secret kube-system/audit-policy, содержащий YAML-файл политики в формате Base64:

    apiVersion: v1
    kind: Secret
    metadata:
      name: audit-policy
      namespace: kube-system
    data:
      audit-policy.yaml: <Base64>
    

    Пример содержимого файла audit-policy.yaml с минимальной рабочей конфигурацией:

    apiVersion: audit.k8s.io/v1
    kind: Policy
    rules:
    - level: Metadata
      omitStages:
      - RequestReceived
    

    Источники с подробной информацией по настройке возможного содержимого файла audit-policy.yaml:

Работа с лог-файлом аудита

Предполагается, что на master-узлах кластера Deckhouse установлен инструмент для отслеживания лог-файла /var/log/kube-audit/audit.log: log-shipper, promtail или filebeat.

Параметры ротации логов в файле предустановлены и не подлежат изменению:

  • максимальный размер файла: 1000 МБ;
  • максимальная глубина записи: 30 дней.

В зависимости от настроек политики и объема запросов к API-серверу количество записей может быть очень большим. В таких условиях глубина хранения может составлять менее 30 минут.

Наличие неподдерживаемых опций или опечаток в конфигурационном файле может привести к ошибкам при запуске API-сервера.

В случае возникновения проблем с запуском API-сервера выполните следующие шаги:

  1. Вручную удалите параметры --audit-log-* из манифеста /etc/kubernetes/manifests/kube-apiserver.yaml;
  2. Перезапустите API-сервер с помощью следующей команды:

    docker stop $(docker ps | grep kube-apiserver- | awk '{print $1}')
       
    # Альтернативный вариант (в зависимости от используемого CRI).
    crictl stopp $(crictl pods --name=kube-apiserver -q)
    
  3. После перезапуска исправьте Secret или удалите его с помощью следующей команды:

    d8 k -n kube-system delete secret audit-policy
    

Перенаправление лог-файла аудита в stdout

По умолчанию лог аудита сохраняется в файл /var/log/kube-audit/audit.log на master-узлах. При необходимости вы можете перенаправить его вывод в stdout процесса kube-apiserver вместо файла, установив параметр apiserver.auditLog.output модуля control-plane-manager в значение Stdout:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: control-plane-manager
spec:
  version: 1
  settings:
    apiserver:
      auditPolicyEnabled: true
      auditLog:
        output: Stdout

В этом случае лог будет доступен в stdout контейнера kube-apiserver.

Далее, используя встроенный механизм логирования в DVP, вы можете настроить сбор и отправку логов в собственную систему безопасности.

Дополнительные ресурсы