Audit Policy

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

Рекомендуемая политика автоматически монтируется при развертывании кластера с расширенными настройками безопасности.

Ручная установка Audit Policy

Если ваш кластер развернут без расширенных настроек безопасности, вы можете установить ее самостоятельно.

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

Если ранее вы создавали Audit Policy с помощью объекта конфигурации узлов (NCI), можно отредактировать существующий манифест политики или создать новый объект 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 индекс для кластера, логи будут перенаправлены автоматически. На вкладке “События безопасности” дашборда кластера будут доступны аудит логи за последний час.

Скриншот

auditlogs

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

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

Чтобы настроить дашборд по источникам запросов к API-серверу используйте инструкцию.