Compare commits
1 Commits
master
...
token-endp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a740955b1 |
@ -124,10 +124,6 @@ spec:
|
|||||||
value:
|
value:
|
||||||
_default: "36311"
|
_default: "36311"
|
||||||
|
|
||||||
- name: CDE_API_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
- name: API_ADDRESS
|
||||||
value:
|
value:
|
||||||
_default: "0.0.0.0:8080"
|
_default: "0.0.0.0:8080"
|
||||||
|
|||||||
@ -124,10 +124,6 @@ spec:
|
|||||||
value:
|
value:
|
||||||
_default: "36311"
|
_default: "36311"
|
||||||
|
|
||||||
- name: CDE_API_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
|
|
||||||
- name: API_ADDRESS
|
- name: API_ADDRESS
|
||||||
value:
|
value:
|
||||||
_default: "0.0.0.0:8080"
|
_default: "0.0.0.0:8080"
|
||||||
|
|||||||
@ -140,10 +140,6 @@ spec:
|
|||||||
value:
|
value:
|
||||||
_default: "5"
|
_default: "5"
|
||||||
|
|
||||||
- name: CDE_API_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
|
|
||||||
- name: ENABLE_SQL_QUERY
|
- name: ENABLE_SQL_QUERY
|
||||||
value:
|
value:
|
||||||
_default: "0"
|
_default: "0"
|
||||||
|
|||||||
@ -172,10 +172,6 @@ spec:
|
|||||||
value:
|
value:
|
||||||
_default: "production"
|
_default: "production"
|
||||||
|
|
||||||
- name: CDE_API_ENABLED
|
|
||||||
value:
|
|
||||||
_default: "false"
|
|
||||||
|
|
||||||
- name: HOST
|
- name: HOST
|
||||||
value:
|
value:
|
||||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
||||||
|
|||||||
@ -10,7 +10,7 @@ spec:
|
|||||||
backend:
|
backend:
|
||||||
image:
|
image:
|
||||||
name:
|
name:
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/workflows-engine:contour_8a50dd85
|
_default: cr.yandex/crp3ccidau046kdj8g9q/workflows-engine:contour_7d2cd329
|
||||||
deployment:
|
deployment:
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@ -19,19 +19,3 @@ patches:
|
|||||||
target:
|
target:
|
||||||
kind: HelmRelease
|
kind: HelmRelease
|
||||||
name: frontend
|
name: frontend
|
||||||
- target:
|
|
||||||
kind: HelmRelease
|
|
||||||
name: engine-low
|
|
||||||
patch: |-
|
|
||||||
- op: add
|
|
||||||
path: /spec/values/services/backend/envs/-
|
|
||||||
value:
|
|
||||||
name: JOB_TMP_HOST_PATH
|
|
||||||
value:
|
|
||||||
_default: "/mnt/proctmp"
|
|
||||||
- op: add
|
|
||||||
path: /spec/values/services/backend/envs/-
|
|
||||||
value:
|
|
||||||
name: JOB_TMP_HOST_PATH_IMAGE
|
|
||||||
value:
|
|
||||||
_default: "e57-to-las"
|
|
||||||
|
|||||||
@ -29,7 +29,7 @@ spec:
|
|||||||
enabled: true
|
enabled: true
|
||||||
image:
|
image:
|
||||||
name:
|
name:
|
||||||
_default: cr.yandex/crp3ccidau046kdj8g9q/workspaces-v2-frontend:contour_beb51bc2
|
_default: cr.yandex/crp3ccidau046kdj8g9q/workspaces-v2-frontend:contour_2da2a00e
|
||||||
pullPolicy:
|
pullPolicy:
|
||||||
_default: IfNotPresent
|
_default: IfNotPresent
|
||||||
deployment:
|
deployment:
|
||||||
|
|||||||
@ -140,7 +140,7 @@ spec:
|
|||||||
|
|
||||||
- name: DOCUMENTATION_HOST
|
- name: DOCUMENTATION_HOST
|
||||||
value:
|
value:
|
||||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
_default: "https://cde.brusnika.ru/documentations"
|
||||||
|
|
||||||
- name: DOCUMENTATION_LOGGER_FEATURE
|
- name: DOCUMENTATION_LOGGER_FEATURE
|
||||||
value:
|
value:
|
||||||
|
|||||||
@ -140,7 +140,7 @@ spec:
|
|||||||
|
|
||||||
- name: DOCUMENTATION_HOST
|
- name: DOCUMENTATION_HOST
|
||||||
value:
|
value:
|
||||||
_default: "http://documentations-api.documentations.svc.cluster.local:8080"
|
_default: "https://test.sarex.brusnika.tech/documentations"
|
||||||
|
|
||||||
- name: DOCUMENTATION_LOGGER_FEATURE
|
- name: DOCUMENTATION_LOGGER_FEATURE
|
||||||
value:
|
value:
|
||||||
|
|||||||
@ -17,7 +17,6 @@ resources:
|
|||||||
- ../../infrastructure/trino/uralkal
|
- ../../infrastructure/trino/uralkal
|
||||||
- ../../infrastructure/istio-config/uralkal
|
- ../../infrastructure/istio-config/uralkal
|
||||||
- ../../infrastructure/s3-proxy/uralkal
|
- ../../infrastructure/s3-proxy/uralkal
|
||||||
- ../../infrastructure/security-audit/uralkal
|
|
||||||
|
|
||||||
- ../../apps/reviews/uralkal
|
- ../../apps/reviews/uralkal
|
||||||
- ../../apps/remarks/uralkal
|
- ../../apps/remarks/uralkal
|
||||||
@ -55,6 +54,8 @@ resources:
|
|||||||
- ../../apps/pm/uralkal
|
- ../../apps/pm/uralkal
|
||||||
- ../../apps/message-hub/uralkal
|
- ../../apps/message-hub/uralkal
|
||||||
- ../../apps/cde/uralkal
|
- ../../apps/cde/uralkal
|
||||||
|
- ../../apps/postgres-tls-test/uralkal
|
||||||
|
- ../../infrastructure/istio-mtls-check/base
|
||||||
|
|
||||||
patches:
|
patches:
|
||||||
- target:
|
- target:
|
||||||
|
|||||||
@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: security.istio.io/v1
|
||||||
|
kind: AuthorizationPolicy
|
||||||
|
metadata:
|
||||||
|
name: deny-external-token-endpoints
|
||||||
|
namespace: istio-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
istio: ingressgateway
|
||||||
|
action: DENY
|
||||||
|
rules:
|
||||||
|
- to:
|
||||||
|
- operation:
|
||||||
|
paths:
|
||||||
|
- /api/token/user/*
|
||||||
|
- /internal/*
|
||||||
@ -2,5 +2,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
|||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
- ../base
|
- ../base
|
||||||
|
- deny-token-endpoints.yaml
|
||||||
patches:
|
patches:
|
||||||
- path: istio-config.yaml
|
- path: istio-config.yaml
|
||||||
|
|||||||
@ -10,24 +10,21 @@
|
|||||||
| журнал аудита Vault | sidecar `audit-shipper` в подах Vault → `access-collector`, pipeline `logs/vault` | `security.vault-audit` |
|
| журнал аудита Vault | sidecar `audit-shipper` в подах Vault → `access-collector`, pipeline `logs/vault` | `security.vault-audit` |
|
||||||
|
|
||||||
Одно сообщение — одна запись в JSON (`encoding: raw`, без OTLP-обёртки), обогащённая полями `sarex_*`.
|
Одно сообщение — одна запись в JSON (`encoding: raw`, без OTLP-обёртки), обогащённая полями `sarex_*`.
|
||||||
Processor (`audit-processor`, образ `k8s-audit-processor` из `infra/k8s-audit`) читает топик
|
Дальнейшие этапы (processor → MinIO/Parquet) — отдельными компонентами.
|
||||||
`security.k8s-audit` и пишет события в MinIO (Parquet, `events/contour=<c>/dt=…/hour=…`). Его манифесты —
|
|
||||||
`base/processor-*.yaml`, контур-специфика (CONTOUR, брокеры, endpoint MinIO, `log.s3_echo`) — env-патчем
|
|
||||||
в оверлее. Секреты — те же статические Secret'ы, что у коллекторов, плюс `security-audit-minio`.
|
|
||||||
|
|
||||||
С observability-коллектором (`infrastructure/opentelemetry-collector`) не связан: отдельный релиз, namespace и конфиг.
|
С observability-коллектором (`infrastructure/opentelemetry-collector`) не связан: отдельный релиз, namespace и конфиг.
|
||||||
|
|
||||||
| Каталог | Что | Namespace |
|
| Каталог | Что | Namespace |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `base/` | оба коллектора, audit-processor, NetworkPolicy, AuthorizationPolicy, Namespace | `security-audit` |
|
| `base/` | оба коллектора, NetworkPolicy, AuthorizationPolicy, Namespace | `security-audit` |
|
||||||
| `base/idp-actions-bootstrap/` | Job настройки Target/Execution'ов в Zitadel, скрипт и список событий (**сейчас отключён** в `base/kustomization.yaml` — отложено, нет PAT) | `security-audit` |
|
| `base/idp-actions-bootstrap/` | Job настройки Target/Execution'ов в Zitadel, скрипт и список событий | `security-audit` |
|
||||||
| `mesh/` | EnvoyFilter и Telemetry шлюза; без `namespace` в kustomization, селектор шлюза — заглушка | `istio-system` |
|
| `mesh/` | EnvoyFilter и Telemetry шлюза; без `namespace` в kustomization, селектор шлюза — заглушка | `istio-system` |
|
||||||
| `uralkal/` | оверлей: `base` + `mesh`, селектор шлюза, Kafka, `dependsOn`, env audit-processor'а | — |
|
| `uralkal/` | оверлей: `base` + `mesh`, селектор шлюза, Kafka, `dependsOn` | — |
|
||||||
| `../vault/uralkal-audit/` | Vault-часть журнала аудита Vault: оверлей поверх `vault/uralkal` (не подключён) | `vault` |
|
| `../vault/uralkal-audit/` | Vault-часть журнала аудита Vault: оверлей поверх `vault/uralkal` (не подключён) | `vault` |
|
||||||
|
|
||||||
| Оверлей | Статус |
|
| Оверлей | Статус |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `uralkal` | подключён в `clusters/uralkal` |
|
| `uralkal` | манифесты готовы, **в `clusters/uralkal` не подключён** |
|
||||||
|
|
||||||
## Журнал аудита kube-apiserver
|
## Журнал аудита kube-apiserver
|
||||||
|
|
||||||
@ -107,13 +104,16 @@ DaemonSet `audit-collector-agent` на узлах `node-role.kubernetes.io/contr
|
|||||||
|
|
||||||
rm /tmp/admin.properties
|
rm /tmp/admin.properties
|
||||||
```
|
```
|
||||||
3. **Креды Kafka — статические Secret'ы** в namespace `security-audit` (роли в Vault не заведены, агент-инжектор
|
3. **Vault** (`secrets/` — KV v2):
|
||||||
не используется):
|
- секрет `secrets/data/security-audit/kafka` с ключами `username`, `password`, `ca_crt`;
|
||||||
- Secret `security-audit-kafka` с ключами `username`, `password` (SCRAM-пользователь `security-audit`);
|
`ca_crt` — содержимое `ca.crt` из Secret `kafka/kafka-kafka-contour-tls` (CA генерирует чарт `kafka-contour`,
|
||||||
- Secret `kafka-ca` с ключом `ca.crt` — содержимое `ca.crt` из Secret `kafka/kafka-kafka-contour-tls`
|
срок 365 дней; при перевыпуске обновить и здесь);
|
||||||
(CA генерирует чарт `kafka-contour`, срок 365 дней; при перевыпуске обновить и здесь).
|
- политика `read` на `secrets/data/security-audit/kafka`;
|
||||||
Оба монтируются projected volume'ом в `/vault/secrets` под именами `kafka-username`, `kafka-password`,
|
- роль `security-audit` в `auth/kubernetes`: bound SA `audit-collector` **и** `access-collector`, namespace
|
||||||
`kafka-ca.crt` — конфиг коллекторов (`${file:...}`, `ca_file`) не меняется.
|
`security-audit`, политика выше.
|
||||||
|
|
||||||
|
Заводится в `infra/terraform`, ветка `contour`, модуль `vault-platform-secrets` (роли `vault_kubernetes_auth_backend_role`,
|
||||||
|
KV-секреты).
|
||||||
4. **Образ** `cr.yandex/crp3ccidau046kdj8g9q/opentelemetry-collector/opentelemetry-collector-contrib:0.121.0-amd64`
|
4. **Образ** `cr.yandex/crp3ccidau046kdj8g9q/opentelemetry-collector/opentelemetry-collector-contrib:0.121.0-amd64`
|
||||||
доступен в registry контура (тот же, что дефолт чарта `opentelemetry-collector-prod` 0.117.1), `regcred` есть в
|
доступен в registry контура (тот же, что дефолт чарта `opentelemetry-collector-prod` 0.117.1), `regcred` есть в
|
||||||
namespace `security-audit`.
|
namespace `security-audit`.
|
||||||
@ -126,7 +126,7 @@ DaemonSet `audit-collector-agent` на узлах `node-role.kubernetes.io/contr
|
|||||||
- ../../infrastructure/security-audit/uralkal
|
- ../../infrastructure/security-audit/uralkal
|
||||||
```
|
```
|
||||||
|
|
||||||
`dependsOn` в оверлее ждёт HelmRelease `kafka/kafka`.
|
`dependsOn` в оверлее ждёт HelmRelease `kafka/kafka` и `vault/vault`.
|
||||||
|
|
||||||
Порядок: сначала должен раскататься провайдер `audit-access` в istiod (`infrastructure/istio-pilot/uralkal/istio-pilot.yaml`,
|
Порядок: сначала должен раскататься провайдер `audit-access` в istiod (`infrastructure/istio-pilot/uralkal/istio-pilot.yaml`,
|
||||||
применяется сразу, как только попадёт в master: кластер его уже подключает). Telemetry из `mesh/` ссылается на этот провайдер по имени. Проверка:
|
применяется сразу, как только попадёт в master: кластер его уже подключает). Telemetry из `mesh/` ссылается на этот провайдер по имени. Проверка:
|
||||||
@ -260,8 +260,9 @@ spec:
|
|||||||
Метка `istio-injection: disabled` отключила бы инъекцию совсем, даже по метке пода.
|
Метка `istio-injection: disabled` отключила бы инъекцию совсем, даже по метке пода.
|
||||||
- `PeerAuthentication` в репозитории нет, поэтому режим PERMISSIVE. Шлюз шлёт в коллектор по auto-mTLS (оба в mesh),
|
- `PeerAuthentication` в репозитории нет, поэтому режим PERMISSIVE. Шлюз шлёт в коллектор по auto-mTLS (оба в mesh),
|
||||||
коллектор в Kafka — тоже через mTLS (`kafka` в mesh), внутри остаётся `SASL_SSL`.
|
коллектор в Kafka — тоже через mTLS (`kafka` в mesh), внутри остаётся `SASL_SSL`.
|
||||||
- Креды Kafka — статические Secret'ы (projected volume в `/vault/secrets`), Vault Agent не используется:
|
- Vault Agent (`agent-init-first`, pre-populate) + istio-proxy: по паттерну контура (`apps/bi`, `apps/bim`, `apps/cde`…)
|
||||||
роли `security-audit` в Vault контура нет.
|
`traffic.sidecar.istio.io/excludeOutboundPorts: "8200"`. Init-агент ходит в Vault мимо iptables-перехвата,
|
||||||
|
даже если `istio-init` отработал раньше.
|
||||||
- `holdApplicationUntilProxyStarts`: kafka exporter подключается к брокерам на старте и без готового proxy падает.
|
- `holdApplicationUntilProxyStarts`: kafka exporter подключается к брокерам на старте и без готового proxy падает.
|
||||||
- `istio-init` требует `NET_ADMIN`/`NET_RAW`: enforce `privileged` это разрешает, профиль `warn: baseline` даст
|
- `istio-init` требует `NET_ADMIN`/`NET_RAW`: enforce `privileged` это разрешает, профиль `warn: baseline` даст
|
||||||
предупреждения при создании подов — ожидаемо.
|
предупреждения при создании подов — ожидаемо.
|
||||||
@ -381,8 +382,8 @@ HTTP-probe на pilot-agent `:15020`, а тот ходит в приложени
|
|||||||
- **Mesh.** Job в mesh (`sidecar.istio.io/inject=true`, `holdApplicationUntilProxyStarts`). В конце скрипт вызывает
|
- **Mesh.** Job в mesh (`sidecar.istio.io/inject=true`, `holdApplicationUntilProxyStarts`). В конце скрипт вызывает
|
||||||
`POST 127.0.0.1:15020/quitquitquit`, istio-proxy завершается, под — `Completed`. STRICT mTLS у Zitadel сейчас нет, но
|
`POST 127.0.0.1:15020/quitquitquit`, istio-proxy завершается, под — `Completed`. STRICT mTLS у Zitadel сейчас нет, но
|
||||||
Job к нему готов.
|
Job к нему готов.
|
||||||
- **PAT:** статический Secret в namespace `security-audit` (роли в Vault нет), монтируется в
|
- **Vault:** роль `security-audit-bootstrap`, `secrets/data/security-audit/zitadel-bootstrap` → `pat` →
|
||||||
`/vault/secrets/zitadel-pat`; имя Secret'а и ключа — в `job.yaml`, сверить с созданным в контуре.
|
`/vault/secrets/zitadel-pat`; `excludeOutboundPorts: 8200` — паттерн контура.
|
||||||
- **Скрипт** (`files/idp-actions-bootstrap.sh`, POSIX sh) идемпотентен:
|
- **Скрипт** (`files/idp-actions-bootstrap.sh`, POSIX sh) идемпотентен:
|
||||||
1. ждёт `/debug/ready` (10 попыток × 15 с);
|
1. ждёт `/debug/ready` (10 попыток × 15 с);
|
||||||
2. печатает все типы событий инстанса (`known: …`, `POST /admin/v1/events/types/_search`);
|
2. печатает все типы событий инстанса (`known: …`, `POST /admin/v1/events/types/_search`);
|
||||||
@ -404,8 +405,10 @@ HTTP-probe на pilot-agent `:15020`, а тот ходит в приложени
|
|||||||
- Топик `security.idp-events`: 3 партиции, `retention.ms=259200000`, RF по контуру, тем же путём, что остальные
|
- Топик `security.idp-events`: 3 партиции, `retention.ms=259200000`, RF по контуру, тем же путём, что остальные
|
||||||
топики. Пользователь `security-audit`, ACL не нужны.
|
топики. Пользователь `security-audit`, ACL не нужны.
|
||||||
- Сервисный пользователь Zitadel `security-audit-bootstrap` (machine user) с ролью `IAM_OWNER` на инстансе.
|
- Сервисный пользователь Zitadel `security-audit-bootstrap` (machine user) с ролью `IAM_OWNER` на инстансе.
|
||||||
Нужны `action.target.read/write/delete`, `action.execution.read/write`, `events.read`. Его PAT — ключ
|
Нужны `action.target.read/write/delete`, `action.execution.read/write`, `events.read`. Его PAT — во Vault
|
||||||
в статическом Secret'е namespace `security-audit` (см. `base/idp-actions-bootstrap/job.yaml`).
|
`secrets/data/security-audit/zitadel-bootstrap`, ключ `pat`.
|
||||||
|
- Роль Vault `security-audit-bootstrap` в `auth/kubernetes`: bound SA `idp-actions-bootstrap`, namespace `security-audit`,
|
||||||
|
политика `read` на `secrets/data/security-audit/zitadel-bootstrap`.
|
||||||
- Feature flag не нужен: в v4.12.2 `actions` в `/v2/features/instance` удалён (reserved), Actions v2 включены всегда.
|
- Feature flag не нужен: в v4.12.2 `actions` в `/v2/features/instance` удалён (reserved), Actions v2 включены всегда.
|
||||||
|
|
||||||
Проверка API изнутри кластера (ожидается `"https://login.sarex.local.uralkali.com"`):
|
Проверка API изнутри кластера (ожидается `"https://login.sarex.local.uralkali.com"`):
|
||||||
|
|||||||
@ -118,24 +118,31 @@ spec:
|
|||||||
sidecar.istio.io/inject: "true"
|
sidecar.istio.io/inject: "true"
|
||||||
# Kafka exporter подключается к брокерам на старте: без готового istio-proxy коллектор упадёт.
|
# Kafka exporter подключается к брокерам на старте: без готового istio-proxy коллектор упадёт.
|
||||||
proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true}'
|
proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true}'
|
||||||
|
# Паттерн контура для Vault + sidecar (apps/*/base): трафик агента к Vault мимо istio-proxy.
|
||||||
# Креды Kafka — статические Secret'ы namespace (роли security-audit в Vault нет).
|
traffic.sidecar.istio.io/excludeOutboundPorts: "8200"
|
||||||
# Те же пути /vault/secrets/..., что читает конфиг: ${file:...} и ca_file.
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
extraVolumes:
|
vault.hashicorp.com/agent-init-first: "true"
|
||||||
- name: kafka-secrets
|
vault.hashicorp.com/agent-pre-populate-only: "true"
|
||||||
projected:
|
vault.hashicorp.com/agent-requests-cpu: "25m"
|
||||||
sources:
|
vault.hashicorp.com/agent-limits-cpu: "100m"
|
||||||
- secret:
|
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||||
name: security-audit-kafka
|
vault.hashicorp.com/role: security-audit
|
||||||
items:
|
# Многострочные шаблоны — см. helmrelease-collector.yaml (toYaml | tpl в чарте).
|
||||||
- {key: username, path: kafka-username}
|
vault.hashicorp.com/agent-inject-secret-kafka-username: secrets/data/security-audit/kafka
|
||||||
- {key: password, path: kafka-password}
|
vault.hashicorp.com/agent-inject-template-kafka-username: |-
|
||||||
- secret:
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
name: kafka-ca
|
{{ "{{ .Data.data.username }}" }}
|
||||||
items:
|
{{ "{{- end -}}" }}
|
||||||
- {key: ca.crt, path: kafka-ca.crt}
|
vault.hashicorp.com/agent-inject-secret-kafka-password: secrets/data/security-audit/kafka
|
||||||
extraVolumeMounts:
|
vault.hashicorp.com/agent-inject-template-kafka-password: |-
|
||||||
- {name: kafka-secrets, mountPath: /vault/secrets, readOnly: true}
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
|
{{ "{{ .Data.data.password }}" }}
|
||||||
|
{{ "{{- end -}}" }}
|
||||||
|
vault.hashicorp.com/agent-inject-secret-kafka-ca.crt: secrets/data/security-audit/kafka
|
||||||
|
vault.hashicorp.com/agent-inject-template-kafka-ca.crt: |-
|
||||||
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
|
{{ "{{ .Data.data.ca_crt }}" }}
|
||||||
|
{{ "{{- end -}}" }}
|
||||||
|
|
||||||
# Контур-специфичное (CONTOUR, KAFKA_BROKERS) задаётся в оверлее через extraEnvs.
|
# Контур-специфичное (CONTOUR, KAFKA_BROKERS) задаётся в оверлее через extraEnvs.
|
||||||
alternateConfig:
|
alternateConfig:
|
||||||
|
|||||||
@ -51,7 +51,7 @@ spec:
|
|||||||
create: false
|
create: false
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
create: true
|
create: true
|
||||||
name: audit-collector # bound SA роли Vault security-audit — если вернёмся на Vault Agent
|
name: audit-collector # = роль Vault security-audit, bound SA
|
||||||
presets:
|
presets:
|
||||||
logsCollection: {enabled: false}
|
logsCollection: {enabled: false}
|
||||||
hostMetrics: {enabled: false}
|
hostMetrics: {enabled: false}
|
||||||
@ -96,31 +96,39 @@ spec:
|
|||||||
hostPath: {path: /var/log/audit, type: DirectoryOrCreate}
|
hostPath: {path: /var/log/audit, type: DirectoryOrCreate}
|
||||||
- name: otelcol-storage
|
- name: otelcol-storage
|
||||||
hostPath: {path: /var/lib/otelcol-audit, type: DirectoryOrCreate}
|
hostPath: {path: /var/lib/otelcol-audit, type: DirectoryOrCreate}
|
||||||
# Креды Kafka — статические Secret'ы namespace (роли security-audit в Vault нет).
|
|
||||||
# Projected volume складывает оба Secret'а в /vault/secrets под теми же именами файлов,
|
|
||||||
# что читает конфиг: ${file:/vault/secrets/kafka-username|kafka-password}, ca_file=kafka-ca.crt.
|
|
||||||
- name: kafka-secrets
|
|
||||||
projected:
|
|
||||||
sources:
|
|
||||||
- secret:
|
|
||||||
name: security-audit-kafka
|
|
||||||
items:
|
|
||||||
- {key: username, path: kafka-username}
|
|
||||||
- {key: password, path: kafka-password}
|
|
||||||
- secret:
|
|
||||||
name: kafka-ca
|
|
||||||
items:
|
|
||||||
- {key: ca.crt, path: kafka-ca.crt}
|
|
||||||
extraVolumeMounts:
|
extraVolumeMounts:
|
||||||
- {name: audit-log, mountPath: /var/log/audit, readOnly: true}
|
- {name: audit-log, mountPath: /var/log/audit, readOnly: true}
|
||||||
- {name: otelcol-storage, mountPath: /var/lib/otelcol-audit}
|
- {name: otelcol-storage, mountPath: /var/lib/otelcol-audit}
|
||||||
- {name: kafka-secrets, mountPath: /vault/secrets, readOnly: true}
|
|
||||||
|
|
||||||
# Метка исключает под из webhook'а инъекции Istio ещё до мутации (namespace без istio-injection).
|
# Метка исключает под из webhook'а инъекции Istio ещё до мутации (namespace без istio-injection).
|
||||||
podLabels:
|
podLabels:
|
||||||
sidecar.istio.io/inject: "false"
|
sidecar.istio.io/inject: "false"
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
sidecar.istio.io/inject: "false"
|
sidecar.istio.io/inject: "false"
|
||||||
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
|
vault.hashicorp.com/agent-init-first: "true"
|
||||||
|
vault.hashicorp.com/agent-pre-populate-only: "true"
|
||||||
|
vault.hashicorp.com/agent-requests-cpu: "25m"
|
||||||
|
vault.hashicorp.com/agent-limits-cpu: "100m"
|
||||||
|
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||||
|
vault.hashicorp.com/role: security-audit
|
||||||
|
# Чарт рендерит podAnnotations через toYaml | tpl: однострочный шаблон toYaml переносит,
|
||||||
|
# и литерал {{ "..." }} рвётся. Поэтому по строке на действие (block scalar не переносится).
|
||||||
|
vault.hashicorp.com/agent-inject-secret-kafka-username: secrets/data/security-audit/kafka
|
||||||
|
vault.hashicorp.com/agent-inject-template-kafka-username: |-
|
||||||
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
|
{{ "{{ .Data.data.username }}" }}
|
||||||
|
{{ "{{- end -}}" }}
|
||||||
|
vault.hashicorp.com/agent-inject-secret-kafka-password: secrets/data/security-audit/kafka
|
||||||
|
vault.hashicorp.com/agent-inject-template-kafka-password: |-
|
||||||
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
|
{{ "{{ .Data.data.password }}" }}
|
||||||
|
{{ "{{- end -}}" }}
|
||||||
|
vault.hashicorp.com/agent-inject-secret-kafka-ca.crt: secrets/data/security-audit/kafka
|
||||||
|
vault.hashicorp.com/agent-inject-template-kafka-ca.crt: |-
|
||||||
|
{{ "{{- with secret \"secrets/data/security-audit/kafka\" -}}" }}
|
||||||
|
{{ "{{ .Data.data.ca_crt }}" }}
|
||||||
|
{{ "{{- end -}}" }}
|
||||||
|
|
||||||
# Контур-специфичное (CONTOUR, KAFKA_BROKERS) задаётся в оверлее через extraEnvs.
|
# Контур-специфичное (CONTOUR, KAFKA_BROKERS) задаётся в оверлее через extraEnvs.
|
||||||
# Полный конфиг вместо мержа с дефолтами чарта.
|
# Полный конфиг вместо мержа с дефолтами чарта.
|
||||||
@ -152,28 +160,16 @@ spec:
|
|||||||
check_interval: 1s
|
check_interval: 1s
|
||||||
limit_mib: 400
|
limit_mib: 400
|
||||||
spike_limit_mib: 100
|
spike_limit_mib: 100
|
||||||
# Отрезание шума до transform и Kafka: бесконечные опросы Flux-контроллеров
|
|
||||||
# (helm/kustomize/source: get/list/watch на ресурсах fluxcd). Мутации GitOps
|
|
||||||
# (create/update/patch/delete) остаются — они и есть след изменений через GitOps.
|
|
||||||
# Фильтр намеренно узкий: чтения других акторов (kube-system, операторы) не трогаем.
|
|
||||||
filter/audit:
|
|
||||||
error_mode: ignore
|
|
||||||
logs:
|
|
||||||
# Ключ именно log_record (singular) — так в filterprocessor 0.121 (config.go).
|
|
||||||
# Запись отбрасывается, если любое условие истинно.
|
|
||||||
log_record:
|
|
||||||
- 'IsMatch(body["user"]["username"], "^system:serviceaccount:flux-system:") and (body["verb"] == "get" or body["verb"] == "list" or body["verb"] == "watch")'
|
|
||||||
transform/audit:
|
transform/audit:
|
||||||
error_mode: ignore
|
error_mode: ignore
|
||||||
log_statements:
|
log_statements:
|
||||||
- context: log
|
- context: log
|
||||||
statements:
|
statements:
|
||||||
# --- объём и шум (guard'ы IsMap: у части событий requestObject — массив или без metadata/annotations;
|
# --- объём и шум ---
|
||||||
# and в OTTL short-circuit, поэтому индексация вглубь выполняется только для map) ---
|
- delete_key(body["requestObject"]["metadata"], "managedFields") where body["requestObject"] != nil
|
||||||
- delete_key(body["requestObject"]["metadata"], "managedFields") where IsMap(body["requestObject"]) and IsMap(body["requestObject"]["metadata"])
|
- delete_key(body["responseObject"]["metadata"], "managedFields") where body["responseObject"] != nil
|
||||||
- delete_key(body["responseObject"]["metadata"], "managedFields") where IsMap(body["responseObject"]) and IsMap(body["responseObject"]["metadata"])
|
- delete_key(body["requestObject"]["metadata"]["annotations"], "kubectl.kubernetes.io/last-applied-configuration") where body["requestObject"] != nil
|
||||||
- delete_key(body["requestObject"]["metadata"]["annotations"], "kubectl.kubernetes.io/last-applied-configuration") where IsMap(body["requestObject"]) and IsMap(body["requestObject"]["metadata"]) and IsMap(body["requestObject"]["metadata"]["annotations"])
|
- delete_key(body["responseObject"]["metadata"]["annotations"], "kubectl.kubernetes.io/last-applied-configuration") where body["responseObject"] != nil
|
||||||
- delete_key(body["responseObject"]["metadata"]["annotations"], "kubectl.kubernetes.io/last-applied-configuration") where IsMap(body["responseObject"]) and IsMap(body["responseObject"]["metadata"]) and IsMap(body["responseObject"]["metadata"]["annotations"])
|
|
||||||
# --- маскирование (п.23): значения, а не сама команда exec ---
|
# --- маскирование (п.23): значения, а не сама команда exec ---
|
||||||
- replace_pattern(body["requestURI"], "(?i)(password|passwd|pwd|token|secret|api[_-]?key)(=|%3D)[^&]*", "$$1$$2***")
|
- replace_pattern(body["requestURI"], "(?i)(password|passwd|pwd|token|secret|api[_-]?key)(=|%3D)[^&]*", "$$1$$2***")
|
||||||
# --- обогащение ---
|
# --- обогащение ---
|
||||||
@ -240,7 +236,7 @@ spec:
|
|||||||
pipelines:
|
pipelines:
|
||||||
logs/audit:
|
logs/audit:
|
||||||
receivers: [filelog/audit]
|
receivers: [filelog/audit]
|
||||||
processors: [memory_limiter, filter/audit, transform/audit, batch]
|
processors: [memory_limiter, transform/audit, batch]
|
||||||
exporters: [kafka/audit]
|
exporters: [kafka/audit]
|
||||||
telemetry:
|
telemetry:
|
||||||
logs:
|
logs:
|
||||||
|
|||||||
@ -19,6 +19,19 @@ spec:
|
|||||||
annotations:
|
annotations:
|
||||||
sidecar.istio.io/inject: "true"
|
sidecar.istio.io/inject: "true"
|
||||||
proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true}'
|
proxy.istio.io/config: '{"holdApplicationUntilProxyStarts": true}'
|
||||||
|
traffic.sidecar.istio.io/excludeOutboundPorts: "8200" # Vault мимо istio-proxy (паттерн контура)
|
||||||
|
vault.hashicorp.com/agent-inject: "true"
|
||||||
|
vault.hashicorp.com/agent-init-first: "true"
|
||||||
|
vault.hashicorp.com/agent-pre-populate-only: "true"
|
||||||
|
vault.hashicorp.com/agent-requests-cpu: "25m"
|
||||||
|
vault.hashicorp.com/agent-limits-cpu: "100m"
|
||||||
|
vault.hashicorp.com/auth-path: auth/kubernetes
|
||||||
|
vault.hashicorp.com/role: security-audit-bootstrap
|
||||||
|
vault.hashicorp.com/agent-inject-secret-zitadel-pat: secrets/data/security-audit/zitadel-bootstrap
|
||||||
|
vault.hashicorp.com/agent-inject-template-zitadel-pat: |-
|
||||||
|
{{- with secret "secrets/data/security-audit/zitadel-bootstrap" -}}
|
||||||
|
{{ .Data.data.pat }}
|
||||||
|
{{- end -}}
|
||||||
spec:
|
spec:
|
||||||
serviceAccountName: idp-actions-bootstrap
|
serviceAccountName: idp-actions-bootstrap
|
||||||
restartPolicy: Never
|
restartPolicy: Never
|
||||||
@ -69,7 +82,6 @@ spec:
|
|||||||
- {name: script, mountPath: /scripts, readOnly: true}
|
- {name: script, mountPath: /scripts, readOnly: true}
|
||||||
- {name: events, mountPath: /config, readOnly: true}
|
- {name: events, mountPath: /config, readOnly: true}
|
||||||
- {name: tmp, mountPath: /tmp}
|
- {name: tmp, mountPath: /tmp}
|
||||||
- {name: zitadel-pat, mountPath: /vault/secrets, readOnly: true}
|
|
||||||
volumes:
|
volumes:
|
||||||
- {name: tools, emptyDir: {sizeLimit: 16Mi}}
|
- {name: tools, emptyDir: {sizeLimit: 16Mi}}
|
||||||
- {name: tmp, emptyDir: {medium: Memory, sizeLimit: 16Mi}} # заголовки с PAT — только в памяти
|
- {name: tmp, emptyDir: {medium: Memory, sizeLimit: 16Mi}} # заголовки с PAT — только в памяти
|
||||||
@ -77,10 +89,3 @@ spec:
|
|||||||
configMap: {name: idp-actions-bootstrap-script}
|
configMap: {name: idp-actions-bootstrap-script}
|
||||||
- name: events
|
- name: events
|
||||||
configMap: {name: idp-actions-bootstrap-events}
|
configMap: {name: idp-actions-bootstrap-events}
|
||||||
# PAT machine user'а security-audit-bootstrap — статический Secret (роли в Vault нет).
|
|
||||||
# TODO(verify): имя Secret'а и ключа сверить с созданным в контуре; скрипт читает PAT_FILE=/vault/secrets/zitadel-pat.
|
|
||||||
- name: zitadel-pat
|
|
||||||
secret:
|
|
||||||
secretName: security-audit-kafka
|
|
||||||
items:
|
|
||||||
- {key: zitadel_pat, path: zitadel-pat}
|
|
||||||
|
|||||||
@ -8,12 +8,4 @@ resources:
|
|||||||
- authorizationpolicy-access-collector.yaml
|
- authorizationpolicy-access-collector.yaml
|
||||||
- helmrelease-collector.yaml
|
- helmrelease-collector.yaml
|
||||||
- helmrelease-access-collector.yaml
|
- helmrelease-access-collector.yaml
|
||||||
- processor-serviceaccount.yaml
|
- idp-actions-bootstrap
|
||||||
- processor-configmap.yaml
|
|
||||||
- processor-deployment.yaml
|
|
||||||
- processor-networkpolicy.yaml
|
|
||||||
# События Zitadel отложены: нет PAT machine user'а security-audit-bootstrap (роли в Vault нет,
|
|
||||||
# статический Secret не заведён). Обратное включение: раскомментировать здесь и патч
|
|
||||||
# idp-actions-bootstrap.yaml в оверлее uralkal, добавить ключ zitadel_pat в Secret.
|
|
||||||
# Пайплайн logs/idp в access-collector при этом инертен: без Job Target в Zitadel не создаётся.
|
|
||||||
# - idp-actions-bootstrap
|
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
# Коллектору нужны только DNS и Kafka. Входящие — только health-check kubelet'а.
|
# Коллектору нужны только DNS, Kafka и Vault (агент-инжектор). Входящие — только health-check kubelet'а.
|
||||||
# (Раньше был egress в Vault для агента-инжектора; креды — статические Secret'ы.)
|
|
||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: NetworkPolicy
|
kind: NetworkPolicy
|
||||||
metadata:
|
metadata:
|
||||||
@ -26,3 +25,8 @@ spec:
|
|||||||
ports:
|
ports:
|
||||||
# client-листенер SASL_SSL: bootstrap kafka-kafka-contour и advertised-адреса подов controller-headless
|
# client-листенер SASL_SSL: bootstrap kafka-kafka-contour и advertised-адреса подов controller-headless
|
||||||
- {port: 9092, protocol: TCP}
|
- {port: 9092, protocol: TCP}
|
||||||
|
- to:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels: {kubernetes.io/metadata.name: vault}
|
||||||
|
ports:
|
||||||
|
- {port: 8200, protocol: TCP} # vault-vault-contour.vault.svc:8200 (AGENT_INJECT_VAULT_ADDR)
|
||||||
|
|||||||
@ -1,63 +0,0 @@
|
|||||||
# Конфиг audit-processor (образ k8s-audit-processor, CONFIG_PATH=/etc/k8s-audit/config.yaml).
|
|
||||||
# Контур-специфичные значения (contour, kafka.brokers, minio.endpoint, app.env, log.s3_echo)
|
|
||||||
# задаёт оверлей через env K8S_AUDIT_* — см. uralkal/kustomization.yaml.
|
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: audit-processor-config
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
data:
|
|
||||||
config.yaml: |
|
|
||||||
contour: "" # K8S_AUDIT_CONTOUR
|
|
||||||
|
|
||||||
app:
|
|
||||||
name: audit-processor
|
|
||||||
env: dev # K8S_AUDIT_APP_ENV
|
|
||||||
|
|
||||||
log:
|
|
||||||
level: info
|
|
||||||
output: stdout
|
|
||||||
add_source: false
|
|
||||||
access_log: true
|
|
||||||
audit_events: false # поток ИБ не идёт в прикладные логи (п.20)
|
|
||||||
s3_echo: false # K8S_AUDIT_LOG_S3_ECHO; только отладка (п.20)
|
|
||||||
|
|
||||||
# Пайплайны чтения: один consumer group вычитывает все топики списка.
|
|
||||||
# Ключ верхнего уровня (config.Pipelines), НЕ внутри kafka.
|
|
||||||
# kafka.topic НЕ удалять — без pipelines (откат на старый образ) читается он.
|
|
||||||
pipelines:
|
|
||||||
# - {topic: security.k8s-audit, kind: k8s_audit}
|
|
||||||
- {topic: security.mesh-access, kind: mesh_access}
|
|
||||||
|
|
||||||
kafka:
|
|
||||||
brokers: [] # K8S_AUDIT_KAFKA_BROKERS
|
|
||||||
topic: security.k8s-audit
|
|
||||||
group: security-audit-processor
|
|
||||||
start_from: earliest # latest перескочил бы события после разрыва offset'ов
|
|
||||||
session_timeout: 45s
|
|
||||||
rebalance_timeout: 60s
|
|
||||||
tls:
|
|
||||||
enabled: true
|
|
||||||
ca_file: /vault/secrets/kafka-ca.crt
|
|
||||||
sasl:
|
|
||||||
mechanism: SCRAM-SHA-512
|
|
||||||
username_file: /vault/secrets/kafka-username
|
|
||||||
password_file: /vault/secrets/kafka-password
|
|
||||||
|
|
||||||
minio:
|
|
||||||
endpoint: "" # K8S_AUDIT_MINIO_ENDPOINT
|
|
||||||
bucket: security-audit
|
|
||||||
secure: false # внешний MinIO контура — plain HTTP (ServiceEntry minio.uralkal.external)
|
|
||||||
access_key_file: /vault/secrets/minio-access-key
|
|
||||||
secret_key_file: /vault/secrets/minio-secret-key
|
|
||||||
|
|
||||||
http:
|
|
||||||
host: 0.0.0.0
|
|
||||||
port: 8000 # /healthz, /readyz, /metrics
|
|
||||||
|
|
||||||
stream:
|
|
||||||
flush_interval: 1m # как часто сбрасывать буфер в MinIO (и коммитить offset'ы)
|
|
||||||
flush_max_rows: 10000 # или раньше, при стольких строках
|
|
||||||
flush_timeout: 30s # меньше kafka.rebalance_timeout
|
|
||||||
max_flush_failures: 30
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: audit-processor
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
spec:
|
|
||||||
replicas: 1 # consumer group: партиция security.k8s-audit одна, вторая реплика была бы standby
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
# Без sidecar: в Kafka процессор ходит напрямую SASL_SSL (как audit-collector),
|
|
||||||
# во внешний MinIO — мимо mesh (ServiceEntry, HTTP).
|
|
||||||
sidecar.istio.io/inject: "false"
|
|
||||||
annotations:
|
|
||||||
sidecar.istio.io/inject: "false"
|
|
||||||
spec:
|
|
||||||
serviceAccountName: audit-processor
|
|
||||||
imagePullSecrets:
|
|
||||||
- name: regcred
|
|
||||||
securityContext:
|
|
||||||
seccompProfile: {type: RuntimeDefault}
|
|
||||||
containers:
|
|
||||||
- name: audit-processor
|
|
||||||
# Образ FROM scratch, USER 65534; CONFIG_PATH=/etc/k8s-audit/config.yaml — в ENTRYPOINT образа.
|
|
||||||
# Digest, а не тег (п.38): релиз с поддержкой pipelines (k8s-audit@05a186a).
|
|
||||||
image: cr.yandex/crp3ccidau046kdj8g9q/k8s-audit-processor@sha256:56a23bec64fe6abdabebbc67806c4d5677486dca5ad5aac01b17db09d768bc72
|
|
||||||
ports:
|
|
||||||
- {name: http, containerPort: 8000}
|
|
||||||
readinessProbe:
|
|
||||||
httpGet: {path: /readyz, port: http}
|
|
||||||
periodSeconds: 10
|
|
||||||
livenessProbe:
|
|
||||||
httpGet: {path: /healthz, port: http}
|
|
||||||
periodSeconds: 20
|
|
||||||
resources:
|
|
||||||
requests: {cpu: 50m, memory: 128Mi}
|
|
||||||
limits: {cpu: 500m, memory: 512Mi}
|
|
||||||
securityContext:
|
|
||||||
runAsNonRoot: true
|
|
||||||
runAsUser: 65534
|
|
||||||
runAsGroup: 65534
|
|
||||||
readOnlyRootFilesystem: true
|
|
||||||
allowPrivilegeEscalation: false
|
|
||||||
capabilities:
|
|
||||||
drop: [ALL]
|
|
||||||
volumeMounts:
|
|
||||||
- {name: config, mountPath: /etc/k8s-audit, readOnly: true}
|
|
||||||
# Те же Secret'ы и имена файлов, что у коллекторов (плюс ключи MinIO).
|
|
||||||
- {name: secrets, mountPath: /vault/secrets, readOnly: true}
|
|
||||||
volumes:
|
|
||||||
- name: config
|
|
||||||
configMap: {name: audit-processor-config}
|
|
||||||
- name: secrets
|
|
||||||
projected:
|
|
||||||
sources:
|
|
||||||
- secret:
|
|
||||||
name: security-audit-kafka
|
|
||||||
items:
|
|
||||||
- {key: username, path: kafka-username}
|
|
||||||
- {key: password, path: kafka-password}
|
|
||||||
- secret:
|
|
||||||
name: kafka-ca
|
|
||||||
items:
|
|
||||||
- {key: ca.crt, path: kafka-ca.crt}
|
|
||||||
- secret:
|
|
||||||
name: security-audit-minio
|
|
||||||
items:
|
|
||||||
- {key: access_key, path: minio-access-key}
|
|
||||||
- {key: secret_key, path: minio-secret-key}
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
# Процессору нужны: Kafka (чтение топика), внешний MinIO (запись Parquet), DNS.
|
|
||||||
# Входящие — только пробы и метрики (:8000). Складывается с общей политикой audit-collector
|
|
||||||
# (podSelector {}): её правила DNS и Kafka дублировать не обязательно, но оставляем автономность.
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: audit-processor
|
|
||||||
spec:
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
policyTypes: [Ingress, Egress]
|
|
||||||
ingress:
|
|
||||||
- ports:
|
|
||||||
- {port: 8000, protocol: TCP} # /healthz, /readyz (kubelet), /metrics
|
|
||||||
egress:
|
|
||||||
- to:
|
|
||||||
- namespaceSelector:
|
|
||||||
matchLabels: {kubernetes.io/metadata.name: kube-system}
|
|
||||||
podSelector:
|
|
||||||
matchLabels: {k8s-app: kube-dns}
|
|
||||||
- ipBlock: {cidr: 169.254.25.10/32} # nodelocaldns kubespray
|
|
||||||
ports:
|
|
||||||
- {port: 53, protocol: UDP}
|
|
||||||
- {port: 53, protocol: TCP}
|
|
||||||
- to:
|
|
||||||
- namespaceSelector:
|
|
||||||
matchLabels: {kubernetes.io/metadata.name: kafka}
|
|
||||||
ports:
|
|
||||||
- {port: 9092, protocol: TCP} # client-листенер SASL_SSL
|
|
||||||
- to:
|
|
||||||
- ipBlock: {cidr: 10.133.0.245/32} # внешний MinIO контура (minio.uralkal.external)
|
|
||||||
ports:
|
|
||||||
- {port: 9000, protocol: TCP}
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ServiceAccount
|
|
||||||
metadata:
|
|
||||||
name: audit-processor
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/name: audit-processor
|
|
||||||
@ -7,6 +7,8 @@ spec:
|
|||||||
dependsOn:
|
dependsOn:
|
||||||
- name: kafka
|
- name: kafka
|
||||||
namespace: kafka
|
namespace: kafka
|
||||||
|
- name: vault
|
||||||
|
namespace: vault
|
||||||
values:
|
values:
|
||||||
extraEnvs:
|
extraEnvs:
|
||||||
- name: CONTOUR
|
- name: CONTOUR
|
||||||
|
|||||||
@ -7,6 +7,8 @@ spec:
|
|||||||
dependsOn:
|
dependsOn:
|
||||||
- name: kafka
|
- name: kafka
|
||||||
namespace: kafka
|
namespace: kafka
|
||||||
|
- name: vault
|
||||||
|
namespace: vault
|
||||||
values:
|
values:
|
||||||
extraEnvs:
|
extraEnvs:
|
||||||
- name: CONTOUR
|
- name: CONTOUR
|
||||||
|
|||||||
@ -6,8 +6,7 @@ resources:
|
|||||||
patches:
|
patches:
|
||||||
- path: audit-collector.yaml
|
- path: audit-collector.yaml
|
||||||
- path: access-collector.yaml
|
- path: access-collector.yaml
|
||||||
# События Zitadel отложены (нет PAT); включать вместе с idp-actions-bootstrap в base/kustomization.yaml.
|
- path: idp-actions-bootstrap.yaml
|
||||||
# - path: idp-actions-bootstrap.yaml
|
|
||||||
# Селектор ingress-шлюза (HelmRelease istio-system/ingressgateway): replace, а не merge —
|
# Селектор ingress-шлюза (HelmRelease istio-system/ingressgateway): replace, а не merge —
|
||||||
# merge-patch CRD оставил бы и заглушку security-audit/gateway.
|
# merge-patch CRD оставил бы и заглушку security-audit/gateway.
|
||||||
- target:
|
- target:
|
||||||
@ -31,28 +30,3 @@ patches:
|
|||||||
- op: replace
|
- op: replace
|
||||||
path: /spec/ingress/0/from/0/podSelector/matchLabels
|
path: /spec/ingress/0/from/0/podSelector/matchLabels
|
||||||
value: {istio: ingressgateway}
|
value: {istio: ingressgateway}
|
||||||
# Контур-специфика audit-processor (Kafka → MinIO/Parquet).
|
|
||||||
- target:
|
|
||||||
kind: Deployment
|
|
||||||
name: audit-processor
|
|
||||||
patch: |-
|
|
||||||
- op: add
|
|
||||||
path: /spec/template/spec/containers/0/env
|
|
||||||
value:
|
|
||||||
- name: K8S_AUDIT_CONTOUR
|
|
||||||
value: uralkal
|
|
||||||
# MinIO контура — внешний, без TLS: strict-валидация (app.env ∉ dev/local/stand)
|
|
||||||
# не пройдёт по minio.secure. Послабления стенда при этом используются только здесь:
|
|
||||||
# Kafka по-прежнему TLS+SASL, start_from earliest.
|
|
||||||
- name: K8S_AUDIT_APP_ENV
|
|
||||||
value: stand
|
|
||||||
# Отладочное эхо записанных в S3 событий в stdout. Только на время запуска (п.20):
|
|
||||||
# после проверки потока выключить (false) и убрать комментарий.
|
|
||||||
- name: K8S_AUDIT_LOG_S3_ECHO
|
|
||||||
value: "true"
|
|
||||||
# Service чарта kafka-contour; тот же адрес у коллекторов и приложений.
|
|
||||||
- name: K8S_AUDIT_KAFKA_BROKERS
|
|
||||||
value: kafka-kafka-contour.kafka.svc.cluster.local:9092
|
|
||||||
# Внешний MinIO (ServiceEntry minio.uralkal.external в istio-config).
|
|
||||||
- name: K8S_AUDIT_MINIO_ENDPOINT
|
|
||||||
value: 10.133.0.245:9000
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user