Audit Policy

Политика аудита

Audit Policy - политика аудита событий в кластере Kubernetes, позволяющая гибко настроить, какие события необходимо отслеживать и на каком уровне. Audit Policy является ресурсом модуля аудита KubeAPI сервера.

Рекомендуемая политика автоматически монтируется при развертывании кластера с расширенными настройками безопасности. Для создания или изменения ранее созданной политики аудита (Audit Policy) в клиентском кластере или кластере управления из интерфейса платформы “Штурвал” необходимо перейти в раздел Администрирование/Конфигурация узлов.

Если ранее вы создавали Audit Policy с помощью объекта конфигурации узлов (NCI), можно отредактировать существующий манифест политики или создать новый объект NCI.

Если Audit Policy не была установлена в кластер, необходимо создать новый объект конфигурации узлов. Обратите внимание, если ранее Audit Policy была размещена в конфигурации узлов, то новый объект конфигурации узлов (NCI) должен иметь приоритет выше ранее созданного.

В селекторе узлов из выпадающего списка выберите ключ лейбла node-role.kubernetes.io/control-plane. Значение для лейбла не устанавливайте.

  • В блоке Настраиваемые разделы выберите Файлы и директории, нажмите “Управлять”.
  • В открывшемся окне нажмите +
  • В типе файла/директории должно быть выбрано Файл. В поле Путь к файлу или директории пропишите /etc/kubernetes/audit_policy.yaml.
  • В поле Содержимое файла вставьте содержимое YAML-файла политики, нажмите “Добавить”. Затем нажмите “Завершить”.

Master-узлы будут последовательно перезапущены.

Настройка API-сервера

Перейдите в редактирование манифеста kube-apiserver: /etc/kubernetes/manifests/kube-apiserver.yaml

Внесите параметры в манифест согласно инструкции:

spec:
  containers:
  - command:
    - --audit-policy-file=/etc/kubernetes/audit_policy.yaml
    - --audit-log-path=/var/log/kube-api-audit/audit.log
    - --audit-log-maxage=30
    - --audit-log-maxbackup=10
    - --audit-log-maxsize=100
    - --audit-log-mode=batch

В блок volumeMounts необходимо смонтировать политику и логи

    volumeMounts:
    - mountPath: /etc/kubernetes/audit_policy.yaml
      name: audit-policy
    - mountPath: /var/log/kube-api-audit/
      name: audit-log
      readOnly: false

В блок volumes необходимо указать политику и логи

  volumes:
  - hostPath:
      path: /etc/kubernetes/audit_policy.yaml
      type: File
    name: audit-policy
  - hostPath:
      path: /var/log/kube-api-audit/
      type: DirectoryOrCreate
    name: audit-log

Пример манифеста Audit Policy

apiVersion: audit.k8s.io/v1
kind: Policy
# Собирать события только когда система сформировала ответ
omitStages:
  - "RequestReceived"
  - "ResponseStarted"
rules:
  - level: None
    userGroups: ["system:authenticated"]
    nonResourceURLs:
    - "/api*"
    - "/version"
  # Регистрировать запросы к нагрузкам
  - level: Metadata
    verbs: ["delete"]
    resources:
    - group: ""
      resources: ["deployments", "statefulsets", "daemonsets", "pods/log", "pods"]
  - level: RequestResponse
    verbs: ["create", "update", "patch"]
    resources:
    - group: ""
      resources: ["deployments", "statefulsets", "pods"]
  - level: Request
    resources:
    - group: ""
      resources: ["pods/exec"]

  # Записываем все изменения объектов с чувствительной информацией
  - level: Metadata
    verbs: ["create", "update", "delete", "get"]
    resources:
    - group: ""
      resources: ["secrets", "configmaps", "serviceaccount"]
    verbs: ["create", "delete", "update", "patch", "get"]
    resources:
    - group: "ops.shturval.tech"
      resources: ["shturvalserviceconfigs"]
    - group: "node.shturval.tech"
      resources: ["nodeconfigitems", "nodeconfigs"]

  # Записываем создание, изменение и удаление сведений на уровне запроса, связанные с ролевой моделью
  - level: Request
    verbs: ["create", "delete", "update", "patch"]
    resources:
    - group: "rbac.authorization.k8s.io"
      resources: ["roles", "clusterroles"]
    verbs: ["create", "delete"]
    resources:
    - group: "rbac.authorization.k8s.io"
      resources: ["clusterrolebindings", "rolebindings"]
    verbs: ["create", "delete", "update", "patch"]
    resources:
    - group: "permissions.shturval.tech"
      resources: ["grouproles", "userroles"]

  # Записываем действия, связанные с изменениями политик безопасности
  - level: Metadata
    verbs: ["delete"]
    resources:
    - group: "kyverno.io"
      resources: ["clusterpolicies"]
  - level: Request
    verbs: ["create", "update", "patch"]
    resources:
    - group: "kyverno.io"
      resources: ["clusterpolicies"]

  # Записываем действия, связанные с изменениями сетевых политик
  - level: Metadata
    verbs: ["delete"]
    resources:
    - group: "cilium.io"
      resources: ["ciliumnetworkpolicies"]
  - level: Request
    verbs: ["create", "update", "patch"]
    resources:
    - group: "cilium.io"
      resources: ["ciliumnetworkpolicies"]

Аудит логи

Если кластер развернут с расширенными настройками ИБ и используются сервисы логирования Штурвала, в OpenSearch будет автоматически создан Kube-audit индекс для кластера, логи будут перенаправлены автоматически. На вкладке “События безопасности” дашборда кластера будут доступны аудит логи за последний час.

В платформе “Штурвал” по умолчанию используется log-backend, события аудита будут собраны с помощью Fluentbit и перенаправлены в OpenSearch. Политика ротации логов в OpenSearch устанавливается по умолчанию.

Подробнее об индексах и просмотре логов здесь.