Audit Policy
Audit Policy - политика аудита событий в кластере Kubernetes, позволяющая гибко настроить, какие события необходимо отслеживать и на каком уровне. Audit Policy является ресурсом модуля аудита KubeAPI сервера.
Рекомендуемая политика автоматически монтируется при развертывании кластера с расширенными настройками безопасности.
Для удобства настройки политики аудита командой платформы Штурвал был разработан графический редактор политик аудита..
Ручная установка Audit Policy
Если ваш кластер развернут без расширенных настроек безопасности, вы можете установить ее самостоятельно.
Для создания или изменения ранее созданной политики аудита (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 для кластера управления
Audit Policy для кластера управления
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "RequestReceived"
- "ResponseStarted"
omitManagedFields: true
rules:
- level: Metadata
verbs: ["delete"]
resources:
- group: "controlplane.cluster.x-k8s.io"
resources: ["kubeadmcontrolplanes", "kubeadmcontrolplanetemplates"]
- level: Request
verbs: ["create", "update", "patch"]
resources:
- group: "controlplane.cluster.x-k8s.io"
resources: ["kubeadmcontrolplanes", "kubeadmcontrolplanetemplates"]
- level: Metadata
verbs: ["delete"]
resources:
- group: "infrastructure.cluster.x-k8s.io"
resources: ["basisclusters",
"basismachines",
"basismachinetemplates",
"basisproviders",
"ovirtclusters",
"ovirtmachines",
"ovirtmachinetemplates",
"ovirtproviders",
"vsphereclusteridentities",
"vsphereclusters",
"vsphereclustertemplates",
"vspheremachines",
"vspheremachinetemplates"]
- group: "ops.shturval.tech"
resources: ["shturvalserviceconfigs"]
- group: "node.shturval.tech"
resources: ["nodeconfigitems", "nodeconfigs"]
- level: Request
verbs: ["create", "update", "patch"]
resources:
- group: "infrastructure.cluster.x-k8s.io"
resources: ["basisclusters",
"basismachines",
"basismachinetemplates",
"basisproviders",
"ovirtclusters",
"ovirtmachines",
"ovirtmachinetemplates",
"ovirtproviders",
"vsphereclusteridentities",
"vsphereclusters",
"vsphereclustertemplates",
"vspheremachines",
"vspheremachinetemplates"]
- group: "cluster.x-k8s.io"
resources: ["clusterclasses",
"clusters",
"machinedeployments",
"machinehealthchecks",
"machinepools",
"machines",
"machinesets"]
- level: Request
verbs: ["create", "delete", "update", "patch"]
resources:
- group: "rbac.authorization.k8s.io"
resources: ["roles", "clusterroles"]
- level: Request
verbs: ["create", "delete"]
resources:
- group: "rbac.authorization.k8s.io"
resources: ["clusterrolebindings", "rolebindings"]
- level: Request
verbs: ["create", "delete", "update", "patch"]
resources:
- group: "permissions.shturval.tech"
resources: ["grouproles", "userroles"]
- level: Metadata
verbs: ["create", "delete", "update", "patch", "get"]
resources:
- group: ""
resources: ["secrets", "configmaps"]
Пример манифеста Audit Policy для клиентского кластера
Audit Policy для клиентского кластера
apiVersion: audit.k8s.io/v1
kind: Policy
# Собирать события только когда система сформировала ответ
omitStages:
- "RequestReceived"
- "ResponseStarted"
omitManagedFields: true
rules:
- 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"]
verbs: ["create", "delete", "update", "patch", "get"]
- level: Request
verbs: ["create", "delete", "update", "patch"]
resources:
- group: "rbac.authorization.k8s.io"
resources: ["roles", "clusterroles"]
- level: Request
verbs: ["create", "delete"]
resources:
- group: "rbac.authorization.k8s.io"
resources: ["clusterrolebindings", "rolebindings"]
- level: Request
verbs: ["create", "delete", "update", "patch"]
resources:
- group: "permissions.shturval.tech"
resources: ["grouproles", "userroles"]
- level: Metadata
verbs: ["delete"]
resources:
- group: "cilium.io"
resources: ["ciliumnetworkpolicies"]
- group: "ops.shturval.tech"
resources: ["shturvalserviceconfigs"]
- group: "node.shturval.tech"
resources: ["nodeconfigitems", "nodeconfigs"]
- level: Request
verbs: ["create", "update", "patch"]
resources:
- group: "cilium.io"
resources: ["ciliumnetworkpolicies"]
- level: Metadata
verbs: ["create", "delete", "update", "patch"]
resources:
- group: "velero.io"
resources: ["backups", "restores"]
- level: Metadata
verbs: ["create", "delete", "update", "patch", "get"]
resources:
- group: ""
resources: ["secrets", "configmaps"]
Аудит логи
Если кластер развернут с расширенными настройками ИБ и используются сервисы логирования Штурвала, в OpenSearch будет автоматически создан индекс c типом лога _kaudit для кластера, логи будут перенаправлены автоматически. На вкладке “События безопасности” дашборда кластера будут доступны аудит логи за последний час.
Скриншот

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