Процедура аудита (Kubernetes auditing) позволяет отслеживать обращения к API-серверу и анализировать события, происходящие в кластере. Аудит может быть полезен для отладки неожиданных сценариев поведения, а также для соблюдения требований безопасности.
Kubernetes поддерживает настройку аудита через механизм Audit policy,
который позволяет задавать правила логирования интересующих операций.
Результаты аудита по умолчанию записываются в лог-файл /var/log/kube-audit/audit.log
.
Встроенные политики аудита
В Deckhouse Virtualization Platform (DVP) по умолчанию создается базовый набор политик аудита, которые записывают:
- операции по созданию, изменению и удалению ресурсов;
- запросы от имени сервисных аккаунтов из системных пространств имен
kube-system
иd8-*
; - обращения к ресурсам в системных пространствах имен
kube-system
иd8-*
.
Эти политики активны по умолчанию.
Чтобы отключить их, установите параметр basicAuditPolicyEnabled
в значение false
.
Пример:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: control-plane-manager
spec:
version: 1
settings:
apiserver:
auditPolicyEnabled: true
basicAuditPolicyEnabled: false
Настройка собственной политики аудита
Чтобы создать расширенную политику аудита API Kubernetes, выполните следующие шаги:
-
Включите параметр
auditPolicyEnabled
в настройках модуляcontrol-plane-manager
:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: control-plane-manager spec: version: 1 settings: apiserver: auditPolicyEnabled: true
-
Создайте 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-сервера выполните следующие шаги:
- Вручную удалите параметры
--audit-log-*
из манифеста/etc/kubernetes/manifests/kube-apiserver.yaml
; -
Перезапустите API-сервер с помощью следующей команды:
docker stop $(docker ps | grep kube-apiserver- | awk '{print $1}') # Альтернативный вариант (в зависимости от используемого CRI). crictl stopp $(crictl pods --name=kube-apiserver -q)
-
После перезапуска исправьте 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, вы можете настроить сбор и отправку логов в собственную систему безопасности.