69 lines
3.5 KiB
YAML
69 lines
3.5 KiB
YAML
# Конфиг 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"}
|