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 будет автоматически создан Kube-audit индекс для кластера, логи будут перенаправлены автоматически. На вкладке “События безопасности” дашборда кластера будут доступны аудит логи за последний час.
Скриншот
В платформе “Штурвал” по умолчанию используется log-backend, события аудита будут собраны с помощью Fluentbit и перенаправлены в OpenSearch. Политика ротации логов в OpenSearch устанавливается по умолчанию.
Подробнее об индексах и просмотре логов здесь.
Чтобы настроить дашборд по источникам запросов к API-серверу используйте инструкцию.