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 будет автоматически создан индекс c типом лога _kaudit для кластера, логи будут перенаправлены автоматически. На вкладке “События безопасности” дашборда кластера будут доступны аудит логи за последний час.

Скриншот

auditlogs

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

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

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

×