iac/infrastructure/vault/uralkal-audit/configmap-audit-shipper.yaml

69 lines
3.5 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Конфиг sidecar'а audit-shipper. Без configMapGenerator намеренно: смена конфига не должна сама
# перезапускать Vault (рестарт = unseal). Изменения применяются ручным рестартом пода по процедуре README.
apiVersion: v1
kind: ConfigMap
metadata:
name: audit-shipper-config
namespace: vault
data:
config.yaml: |
extensions:
file_storage/vault:
directory: /vault/audit/.otelcol
create_directory: true
compaction:
on_start: true
on_rebound: true # очередь bbolt иначе не уменьшается на диске
directory: /vault/audit/.otelcol
receivers:
filelog/vault:
include: [/vault/audit/audit.log*]
exclude: [/vault/audit/.otelcol/*]
start_at: beginning
storage: file_storage/vault
max_log_size: 4MiB
operators:
- type: json_parser
parse_to: body
processors:
memory_limiter: {check_interval: 1s, limit_mib: 150, spike_limit_mib: 50}
transform/vault:
error_mode: ignore
log_statements:
- context: log
statements:
# response-запись содержит и запрос — request-записи отбрасываем (объём ~вдвое меньше)
- set(body["sarex_drop"], true) where body["type"] == "request"
- set(body["sarex_kind"], "vault_audit")
- set(body["sarex_contour"], "${env:CONTOUR}")
- set(body["sarex_outcome"], "applied")
- set(body["sarex_outcome"], "denied_authz") where IsMatch(body["error"], "permission denied")
- set(body["sarex_outcome"], "denied_authn") where body["error"] != nil and body["error"] != "" and IsMatch(body["request"]["path"], "^auth/.+/login")
- set(body["sarex_actor_type"], "serviceaccount") where body["auth"]["metadata"]["service_account_name"] != nil
- set(body["sarex_actor_type"], "human") where body["sarex_actor_type"] == nil
filter/vault:
logs:
log_record: ['body["sarex_drop"] == true']
batch: {send_batch_size: 500, timeout: 2s}
exporters:
otlp/audit:
endpoint: access-collector.security-audit.svc.cluster.local:4319
# Vault и access-collector в mesh: plaintext до istio-proxy пода, дальше auto-mTLS.
# TODO(verify): у подов Vault есть istio-proxy (ns vault: istio-injection=enabled).
tls: {insecure: true}
# Очередь на диске ограничена: 20000 батчей по 500 записей не помещаются в PVC, а полный диск
# останавливает Vault. При заполненной очереди filelog перестаёт читать — буфером служат сами файлы
# журнала (KEEP × MAX_BYTES). TODO(verify): queue_size по замеру объёма.
sending_queue: {enabled: true, storage: file_storage/vault, queue_size: 1000}
retry_on_failure: {enabled: true, max_elapsed_time: 0}
service:
extensions: [file_storage/vault]
pipelines:
logs:
receivers: [filelog/vault]
processors: [memory_limiter, transform/vault, filter/vault, batch]
exporters: [otlp/audit]
telemetry:
logs: {level: info}
metrics: {address: "${env:MY_POD_IP}:8888"}