# Журнал аудита Vault: том /vault/audit, общий PID namespace и два sidecar'а. # Чарт vault-contour 0.2.3: auditStorage → volumeClaimTemplates "audit" + mount в контейнер vault; # extraContainers/volumes/shareProcessNamespace — values (toYaml, без tpl). # # Vault — fail-closed: включённый audit device, который не может записать событие, останавливает обслуживание # запросов. Поэтому сеть в пути записи нет (файл + sidecar), а объём на диске ограничен ротацией и очередью. - op: add path: /spec/values/server/auditStorage value: enabled: true size: 5Gi # TODO(verify): по замеру объёма журнала (KEEP × MAX_BYTES + очередь + запас) storageClass: local-path accessMode: ReadWriteOnce mountPath: /vault/audit # Нужен audit-rotate для SIGHUP процессу vault. Побочный эффект: sidecar'ы с UID vault видят его процесс # (/proc//environ; память — при разрешающем kernel.yama.ptrace_scope). См. README, «Решения с последствиями». - op: add path: /spec/values/server/shareProcessNamespace value: true - op: add path: /spec/values/server/volumes value: - name: audit-shipper-config configMap: {name: audit-shipper-config} - name: audit-rotate-script configMap: {name: audit-rotate-script} - op: add path: /spec/values/server/extraContainers value: # filelog → OTLP в access-collector. Чекпоинты и очередь отправки — на том же PVC. # Кредов Kafka здесь нет: Vault Agent в поде Vault невозможен (Vault стартует запечатанным). - name: audit-shipper image: cr.yandex/crp3ccidau046kdj8g9q/opentelemetry-collector/opentelemetry-collector-contrib:0.121.0-amd64 args: ["--config=/conf/config.yaml"] env: - {name: CONTOUR, value: uralkal} - name: MY_POD_IP valueFrom: {fieldRef: {fieldPath: status.podIP}} - {name: GOMEMLIMIT, value: 200MiB} securityContext: &audit-sidecar-security # UID/GID процесса vault (podSecurityContext чарта: 100/1000): файл журнала 0600, владелец — vault. runAsUser: 100 runAsGroup: 1000 runAsNonRoot: true readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: {drop: [ALL]} seccompProfile: {type: RuntimeDefault} resources: requests: {cpu: 25m, memory: 64Mi} limits: {cpu: 200m, memory: 256Mi} volumeMounts: - {name: audit, mountPath: /vault/audit} - {name: audit-shipper-config, mountPath: /conf, readOnly: true} # Ротация по размеру + SIGHUP vault (file device по SIGHUP переоткрывает файл). - name: audit-rotate # busybox 1.37.0 из registry контура (helperImage local-path-provisioner); тег latest закреплён digest'ом. image: cr.yandex/crp3ccidau046kdj8g9q/contour/local-path-provisioner-nn/busybox@sha256:11f85134f388cff5f4c66f9bb4c5942249c1f6f7eb8b3889948d953487b5f7a8 command: ["/bin/sh", "/scripts/rotate.sh"] env: - {name: MAX_BYTES, value: "104857600"} - {name: KEEP, value: "5"} - {name: INTERVAL, value: "30"} securityContext: *audit-sidecar-security # тот же UID: иначе нельзя отправить сигнал vault resources: requests: {cpu: 5m, memory: 16Mi} limits: {cpu: 50m, memory: 32Mi} volumeMounts: - {name: audit, mountPath: /vault/audit} - {name: audit-rotate-script, mountPath: /scripts, readOnly: true}