Kubernetes

Данная инструкция описывает настройку сбора событий c узла Kubernetes и их отправки в систему R-Vision SIEM.

Настройка Kubernetes

Приведенные консольные команды выполняются на РЕД ОС. Если вы используете другой дистрибутив Linux, рекомендуется обратиться к официальной документации вашего дистрибутива.

Настройка сервиса Vector

Чтобы настроить сбор логов, выполните следующие шаги:

  1. Подключитесь по ssh к мастер-машине вашего кластера.

  2. Запросите список всех нод вашего кластера с помощью команды kubectl get nodes.

  3. Установите на каждом узле Kubernetes сервис Vector командой:

    sudo dnf install epel-release
    sudo dnf install vector
  4. Замените команду запуска в файле /usr/lib/systemd/system/vector.service на следующую:

    [Unit]
    Description=Vector
    Documentation=https://vector.dev
    After=network-online.target
    Requires=network-online.target
    
    [Service]
    User=<user>
    Group=<user>
    ExecStartPre=/usr/bin/vector validate
    ExecStart=/usr/bin/vector -c /etc/vector/vector.toml
    ExecReload=/usr/bin/vector validate
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=always
    AmbientCapabilities=CAP_NET_BIND_SERVICE
    EnvironmentFile=-/etc/default/vector
    #Since systemd 229, should be in Unit but in order to support systemd <229,
    #it is also supported to have it here.
    StartLimitInterval=10
    StartLimitBurst=5
    
    [Install]
    WantedBy=multi-user.target

    Здесь <user> — имя пользователя, от имени которого будет работать сервис.

    Убедитесь, что учетная запись пользователя <user> имеет права на чтение (Read) и запись (Write) для следующих директорий:

    • Конфигурационные директории: /etc/vector/, /etc/kubernetes/.

    • Директории хранения файлов и логов: /var/log/kubernetes/.

    • Директории исполняемых файлов: /usr/sbin/, /usr/bin/.

      По умолчанию данные права доступны только для записи root.

  5. Перезагрузите конфигурацию командой:

    sudo systemctl daemon-reload
  6. Создайте файл /etc/vector/vector.toml.

  7. Добавьте в созданный файл конфигурацию следующего вида:

    # Источник событий kubernetes-hardware
    [sources.kubernetes_logs]
      type = "kubernetes_logs"
      self_node_name = "<node_name>"
    
    # Источник событий kube-api
    [sources.audit_policy_log]
      type = "file"
      include = [ "/var/log/kubernetes/audit.log" ]
    
    # Цель для отправки логов
    [sinks.vector_siem]
      type = "vector"
      inputs = ["kubernetes_logs", "audit_policy_log"]
      address = "<address>:<port>"

    Здесь:

    • <node_name> — имя узла Kubernetes.

    • <address> — IP-адрес сервера SIEM.

    • <port> — порт, на который будут отправляться события.

  8. Включите новый сервис командой:

    sudo systemctl enable vector --now
  9. Проверьте отсутствие ошибок в сервисе Vector командой:

    sudo systemctl status vector.service
  10. Проверьте правильность конфигурации следующей командой:

    vector validate

    В случае успешного выполнения система выведет сообщение следующего вида:

    √ Loaded ["/etc/vector/vector.toml"]
    √ Component configuration
    √ Health check "<vector_siem>"
    ----------------------------------
                             Validated

Настройка KubeApi

Для настройки и контроля событий, собираемых сервисом Kubernetes, выполните следующие шаги:

  1. Загрузите политику мониторинга kubernetes по ссылке.

  2. Разместите ее в директории /etc/kubernetes/audit-policy.yaml.

  3. Откройте файл /etc/kubernetes/manifests/kube-apiserver.yaml для редактирования.

    1. Добавьте в секцию spec.containers.command следующие строки:

        - --audit-log-path=/var/log/kubernetes/audit.log
        - --audit-policy-file=/etc/kubernetes/audit-policy.yaml

      Конфигурационный файл примет вид:

        spec:
        containers:
        - command:
          - kube-apiserver
          - --advertise-address=<your-master-node-ip>
          - --allow-privileged=true
          - --anonymous-auth=True
        ...

      Здесь <your-master-node-ip> — адрес доступной мастер-ноды вашего кластера.

    2. Добавьте два дополнительных пространства в секцию spec.containers.volumeMounts:

        volumeMounts:
          - mountPath: /etc/kubernetes/audit-policy.yaml
            name: audit-policy
            readOnly: true
          - mountPath: /var/log/kube-audit
            name: audit-logs
            readOnly: false
        ...
    3. Добавьте два дополнительных пространства в секцию spec.containers.volumes:

          - hostPath:
              path: /etc/kubernetes/audit-policy.yaml
              type: File
            name: audit-policy
          - hostPath:
              path: /var/log/kube-audit
              type: DirectoryOrCreate
            name: audit-logs
  4. Перезагрузите сервис kubelet на вашей ноде. Для этого используйте команду:

    systemctl restart kubelet
    Это необязательное действие, однако kubernetes не поддерживает функции проверки конфигурации для своих kube-api подов.
  5. После перезагрузки сервисов выполните команду kubectl get nodes. В случае успешного применения политики вы увидите список ваших нод. В случае наличия ошибок будут выведены ошибки вида Timeout exceeded.

При использовании версий kubernetes 1.26.3—​1.28.1 необходимо, чтобы у пользователя root были следующие права:

  • чтение директории /etc/kubernetes;

  • чтение и запись в директории /var/log/kubernetes;

  • чтение файла /etc/kubernetes/audit-policy.yaml.

Настройка в R-Vision SIEM

Для настройки сбора и нормализации событий источника в R-Vision SIEM выполните следующие шаги:

  1. В интерфейсе R-Vision SIEM создайте новый конвейер в коллекторе.

  2. Добавьте на конвейер элемент Точка входа со следующими параметрами:

    • Название: введите название точки входа.

    • Тип точки входа: выберите вариант Vector.

    • Порт точки входа: введите значение, указанное в конфигурации сервиса Vector.

  3. Добавьте VRL-трансформацию:

    .dproduct = "kubernetes"
  4. Соедините добавленную точку входа и VRL-трансформацию.

  5. Добавьте на конвейер элемент Нормализатор с правилами Kubernetes (идентификатор правила: RV-N-53) и Kubernetes (идентификатор правила: RV-N-54).

  6. Соедините нормализатор с VRL-трансформацией.

  7. Добавьте на конвейер элемент Конечная точка типа Хранилище событий.

  8. Если необходимо отправить события на другой конвейер для дальнейшей обработки, добавьте в коллектор шину, настроенную на получение.

  9. Соедините конечную точку и шину с нормализатором.

  10. Сохраните и установите конфигурацию конвейера.

Пример конфигурации конвейера:

kubernetes pipeline scheme

После настройки передачи событий, если настройка выполнена корректно, в хранилище начнут поступать события Kubernetes.

Найти события Kubernetes в хранилище можно по следующему фильтру:

dproduct = "Kubernetes"

kubernetes storage