Перейти к содержанию

Kubernetes — секреты

Секреты в Kubernetes хранятся в объектах Secret (или во внешнем менеджере секретов через CSI / External Secrets). В .env-файлы, как в пилоте на Docker Compose, секреты не выносятся.

Кто создаёт секреты

При установке через Wizard с secrets.create: true встроенные инфра-чарты создают свои Secret'ы сами. При secrets.create: false или при использовании внешней инфраструктуры соответствующие секреты нужно создать вручную до запуска install (иначе preflight:secrets завалит проверку). Секрет приложения tokenization-vault-secrets создаёт клиент сам в любом режиме — Wizard его не генерит.

Перечень секретов

Секрет Ключи Кто создаёт Потребители
postgres-auth POSTGRES_PASSWORD postgres-чарт все сервисы с БД
redis-auth REDIS_PASSWORD redis-чарт api-gateway, admin-api, event-exporter, profiles-registry
minio-auth MINIO_ROOT_USER, MINIO_ROOT_PASSWORD minio-чарт profiles-registry, opa
keycloak-auth KEYCLOAK_ADMIN_PASSWORD, ENVOY_GATEWAY_CLIENT_SECRET, KEYCLOAK_BOOTSTRAP_USER_PASSWORD keycloak-чарт admin-api, aigate-gateway (только при auth=true)
harbor-cr .dockerconfigjson вручную все поды (imagePullSecret)
tokenization-vault-secrets VAULT_MASTER_KEY клиент сам tokenization-vault

Полный DATABASE_URL не хранится в секрете

В postgres-auth лежит только пароль (POSTGRES_PASSWORD). Полный DATABASE_URL сервис собирает сам из global.deps.postgres.*, а пароль подключает через secretKeyRef.

tokenization-vault-secrets — ответственность клиента

tokenization-vault-secrets/VAULT_MASTER_KEY — это секрет приложения, а не инфры. Wizard его не генерирует ни при каком значении secrets.create, а лишь проверяет наличие на этапе preflight:appsecrets. Создайте его сами до install: значение — base64-строка длиной не менее 32 байт.

Соответствие секретов переменным окружения — см. Переменные окружения.

Создание вручную (pre-create)

Если инфра внешняя или secrets.create: false — создайте секреты до запуска install. Секрет harbor-cr нужен всегда (его Wizard не создаёт):

# imagePullSecret для Harbor (host должен совпадать с image registry)
kubectl create secret docker-registry harbor-cr -n aigate \
  --docker-server=registry.appsec.global \
  --docker-username=<логин> --docker-password=<пароль>

# PostgreSQL — только пароль
kubectl create secret generic postgres-auth -n aigate \
  --from-literal=POSTGRES_PASSWORD='<...>'

# Redis
kubectl create secret generic redis-auth -n aigate \
  --from-literal=REDIS_PASSWORD='<...>'

# MinIO — access/secret key
kubectl create secret generic minio-auth -n aigate \
  --from-literal=MINIO_ROOT_USER='<access>' \
  --from-literal=MINIO_ROOT_PASSWORD='<secret>'

# Tokenization Vault — мастер-ключ (создаёт клиент, обязателен)
kubectl -n aigate create secret generic tokenization-vault-secrets \
  --from-literal=VAULT_MASTER_KEY=$(openssl rand -base64 32)

При auth.enabled: true и внешнем Keycloak дополнительно создайте keycloak-auth с ключами KEYCLOAK_ADMIN_PASSWORD, ENVOY_GATEWAY_CLIENT_SECRET, KEYCLOAK_BOOTSTRAP_USER_PASSWORD.

Безопасность

Секреты не коммитятся в репозиторий в открытом виде. Используйте sealed-secrets / SOPS / External Secrets (внешний vault).

Мастер-ключ Tokenization Vault

VAULT_MASTER_KEY — особо критичный секрет: его утрата делает токены ПДн невосстановимыми. Сохраните его в надёжном хранилище секретов до первого запуска и не теряйте при ротации/переустановке.