Приём результатов соответствия Kyverno

Материал из Документация Ключ-АСТРОМ
Версия от 17:16, 21 сентября 2026; IKuznetsov (обсуждение | вклад) (Новая страница: « = Приём результатов соответствия Kyverno = Принимайте результаты соответствия Kyverno в '''Ключ-АСТРОМ''' как события безопасности. С контекстом времени выполнения от '''Ключ-АСТРОМ''' вы можете анализировать результаты политик '''Kubernetes''' вместе с сервисами и раб...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Приём результатов соответствия Kyverno

Принимайте результаты соответствия Kyverno в Ключ-АСТРОМ как события безопасности. С контекстом времени выполнения от Ключ-АСТРОМ вы можете анализировать результаты политик Kubernetes вместе с сервисами и рабочими нагрузками, на которые они влияют.

Начало работы

Обзор

Интеграция Ключ-АСТРОМ с Kyverno позволяет унифицировать и контекстуализировать результаты политик и соответствия Kubernetes с другими данными безопасности на платформе Ключ-АСТРОМ.

Kyverno — это нативный для Kubernetes движок политик, который проверяет, изменяет и генерирует конфигурации ресурсов. Когда проверяющие политики развёрнуты в кластере, Kyverno оценивает целевые ресурсы и создаёт стандартизированные отчёты OpenReports.

Эта интеграция развёртывает пользовательский дистрибутив OpenTelemetry Collector, который читает OpenReports Kyverno, преобразует результаты политик в события безопасности Ключ-АСТРОМ и отправляет их в конечную точку приёма событий безопасности OpenPipeline.

Ключ-АСТРОМ сопоставляет принятые данные с сущностями времени выполнения, которые являются частью вашей контролируемой среды, для унифицированного анализа, приоритизации и оркестрации.

Варианты использования

С принятыми данными вы можете реализовать различные сценарии, такие как:

  • Визуализация и анализ результатов безопасности
  • Обнаружение пробелов в покрытии результатов безопасности
  • Автоматизация и оркестрация результатов безопасности

Требования

Ниже приведены требования для Kyverno и Kubernetes, а также Ключ-АСТРОМ.

Требования Kyverno и Kubernetes

  • Работающий кластер Kubernetes версии 1.26 или новее.
  • kubectl, настроенный с разрешениями на создание ресурсов ClusterRole и ClusterRoleBinding.
  • Helm 3 или 4.
  • Kyverno, установленный с включёнными OpenReports.
  • Развёрнутые в кластере проверяющие политики Kyverno.

Включение OpenReports и настройка метрик Kyverno Включите OpenReports и настройте контроллеры Kyverno на отправку метрик через OTLP gRPC со следующими минимальными значениями Helm:

openreports:
  enabled: true
  installCrds: true

admissionController:
  metering:
    disabled: false
    config: grpc
    port: 4317
    collector: otel-collector.astromkey.svc.cluster.local

backgroundController:
  metering:
    disabled: false
    config: grpc
    port: 4317
    collector: otel-collector.astromkey.svc.cluster.local

cleanupController:
  metering:
    disabled: false
    config: grpc
    port: 4317
    collector: otel-collector.astromkey.svc.cluster.local

reportsController:
  metering:
    disabled: false
    config: grpc
    port: 4317
    collector: otel-collector.astromkey.svc.cluster.local

Требования Ключ-АСТРОМ

Сгенерируйте токен платформы или классический токен доступа и сохраните его для дальнейшего использования.

Область токена платформы Область классического токена доступа Назначение
openpipeline:security.events:ingest openpipeline.events_security Приём событий безопасности через /platform/ingest/v1/security.events.
openpipeline:metrics:ingest metrics.ingest Отправка метрик OTLP в Ключ-АСТРОМ.
openpipeline:logs:ingest logs.ingest Отправка логов OTLP в Ключ-АСТРОМ.
openpipeline:traces:ingest openTelemetryTrace.ingest Отправка трассировок OTLP в Ключ-АСТРОМ.

Активация и настройка

Чтобы интегрировать OpenReports Kyverno с Ключ-АСТРОМ, разверните пользовательский Коллектор событий безопасности Ключ-АСТРОМ в вашем кластере Kubernetes.

Требуемый образ коллектора доступен по адресу:

ghcr.io/astromkey-oss/astromkey-security-events-collector:latest

Этот образ коллектора может принимать, анализировать и преобразовывать OpenReports Kyverno в события безопасности Ключ-АСТРОМ, которые соответствуют Семантическому словарю Ключ-АСТРОМ.

Используйте один из следующих подходов к развёртыванию.

OpenTelemetry Operator

Рекомендуется

Используйте этот вариант, если у вас уже установлен OpenTelemetry Operator или вы предпочитаете управление жизненным циклом на основе CRD.

1. Подготовьте среду

Создайте пространство имён.

kubectl create namespace astromkey

Создайте секрет Kubernetes с вашей конечной точкой Ключ-АСТРОМ, API-токеном и именем кластера.

kubectl -n astromkey create secret generic astromkey-secrets \

 --from-literal=endpoint=https://<your-environment>.astromkey.com \
 --from-literal=api-token=dt0XXX.XXXXXXXX \
 --from-literal=cluster-name=<your-cluster-name>

Замените:

  • <your-environment> на вашу среду Ключ-АСТРОМ.
  • dt0XXX.XXXXXXXX на токен платформы или классический токен доступа, который вы сгенерировали для этой интеграции.
  • <your-cluster-name> на имя, идентифицирующее этот кластер в Ключ-АСТРОМ (например, prod-eu-1). Имя кластера необязательно, но рекомендуется для многое кластерных конфигураций.

Примените разрешения RBAC.

curl -O https://raw.githubusercontent.com/astromkey-oss/astromkey-security-events-collector/refs/heads/master/manifests/rbac.yaml
kubectl apply -f rbac.yaml

2. Установите OpenTelemetry Operator Пропустите этот шаг, если OpenTelemetry Operator уже установлен в вашем кластере.

helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm install opentelemetry-operator open-telemetry/opentelemetry-operator \
  --namespace opentelemetry-operator-system --create-namespace

3. Разверните коллектор Файл openTelemetry-manifest_statefulset.yaml определяет пользовательский ресурс OpenTelemetryCollector, которым управляет оператор.

curl -O https://raw.githubusercontent.com/astromkey-oss/astromkey-security-events-collector/refs/heads/master/manifests/openTelemetry-manifest_statefulset.yaml
kubectl apply -f openTelemetry-manifest_statefulset.yaml

Используйте пользовательский образ коллектора с ghcr.io/astromkey-oss/astromkey-security-events-collector:latest. Стандартный образ OpenTelemetry Collector не включает необходимые плагины Security Event Processor и Exporter.

4. Проверьте развёртывание

Проверьте статус пода.

kubectl -n astromkey get pods

Вы должны увидеть под с именем security-events-collector-* со статусом Running. Проверьте логи.

kubectl -n astromkey logs -l app.kubernetes.io/name=security-events-collector --tail=50

Ищите строки логов, в которых упоминается обработка OpenReports и экспорт событий.

Проверьте события в Ключ-АСТРОМ.

После того как первые результаты будут отправлены, выполните следующий запрос в Notebooks:

fetch security.events
| filter dt.system.bucket == "default_securityevents"
| filter event.kind == "SECURITY_EVENT"
    AND event.provider == "Kyverno"
    AND event.type == "COMPLIANCE_FINDING"

5. Удалите интеграцию

Удаление коллектора останавливает приём новых событий безопасности. Оно не удаляет события, которые уже были сохранены. Эти события сохраняются в соответствии с политикой хранения данных вашей среды.

Удалите ресурс OpenTelemetryCollector.

kubectl -n astromkey delete opentelemetrycollector otel

Опционально: удалите OpenTelemetry Operator, если он был установлен только для этой интеграции.

helm uninstall opentelemetry-operator --namespace opentelemetry-operator-system

Удалите общие ресурсы.

kubectl delete clusterrolebinding otelcontribcol kubectl delete clusterrole otelcontribcol kubectl -n astromkey delete serviceaccount security-events-collector kubectl -n astromkey delete secret astromkey-secrets

Манифесты Kubernetes

Используйте этот вариант, если вы не можете установить OpenTelemetry Operator или предпочитаете обычные манифесты Kubernetes.

1. Подготовьте среду

Создайте пространство имён.

kubectl create namespace astromkey

Создайте секрет Kubernetes с вашей конечной точкой Ключ-АСТРОМ, API-токеном и именем кластера.

kubectl -n astromkey create secret generic astromkey-secrets \

 --from-literal=endpoint=https://<your-environment>.astromkey.com \
 --from-literal=api-token=dt0XXX.XXXXXXXX \
 --from-literal=cluster-name=<your-cluster-name>

Замените:

  • <your-environment> на вашу среду Ключ-АСТРОМ.
  • dt0XXX.XXXXXXXX на токен платформы или классический токен доступа, который вы сгенерировали для этой интеграции.
  • <your-cluster-name> на имя, идентифицирующее этот кластер в Ключ-АСТРОМ (например, prod-eu-1).

Примените разрешения RBAC.

curl -O https://raw.githubusercontent.com/astromkey-oss/astromkey-security-events-collector/refs/heads/master/manifests/rbac.yaml
kubectl apply -f rbac.yaml

2. Примените ConfigMap коллектора Файл configmap.yaml хранит конфигурацию конвейера коллектора и монтирует её в под коллектора при запуске.

curl -O https://raw.githubusercontent.com/astromkey-oss/astromkey-security-events-collector/refs/heads/master/manifests/configmap.yaml
kubectl apply -f configmap.yaml

3. Разверните коллектор Файл collector-deployment.yaml определяет Deployment и сервис ClusterIP, который предоставляет доступ к коллектору внутри кластера.

curl -O https://raw.githubusercontent.com/astromkey-oss/astromkey-security-events-collector/refs/heads/master/manifests/collector-deployment.yaml
kubectl apply -f collector-deployment.yaml

Используйте пользовательский образ коллектора с ghcr.io/astromkey-oss/astromkey-security-events-collector:latest. Стандартный образ OpenTelemetry Collector не включает необходимые плагины Security Event Processor и Exporter.

4. Проверьте развёртывание

Проверьте статус пода.

kubectl -n astromkey get pods

Вы должны увидеть под с именем dt-security-events-collector-* со статусом Running. Проверьте логи.

kubectl -n astromkey logs -l app=dt-security-events-collector --tail=50

Ищите строки логов, в которых упоминается обработка OpenReports и экспорт событий. Проверьте конечную точку метрик.

kubectl -n astromkey port-forward deployment/dt-security-events-collector 8888:8888
curl -s http://localhost:8888/metrics | grep processor_securityevent

Вы должны увидеть счётчики processor_securityevent_incoming_logs_total и processor_securityevent_outgoing_logs_total.

Проверьте события в Ключ-АСТРОМ.

После того как первые результаты будут отправлены, выполните следующий запрос в Notebooks:

fetch security.events
| filter dt.system.bucket == "default_securityevents"
| filter event.kind == "SECURITY_EVENT"
    AND event.provider == "Kyverno"
    AND event.type == "COMPLIANCE_FINDING"

5. Удалите интеграцию

Удаление коллектора останавливает приём новых событий безопасности. Оно не удаляет события, которые уже были сохранены.

Удалите Service и Deployment.

kubectl -n astromkey delete service otel-collector
kubectl -n astromkey delete deployment dt-security-events-collector

Удалите ConfigMap.

kubectl -n astromkey delete configmap dt-security-collector-config

Удалите общие ресурсы.

kubectl delete clusterrolebinding otelcontribcol kubectl delete clusterrole otelcontribcol kubectl -n astromkey delete serviceaccount security-events-collector kubectl -n astromkey delete secret astromkey-secrets

Опционально: удалите пространство имён, если оно было создано только для этой интеграции и не содержит других ресурсов.

kubectl delete namespace astromkey

Удаление пространства имён удаляет все ресурсы внутри него, включая другие рабочие нагрузки или секреты. Выполните kubectl -n astromkey get all перед удалением пространства имён, чтобы убедиться, что оно не содержит нужных вам ресурсов.

Детали

Как это работает

Интеграция Kyverno — результаты соответствия Kyverno проходят из OpenReports через Коллектор событий безопасности Ключ-АСТРОМ в конечную точку событий безопасности OpenPipeline, где Ключ-АСТРОМ сохраняет их как события безопасности.

  • Kyverno проверяет ресурсы Kubernetes на соответствие развёрнутым проверяющим политикам. Для каждой оценки политики Kyverno создаёт OpenReports, содержащие результаты по каждому ресурсу с серьёзностью и деталями соответствия.
  • Получатель k8sobjects в OpenTelemetry Collector читает ресурсы reports и clusterreports из группы API openreports.io через настроенный интервал.
  • Пользовательский процессор securityevent анализирует каждый OpenReport, извлекает отдельные результаты политик и сопоставляет их с семантической моделью данных событий безопасности Ключ-АСТРОМ. Сопоставление добавляет серьёзность, оценку риска, статус соответствия, заголовок результата, поставщика продукта и контекст Kubernetes.
  • Процессор k8sattributes добавляет метаданные Kubernetes, такие как UID кластера и пространство имён. Процессор resource добавляет имя кластера.
  • Пользовательский экспортёр securityevent отправляет пакетные HTTP POST-запросы на /platform/ingest/v1/security.events, аутентифицированные API-токеном Ключ-АСТРОМ.
  • Ключ-АСТРОМ сохраняет события безопасности в бакете default_securityevents. События становятся доступными для запросов в Notebooks, Investigations и Дашбордах, и вы можете использовать их в рабочих процессах.

Расширенная конфигурация

Коллектор событий безопасности Ключ-АСТРОМ — это пользовательский дистрибутив OpenTelemetry Collector, который объединяет три компонента в конвейере логов для преобразования данных соответствия политик Kubernetes в события безопасности Ключ-АСТРОМ.

k8sobjects receiver        securityevent processor        securityevent exporter
(pulls OpenReports)   ->   (transforms to events)    ->   (posts to Astromkey)

Тип конвейера — logs, потому что получатель k8sobjects выдаёт объекты Kubernetes как записи логов. Процессор и экспортёр работают с этими записями логов.

Настройка сбора OpenReports

Получатель k8sobjects отслеживает или извлекает пользовательские ресурсы Kubernetes и выдаёт их как записи логов. Эта интеграция использует его для извлечения OpenReports из Kyverno и других движков политик, реализующих спецификацию OpenReports.

Конфигурация получателя OpenReports

receivers:
  k8sobjects:
    auth_type: serviceAccount
    objects:
      - name: clusterreports
        group: openreports.io
        mode: pull
        interval: 10m
      - name: reports
        group: openreports.io
        mode: pull
        interval: 10m
Параметр Описание
auth_type Метод аутентификации. Используйте serviceAccount при работе внутри Kubernetes.
objects[].name Имя ресурса Kubernetes для сбора. Используйте clusterreports для отчётов уровня кластера и reports для отчётов в пространствах имён.
objects[].group Группа API. OpenReports используют openreports.io.
objects[].mode Режим сбора. pull извлекает все объекты по расписанию. watch передаёт изменения в реальном времени.
objects[].interval Как часто извлекать отчёты. По умолчанию — 10m. Меньшие значения увеличивают нагрузку на API-сервер.

Фильтрация по статусу

По умолчанию процессор обрабатывает все статусы результатов Kyverno: pass, fail, error и skip. Чтобы уменьшить объём событий и затраты на приём, вы можете обрабатывать только определённые статусы.

Конфигурация фильтра статуса

processors:
  securityevent:
    processors:
      openreports:
        enabled: true
        status_filter:
          - "fail"
          - "error"

Лицензирование и затраты

Информацию о выставлении счетов см. в разделе «События».

Часто задаваемые вопросы

Какой тип данных принимается из Kyverno? Коллектор принимает события результатов соответствия: одно событие безопасности на каждый результат политики и ресурс Kubernetes, оценённый Kyverno. Каждое событие представляет собой один вердикт pass, fail, error или skip от правила политики Kyverno, применённого к конкретному ресурсу.

Ключ-АСТРОМ классифицирует эти события как COMPLIANCE_FINDING с категорией COMPLIANCE в схеме событий безопасности.

Как результаты соответствия Kyverno импортируются в Ключ-АСТРОМ? Интеграция работает по принципу push из кластера Kubernetes в Ключ-АСТРОМ. Пользовательский коллектор периодически читает OpenReports из API Kubernetes и отправляет преобразованные события безопасности в конечную точку приёма событий безопасности Ключ-АСТРОМ.

Получатель k8sobjects запрашивает ресурсы reports и clusterreports с фиксированным интервалом. Каждое извлечение получает существующие отчёты. Процессор использует дедупликацию на основе SHA256, чтобы предотвратить создание дубликатов событий в Ключ-АСТРОМ из ранее отправленных результатов.

Фоновый сканер Kyverno работает по своему собственному расписанию, которое по умолчанию составляет 1 час. Интервал коллектора и расписание сканирования Kyverno независимы.

Сколько событий генерирует один OpenReport? Один OpenReport обычно содержит множество отдельных результатов политик, по одному результату на каждый оценённый ресурс. Например, если политика нацелена на 50 Deployments, отчёт содержит 50 результатов, и процессор расширяет это до 50 отдельных событий безопасности.

Вы можете отслеживать это расширение с помощью метрик процессора:

  • processor_securityevent_incoming_logs_total: полученные отчёты
  • processor_securityevent_outgoing_logs_total: отправленные события

Какие типы политик Kyverno создают отчёты? Только проверяющие типы политик создают OpenReports, которые могут быть приняты. Политики изменения, генерации, удаления и очистки не создают отчёты и не отображаются в Ключ-АСТРОМ через эту интеграцию.

Тип политики Область Тип отчёта
ClusterPolicy Уровень кластера clusterreports
Policy Пространство имён reports
ClusterValidatingPolicy Уровень кластера clusterreports
ValidatingPolicy Пространство имён reports
ImageValidatingPolicy Уровень кластера clusterreports
ClusterImageValidatingPolicy Уровень кластера clusterreports
NamespacedImageValidatingPolicy Пространство имён reports

Как сопоставляются серьёзность и оценка риска? Ключ-АСТРОМ сопоставляет уровни риска и оценки из исходной серьёзности политики Kyverno. Если серьёзность не указана в политике, Ключ-АСТРОМ использует MEDIUM.

dt.security.risk.level (сопоставлено из finding.severity) dt.security.risk.score
critical → CRITICAL 10,0
high → HIGH 8,9
medium → MEDIUM 6,9
low → LOW 3,9
отсутствует или неизвестно → NONE 0,0

Могу ли я использовать стандартный образ OpenTelemetry Collector? Нет. Эта интеграция требует плагинов Security Event Processor и Security Event Exporter. Эти плагины не являются частью стандартных дистрибутивов OpenTelemetry Collector или Collector Contrib. Используйте предварительно собранный образ с ghcr.io/astromkey-oss/astromkey-security-events-collector:latest или соберите пользовательский коллектор, включающий эти плагины.

Что произойдёт, если коллектор перезапустится? Коллектор прочитает все существующие OpenReports при следующем интервале. Дедупликация на основе SHA256 в процессоре предотвращает отправку дубликатов событий в Ключ-АСТРОМ. Данные не теряются.

Могу ли я использовать эту интеграцию с несколькими кластерами? Да. Коллектор каждого кластера должен задать уникальное значение k8s.cluster.name через переменную окружения CLUSTERNAME или ключ cluster-name в секрете Kubernetes.

Затем вы можете фильтровать события по кластеру в DQL:

fetch security.events
| filter event.type == "COMPLIANCE_FINDING"
| filter k8s.cluster.name == "production-eu-west-1"