Экспорт логов безопасности во внешние системы
Интеграция с внешними системами мониторинга безопасности.
Введение
Для интеграции с SIEM в кластере должен быть включён Модуль локального сбора логов (Vector, shturval-log-collector). Перенаправление логов настраивается через ShturvalServicePatch, который применяется к спецификации сервиса shturval-log-collector; общий порядок работы с custom values описан в разделе Как управлять CustomValues сервисов.
Vector использует:
sources— источники данных;transforms— преобразование и фильтрацию данных;sinks— получателей, в которые отправляются логи.
Какие логи можно отправлять
В customvalues.shturval укажите типы логов, которые нужно перенаправлять. Поддерживаются:
auditd— системные логи аудита;journald— логиcontainerd,kubelet,shturvald;k8s_audit— логи аудита API Kubernetes;k8s_events— события Kubernetes;k8s_logs— логи контейнеров.
В блоке shturval должны быть перечислены все типы логов, для которых требуется перенаправление. Для каждого типа логов задайте получателей в sinks. Если требуется изменить записи перед отправкой, настройте transforms.
Общий порядок настройки
- Подготовьте
ShturvalServicePatchдляshturval-log-collector. - В
customvalues.shturvalукажите типы логов,transformsпри необходимости иsinksс параметрами подключения. - Загрузите манифест в кластере через импорт манифестов.
- Дождитесь применения изменений.
Отправка в SIEM через socket
В этом примере в SIEM отправляются k8s_audit, journald и k8s_logs. Чтобы изменить перечень отправляемых логов, удалите из блока shturval ненужный блок с типом логов.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
enable: true
sinks:
siem:
type: socket
inputs:
- dedot_specific_fields
address: "<ваше значение параметра>"
mode: <ваше значение параметра>
encoding:
codec: json
journald:
sinks:
siem:
type: socket
inputs:
- journald
address: "<ваше значение параметра>"
mode: <ваше значение параметра>
encoding:
codec: json
k8s_logs:
transforms:
filter_backend:
condition: |
.kubernetes.pod_namespace == "shturval-backend" &&
(
(.kubernetes.container_name == "opa" && starts_with(string!(.kubernetes.pod_name), "shturval-backend-")) ||
(.kubernetes.container_name == "authn" && starts_with(string!(.kubernetes.pod_name), "authn-"))
)
inputs:
- filter_system_namespaces
type: filter
sinks:
siem:
type: socket
inputs:
- filter_backend
address: "<ваше значение параметра>"
mode: <ваше значение параметра>
encoding:
codec: json
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch |
string |
shturval-log-collector-siem |
address |
Сокет SIEM: IP-адрес и порт | string |
10.11.12.13:514 |
mode |
Протокол подключения | string |
udp |
Vector поддерживает подтверждение доставки данных. При некорректной доставке выполняется повторная отправка, что позволяет снизить влияние особенностей UDP-протокола.
Отправка в Loki
Подготовьте ShturvalServicePatch для применения к спецификации ssc Модуля локального сбора логов (shturval-log-collector). В customvalues добавьте блок shturval с требуемыми параметрами.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-logs-to-loki
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
platform_logs_enable: true
k8s_logs:
enable: true
sinks:
loki_external:
type: loki
inputs:
- post_transforms_system_namespaces
- post_transforms_user_namespaces
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "kubernetes"
k8s_audit:
enable: true
sinks:
loki_external:
type: loki
inputs:
- parse_kube_audit
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "k8s_audit"
k8s_events:
enable: true
sinks:
loki_external:
type: loki
inputs:
- delete_managed_fields
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "k8s_events"
journald:
enable: true
sinks:
loki_external:
type: loki
inputs:
- journald
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "journald"
auditd:
enable: true
sinks:
loki_external:
type: loki
inputs:
- auditd
endpoint: <ваше значение параметра>
path: /loki/api/v1/push
compression: snappy
tenant_id: "<ваше значение параметра>"
encoding:
codec: json
tls:
verify_certificate: false
labels:
__tenant_id__: "<ваше значение параметра>"
resourceRealm: "<ваше значение параметра>"
log_type: "auditd"
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch |
string |
shturval-log-collector-logs-to-loki |
platform_logs_enable |
Включает отправку логов платформы | boolean |
true |
<тип логов>.enable |
Включает отправку выбранного типа логов: auditd, journald, k8s_audit, k8s_events, k8s_logs |
boolean |
true |
loki_external.type |
Тип получателя данных | string |
loki |
loki_external.inputs |
Список источников или преобразований логов для отправки в Loki | array |
post_transforms_system_namespaces |
loki_external.endpoint |
URL-адрес Loki | string |
https://loki.example.com |
loki_external.path |
Путь API для отправки логов в Loki | string |
/loki/api/v1/push |
loki_external.compression |
Алгоритм сжатия данных перед отправкой | string |
snappy |
loki_external.tenant_id |
Идентификатор тенанта в Loki | string |
tenant-example |
loki_external.encoding.codec |
Формат кодирования логов | string |
json |
loki_external.tls.verify_certificate |
Проверка TLS-сертификата при подключении | boolean |
false |
loki_external.labels.__tenant_id__ |
Лейбл тенанта для записей логов | string |
tenant-example |
loki_external.labels.resourceRealm |
Лейбл окружения или кластера, из которого отправляются логи | string |
cluster-example |
loki_external.labels.log_type |
Лейбл типа логов | string |
kubernetes |
В примере выше в Loki будут направлены логи: auditd, journald, k8s_audit, k8s_events и k8s_logs. Чтобы изменить перечень направляемых логов, удалите ненужный блок с типом логов из shturval.
Загрузите подготовленный ShturvalServicePatch в кластере через импорт манифестов. После загрузки потребуется некоторое время для применения изменений.
Отправка в Elasticsearch или OpenSearch
Общий шаблон
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: <имя ресурса>
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
<ваше значение>: # Тип логов для перенаправления
enable: true
transforms: {}
sinks:
elastic_bank:
type: <ваше значение параметра>
auth:
user: <ваше значение параметра>
password: <ваше значение параметра>
strategy: <ваше значение параметра>
endpoints:
- <ваше значение параметра>
tls:
verify_certificate: true
api_version: <ваше значение параметра>
buffer:
max_size: <ваше значение параметра>
type: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
metadata.name |
Имя ShturvalServicePatch |
string |
shturval-log-collector-logs |
elastic_bank.type |
Тип получателя данных | string |
elasticsearch |
elastic_bank.auth.user |
Имя учётной записи для подключения к Elasticsearch | string |
username |
elastic_bank.auth.password |
Пароль учётной записи для подключения к Elasticsearch | string |
1234qwe |
elastic_bank.auth.strategy |
Стратегия аутентификации Elasticsearch | string |
basic |
elastic_bank.endpoints |
Список URL-адресов для подключения | array |
https://elastic.bank.local:9200/ |
elastic_bank.api_version |
Версия API Elasticsearch | string |
v8 |
elastic_bank.buffer.max_size |
Размер буфера для хранения логов перед отправкой | int |
268435488 |
elastic_bank.buffer.type |
Тип буфера для хранения логов перед отправкой | string |
disk |
auditd
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-auditd
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
auditd:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- auditd
bulk:
index: "{{ .Values.CLUSTER_NAME }}_auditd-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
k8s_audit
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-kaudit
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- dedot_specific_fields
bulk:
index: "{{ .Values.CLUSTER_NAME }}_kaudit-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
k8s_events
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-kevents
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_events:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- delete_managed_fields
bulk:
index: "{{ .Values.CLUSTER_NAME }}_events-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
k8s_logs
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-klogs
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_logs:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- post_transforms_system_namespaces
bulk:
index: "{{ .Values.CLUSTER_NAME }}_logs-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
user-namespaces:
inputs:
- post_transforms_system_namespaces
bulk:
index: "{{ .Values.CLUSTER_NAME }}_user-logs-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
journald
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-journald
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
journald:
sinks:
elastic_bank:
type: elasticsearch
inputs:
- journald
bulk:
index: "{{ .Values.CLUSTER_NAME }}_journald-%Y.%m.%d"
auth:
user: my_username
password: "my_password"
strategy: basic
endpoints:
- "https://external-opensearch.address:9200"
tls:
verify_certificate: false
api_version: "v8"
buffer:
max_size: 268435488
type: disk
Отправка в syslog
Для перенаправления логов в syslog подготовьте ShturvalServicePatch для shturval-log-collector и добавьте в customvalues блок shturval с требуемыми параметрами.
apiVersion: ops.shturval.tech/v1beta2
kind: ShturvalServicePatch
metadata:
name: shturval-log-collector-syslog
spec:
shturvalServiceConfigName: shturval-log-collector
customvalues:
shturval:
k8s_audit:
sinks:
syslog:
type: socket
inputs:
- <ваше значение параметра>
address: <ваше значение параметра>
mode: <ваше значение параметра>
| Параметр | Описание | Тип данных | Пример |
|---|---|---|---|
k8s_audit.sinks.syslog.inputs |
Преобразования (transforms) для логов k8s_audit. Перечень transforms определён в ClusterVectorPipeline с именем k8s-audit. |
array |
dedot_specific_fields |
k8s_audit.sinks.syslog.address |
Адрес syslog-сервера | string |
11.12.13.14:5000 |
k8s_audit.sinks.syslog.mode |
Тип протокола передачи | string |
tcp |
В примере используется socket. Другие способы настройки перенаправления на syslog-сервер описаны в документации Vector.
Загрузка манифеста
Загрузите подготовленный ShturvalServicePatch в кластере через импорт манифестов.
Скриншот: импорт ShturvalServicePatch для SIEM

Скриншот: импорт ShturvalServicePatch для перенаправления логов

Скриншот: импорт ShturvalServicePatch для syslog

После загрузки ShturvalServicePatch потребуется некоторое время для применения изменений.
Проверка применения
Чтобы проверить, что ShturvalServicePatch применён:
- В кластере откройте раздел Сервисы и репозитории.
- Перейдите на страницу Установленные сервисы.
- Найдите Модуль локального сбора логов (
shturval-log-collector) и откройте управление сервисом. - Проверьте вкладку Сервис: после применения патча статус должен обновиться до Patched.
- Проверьте вкладку Примененные ShturvalServicePatch: в списке должен отображаться загруженный
ShturvalServicePatch.
Скриншоты: применённый ShturvalServicePatch

