Управление секретами в AIOps построено на принципе "никогда не коммитить секреты в git" и использовании централизованного хранилища — HashiCorp Vault.
Архитектура
NO SECRETS] EnvExample[.env.example
Templates only] end subgraph "HashiCorp Vault" VaultKV[KV Secrets Engine
envs/service-name/env] VaultPKI[PKI Engine
Certificates] VaultDB[Database Engine
Dynamic Credentials] end subgraph "Kubernetes" ExternalSecrets[External Secrets Operator] K8sSecrets[Kubernetes Secrets] Pod[Service Pod] end subgraph "CI/CD" GitLabCI[GitLab CI] VaultAuth[Vault JWT Auth] end Config -.->|Reference path| VaultKV VaultKV -->|Sync| ExternalSecrets ExternalSecrets -->|Create/Update| K8sSecrets K8sSecrets -->|Mount as env| Pod GitLabCI -->|JWT token| VaultAuth VaultAuth -->|Temporary token| VaultKV VaultKV -->|Secrets for deploy| GitLabCI style VaultKV fill:#FFD700 style VaultPKI fill:#FFD700 style VaultDB fill:#FFD700 style K8sSecrets fill:#4A90E2
Типы секретов
1. Application Secrets
Где хранится: Vault KV v2 по пути envs/{service-name}/{environment}
Примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
2. Database Credentials
Где хранится: Vault Database Secrets Engine
Dynamic Credentials:
1 2 3 4 | |
Процесс: 1. Сервис запрашивает credentials у Vault 2. Vault генерирует временного пользователя в PostgreSQL 3. Credentials имеют TTL (например, 1 час) 4. После истечения TTL пользователь автоматически удаляется
Преимущества: - Автоматическая ротация - Уникальные credentials для каждого pod - Audit trail в Vault
3. API Keys & Tokens
Где хранится: Vault KV v2 по пути envs/common/external-services
Примеры:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
4. TLS Certificates
Где хранится: Vault PKI Engine
Автоматическое управление:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
5. Signing Keys (JWT, Encryption)
Где хранится: Vault Transit Engine
Использование:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Интеграция с Kubernetes
External Secrets Operator
ExternalSecret Resource:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
SecretStore:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
Service Account Integration
Kubernetes SA → Vault Role binding:
1 2 3 4 5 6 7 8 | |
Deployment использует секреты:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
CI/CD Integration
GitLab CI + Vault
JWT Authentication:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
Vault Policy для CI/CD:
1 2 3 4 5 6 7 8 | |
Ротация секретов
Автоматическая ротация
PostgreSQL пароли:
1 2 3 4 5 6 7 8 | |
JWT signing keys:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Ручная ротация
Процесс: 1. Обновить секрет в Vault 2. External Secrets Operator синхронизирует K8s Secret 3. Перезапустить pods для подхвата новых значений
1 2 3 4 5 6 7 8 9 10 | |
Developer Experience
Local Development
.env.example (committed to git):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
.env (в .gitignore):
1 2 3 | |
Получение секретов из Vault (для локальной разработки):
1 2 3 4 5 6 7 8 | |
Secret Scanning
Pre-commit hooks:
1 2 3 4 5 6 7 8 | |
GitLab CI secret detection:
1 2 3 4 5 6 7 8 9 10 | |
Best Practices
✅ DO
- Всегда используй Vault для production секретов
- Ротируй секреты регулярно (минимум раз в квартал)
- Используй Dynamic Credentials где возможно (PostgreSQL, AWS)
- Логируй доступ к секретам через Vault audit logs
- Разделяй секреты по окружениям (dev, stage, prod)
- Используй least privilege principle в Vault policies
❌ DON'T
- НЕ коммить секреты в git (даже в private repos)
- НЕ передавать секреты через Slack/email
- НЕ хардкодить секреты в код
- НЕ использовать одни и те же секреты в dev/prod
- НЕ логировать секреты (даже в debug режиме)
- НЕ хранить секреты в CI/CD variables (используй Vault)
Audit & Compliance
Vault Audit Logs
1 2 | |
Лог формат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Compliance Requirements
PCI DSS: - ✅ Секреты зашифрованы в transit и at rest - ✅ Access control через Vault policies - ✅ Audit logging всех операций - ✅ Регулярная ротация ключей
GDPR: - ✅ Encryption keys управляются через Vault Transit - ✅ Audit trail для доступа к PII - ✅ Right to be forgotten — удаление ключей шифрования
Связанные страницы
- Authentication — JWT и session management
- Encryption — шифрование данных
- Platform / Secrets & Certificates — Vault и сертификаты в платформе