AI-Ops Documentation

Русский English
  • Главная
  • Карта документации
0. С чего начать
  • Что это за продукт
  • Для кого он
  • Как устроена документация
  • Быстрые ссылки
  • Как начать разработку
  • Как найти нужный сервис
  • К кому идти по вопросам
1. Продукт
Обзор продукта
  • Миссия продукта
  • Ценность для бизнеса
  • Основные сценарии
  • Границы системы
Пользователи и персоны
  • Сегменты пользователей
  • Роли пользователей
  • Основные потребности
Пользовательские сценарии
  • Регистрация / логин
  • Основной пользовательский сценарий
  • Оплата / заказ / действие
  • Поддержка и сценарий восстановления
Функции продукта
Фича: Аутентификация
  • Цель
  • Пользовательская история
  • Бизнес-правила
  • Ограничения
  • Метрики успеха
  • Связанные сервисы
  • Связанные события / данные
  • Фича: Профиль
  • Фича: Организации
  • Фича: Топология
  • Фича: Вычислительные ресурсы
  • Фича: Кластеры
  • Фича: Каталог сервисов
Требования
  • Функциональные требования
  • Нефункциональные требования
  • Требования к производительности
  • Требования к безопасности
  • Конфиденциальность и соответствие
  • Доступность
Метрики
  • Ключевая метрика (North Star)
  • Продуктовые KPI
  • Метрики воронки
  • Метрики качества
  • Метрики экспериментов
2. Домены
Домен: Identity
  • Назначение
  • Основные концепции
  • Сущности
  • Бизнес-правила
  • Сервисы домена
  • Данные домена
  • Связанные фичи
  • Домен: Профиль пользователя
  • Домен: Поиск
  • Домен: Заказы / транзакции
  • Домен: Уведомления
  • Домен: Аналитика
  • Домен: Рекомендации
3. Архитектура
Обзор системы
  • Что входит в систему
  • Что не входит
  • Высокоуровневая диаграмма
C4 Model
  • Контекстная диаграмма
  • Диаграмма контейнеров
  • Диаграмма компонентов
  • Диаграмма развёртывания
Интеграционная архитектура
  • Внешние системы
  • Интеграции API
  • Webhooks
  • Сторонние провайдеры
Потоки данных
  • Онлайн-поток данных
  • Пакетный поток данных
  • Поток событий
  • Владение данными
Архитектура безопасности
  • Аутентификация
  • Авторизация
  • Управление секретами
  • Шифрование
  • Аудит и логирование
Надежность и масштабируемость
  • SLA / SLO
  • Планирование мощностей
  • Отказоустойчивость
  • Обратное давление и повторы
  • Восстановление после сбоев
Архитектурные принципы
  • Границы доменов
  • Принципы проектирования API
  • Принципы проектирования событий
  • Принципы контрактов данных
  • Диаграмма: auth микросервисы
Control plane
  • Архитектура компонентов (control plane)
  • Доменная модель v0
  • Протокол v0 (control plane)
  • Примеры (control plane)
Сервисы (control plane)
Сервис control plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис execution plane
  • API
  • Модель данных
  • События
  • Модули
  • Операции
Сервис resource catalog
  • API
  • Модель данных
  • События
  • Модули
  • Операции
4. Инженерия
Сервисы
Каталог сервисов
  • Все сервисы списком
  • Владельцы
  • Критичность
  • Уровень / домен / статус
  • Сервис аутентификации
  • Сервис аккаунтов
  • Облачный сервис
  • Сервис учётных данных
  • Herald
  • Сервис идентификации
  • API Gateway
  • Сервис токенов
Фронтенд
  • Обзор фронтенда
  • Структура приложения
  • Routing (фронтенд)
  • State management (фронтенд)
  • Design system (фронтенд)
  • UI components (фронтенд)
  • API контракты фронтенда
  • Обработка ошибок (фронтенд)
  • Performance (фронтенд)
  • Feature flags (фронтенд)
  • Тестирование фронтенда
Бэкенд
  • Обзор бэкенда
  • Паттерны сервисов
  • Рекомендации по API
  • Событийные паттерны
  • Паттерны доступа к БД
  • Кэширование
  • Асинхронные задачи и воркеры
  • Идемпотентность
  • Обработка ошибок
  • Тестирование бэкенда
Данные
  • Обзор данных
  • Системы-источники
  • Контракты данных
  • Каталог схем событий
  • Хранилище данных
  • Витрины данных
  • ETL / ELT-пайплайны
  • Качество данных
  • Происхождение данных
  • Политики хранения
  • Политики доступа
ML / DS
  • Обзор ML/DS
  • Сценарии (ML)
  • Каталог моделей
  • Feature store
  • Training pipelines
  • Inference pipelines
  • Offline evaluation
  • Online evaluation / A-B
  • Мониторинг (ML)
  • ML runbooks
QA / Качество
  • Стратегия качества
  • Пирамида тестов
  • Тестовые окружения
  • Тестовые данные
  • Ручное тестирование
  • Автоматизированное тестирование
  • Нагрузочное тестирование
  • Тестирование безопасности
  • Критерии приёмки релиза
  • Процесс разбора багов
5. Платформа
Инфраструктура
  • Ansible
  • WireGuard
  • Kubernetes
  • Longhorn
  • Ingress
  • PostgreSQL Cluster
  • Redis
  • Kafka
  • Vault
  • MinIO
  • Authentik
  • Monitoring
  • Logging
  • Tracing
  • Nexus
  • SonarQube
  • GlitchTip
  • GitLab Runner
  • Kubernetes Dashboard
  • OLM
  • Deploy
  • Internal DNS
  • Обзор (инфраструктура)
  • Config generator
  • Пример (инфраструктура)
  • Скрипты (инфраструктура)
Окружения
  • Локальное
  • Stage
  • Pre
  • Продакшен (prod)
  • Tech
  • Облако
  • Объектное хранилище
  • CI/CD
  • Секреты и сертификаты
Наблюдаемость
  • Логирование
  • Метрики
  • Трейсинг
  • Алертинг
  • Резервное копирование и восстановление
6. Разработка
  • Быстрый старт
  • Локальная настройка
  • Карта репозиториев
  • Стандарты кода
  • Git-процесс
  • Стратегия ветвления
  • Руководство по код-ревью
  • Критерии готовности
  • Процесс релиза
  • Флаги фич
  • FAQ разработчика
  • Миграция secure auth
7. Эксплуатация
  • Дежурство
  • Управление инцидентами
  • Уровни критичности
  • Политика эскалации
  • Постмортемы
  • Ранбуки
  • Управление изменениями
  • Непрерывность бизнеса
8. Аналитика
  • План трекинга событий
  • Определения KPI
  • Каталог дашбордов
  • Словарь метрик
  • Эксперименты
  • Стандарты отчётности
9. Управление
  • Решения (ADR)
  • Политика статуса контента
  • Changelog обновлений документации
Безопасность и соответствие
  • Модель угроз
  • Безопасная разработка
  • Управление доступом
  • Конфиденциальность
  • Реагирование на инциденты
Ответственность и владельцы
  • Команды
  • Зоны ответственности команд
  • Владельцы сервисов
  • Владельцы доменов
  • Контакты
Глоссарий
  • Бизнес-термины
  • Продуктовые термины
  • Технические термины
  • Сокращения

Управление секретами

Previous Next

Управление секретами в AIOps построено на принципе "никогда не коммитить секреты в git" и использовании централизованного хранилища — HashiCorp Vault.

Архитектура

graph TB subgraph "Git Repository" Config[config.yaml
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
# vault kv get envs/identity-service/production
postgres:
  host: pg-public.postgres.svc.cluster.local
  port: 5432
  database: identity_production
  username: identity_user
  password: <GENERATED_PASSWORD>

redis:
  host: redis-master.redis.svc.cluster.local
  port: 6379
  password: <GENERATED_PASSWORD>

jwt:
  secret_key: <RANDOM_256_BIT_KEY>

sentry:
  dsn: https://<key>@sentry.io/<project>

opentelemetry:
  endpoint: tempo-gateway.tracing.svc.cluster.local:4317

2. Database Credentials

Где хранится: Vault Database Secrets Engine

Dynamic Credentials:

1
2
3
4
# Vault configuration
path "database/creds/identity-service" {
  capabilities = ["read"]
}

Процесс: 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
# Third-party API keys
sendgrid:
  api_key: SG.xxxxxxxxxxxxx

twilio:
  account_sid: ACxxxxxxxxxxxxx
  auth_token: xxxxxxxxxxxxx

stripe:
  secret_key: sk_live_xxxxxxxxxxxxx
  webhook_secret: whsec_xxxxxxxxxxxxx

aws:
  access_key_id: AKIAxxxxxxxxxxxxx
  secret_access_key: xxxxxxxxxxxxx

4. TLS Certificates

Где хранится: Vault PKI Engine

Автоматическое управление:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# cert-manager + Vault Issuer
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: identity-service-tls
spec:
  secretName: identity-service-tls-secret
  issuerRef:
    name: vault-issuer
    kind: ClusterIssuer
  commonName: identity-service.aiops.io
  dnsNames:
    - identity-service.aiops.io
    - identity-service.internal
  duration: 2160h  # 90 days
  renewBefore: 360h  # 15 days

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
import hvac

client = hvac.Client(url='https://vault.aiops.io')
client.token = os.getenv('VAULT_TOKEN')

# Sign data
signature = client.secrets.transit.sign_data(
    name='jwt-signing-key',
    hash_input=base64.b64encode(data.encode()).decode()
)

# Verify signature
is_valid = client.secrets.transit.verify_signed_data(
    name='jwt-signing-key',
    hash_input=base64.b64encode(data.encode()).decode(),
    signature=signature['data']['signature']
)

Интеграция с 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
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: identity-service-secrets
  namespace: auth-platform
spec:
  refreshInterval: 1h
  secretStoreRef:
    name: vault-backend
    kind: SecretStore
  target:
    name: identity-service-secrets
    creationPolicy: Owner
  data:
    - secretKey: POSTGRES_HOST
      remoteRef:
        key: envs/identity-service/production
        property: postgres.host
    - secretKey: POSTGRES_PASSWORD
      remoteRef:
        key: envs/identity-service/production
        property: postgres.password
    - secretKey: REDIS_PASSWORD
      remoteRef:
        key: envs/identity-service/production
        property: redis.password

SecretStore:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
  name: vault-backend
  namespace: auth-platform
spec:
  provider:
    vault:
      server: "https://vault.vault.svc.cluster.local:8200"
      path: "envs"
      version: "v2"
      auth:
        kubernetes:
          mountPath: "kubernetes"
          role: "identity-service"
          serviceAccountRef:
            name: identity-service

Service Account Integration

Kubernetes SA → Vault Role binding:

1
2
3
4
5
6
7
8
# Vault configuration
path "envs/data/identity-service/*" {
  capabilities = ["read"]
}

path "database/creds/identity-service" {
  capabilities = ["read"]
}

Deployment использует секреты:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
apiVersion: apps/v1
kind: Deployment
metadata:
  name: identity-service
spec:
  template:
    spec:
      serviceAccountName: identity-service
      containers:
        - name: api
          image: identity-service:latest
          envFrom:
            - secretRef:
                name: identity-service-secrets
          env:
            - name: ENVIRONMENT
              value: "production"

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
# .gitlab-ci.yml
deploy:production:
  stage: deploy
  id_tokens:
    VAULT_ID_TOKEN:
      aud: https://vault.aiops.io
  script:
    # Authenticate with Vault using CI/CD JWT
    - export VAULT_TOKEN=$(vault write -field=token
        auth/jwt/login
        role=gitlab-ci
        jwt=$VAULT_ID_TOKEN)

    # Read secrets from Vault
    - vault kv get -format=json envs/identity-service/production > secrets.json

    # Deploy with secrets
    - helm upgrade identity-service ./chart
        --set-file secrets=secrets.json

    # Clean up
    - rm secrets.json
  environment:
    name: production
  only:
    - main

Vault Policy для CI/CD:

1
2
3
4
5
6
7
8
# ci-cd-policy.hcl
path "envs/data/*" {
  capabilities = ["read"]
}

path "database/creds/*" {
  capabilities = ["read"]
}

Ротация секретов

Автоматическая ротация

PostgreSQL пароли:

1
2
3
4
5
6
7
8
#!/bin/bash
# Rotate password in Vault and trigger external-secrets sync

vault kv put envs/identity-service/production \
  postgres.password="$(openssl rand -base64 32)"

# External Secrets Operator автоматически синхронизирует
# В течение refreshInterval (1 hour) новый пароль попадет в pod

JWT signing keys:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Scheduled job для ротации ключей
async def rotate_jwt_keys():
    """Generate new key pair, keep old for validation"""
    new_key = generate_rsa_keypair()

    # Store new key with version
    await vault_client.write(
        path=f"transit/keys/jwt-signing-key/rotate",
        min_decryption_version=1,
        min_encryption_version=2
    )

    # Old keys remain valid for token validation
    # New tokens signed with new key

Ручная ротация

Процесс: 1. Обновить секрет в Vault 2. External Secrets Operator синхронизирует K8s Secret 3. Перезапустить pods для подхвата новых значений

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 1. Update secret in Vault
vault kv put envs/identity-service/production \
  redis.password="NEW_PASSWORD"

# 2. Force refresh (optional, or wait for refreshInterval)
kubectl annotate externalsecret identity-service-secrets \
  force-sync=$(date +%s) -n auth-platform

# 3. Rolling restart
kubectl rollout restart deployment/identity-service -n auth-platform

Developer Experience

Local Development

.env.example (committed to git):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# PostgreSQL
IDENTITY__POSTGRES__HOST=localhost
IDENTITY__POSTGRES__PORT=5432
IDENTITY__POSTGRES__DATABASE=identity_local
IDENTITY__POSTGRES__USERNAME=identity_user
IDENTITY__POSTGRES__PASSWORD=  # Set in .env

# Redis
IDENTITY__REDIS__HOST=localhost
IDENTITY__REDIS__PORT=6379
IDENTITY__REDIS__PASSWORD=  # Set in .env

# JWT
IDENTITY__JWT__SECRET_KEY=  # Generate with: openssl rand -base64 32

.env (в .gitignore):

1
2
3
IDENTITY__POSTGRES__PASSWORD=local_dev_password
IDENTITY__REDIS__PASSWORD=local_dev_password
IDENTITY__JWT__SECRET_KEY=wK8zP2jL9xR4mN6vT3qY7bF5hG1dS8cE

Получение секретов из Vault (для локальной разработки):

1
2
3
4
5
6
7
8
# Скрипт для разработчиков
./scripts/sync-secrets-local.sh

# Содержимое скрипта:
#!/bin/bash
vault login -method=ldap username=$USER
vault kv get -format=json envs/identity-service/dev | \
  jq -r 'to_entries | map("\(.key)=\(.value)") | .[]' > .env.local

Secret Scanning

Pre-commit hooks:

1
2
3
4
5
6
7
8
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/Yelp/detect-secrets
    rev: v1.4.0
    hooks:
      - id: detect-secrets
        args: ['--baseline', '.secrets.baseline']
        exclude: package.lock.json

GitLab CI secret detection:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# .gitlab-ci.yml
secret_detection:
  stage: test
  image:
    name: registry.gitlab.com/security-products/secret-detection:latest
  script:
    - /analyzer run
  artifacts:
    reports:
      secret_detection: gl-secret-detection-report.json

Best Practices

✅ DO

  1. Всегда используй Vault для production секретов
  2. Ротируй секреты регулярно (минимум раз в квартал)
  3. Используй Dynamic Credentials где возможно (PostgreSQL, AWS)
  4. Логируй доступ к секретам через Vault audit logs
  5. Разделяй секреты по окружениям (dev, stage, prod)
  6. Используй least privilege principle в Vault policies

❌ DON'T

  1. НЕ коммить секреты в git (даже в private repos)
  2. НЕ передавать секреты через Slack/email
  3. НЕ хардкодить секреты в код
  4. НЕ использовать одни и те же секреты в dev/prod
  5. НЕ логировать секреты (даже в debug режиме)
  6. НЕ хранить секреты в CI/CD variables (используй Vault)

Audit & Compliance

Vault Audit Logs

1
2
# Enable audit logging
vault audit enable file file_path=/vault/logs/audit.log

Лог формат:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  "type": "response",
  "auth": {
    "client_token": "hmac-sha256:xxx",
    "accessor": "hmac-sha256:yyy",
    "display_name": "identity-service",
    "entity_id": "uuid"
  },
  "request": {
    "id": "request-uuid",
    "operation": "read",
    "path": "envs/data/identity-service/production",
    "remote_address": "10.42.0.15"
  },
  "response": {
    "data": null  // Actual secrets NOT logged
  }
}

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 и сертификаты в платформе
Авторизация Шифрование
Меню
Главная Карта документации
0. С чего начать
С чего начать Что это за продукт Для кого он Как устроена документация Быстрые ссылки Как начать разработку Как найти нужный сервис К кому идти по вопросам
1. Продукт
Продукт
2. Домены
Домены Домен: Профиль пользователя Домен: Поиск Домен: Заказы / транзакции Домен: Уведомления Домен: Аналитика Домен: Рекомендации
3. Архитектура
Архитектура Диаграмма: auth микросервисы
4. Инженерия
Инженерия
5. Платформа
Платформа Облако Объектное хранилище CI/CD Секреты и сертификаты Резервное копирование и восстановление
6. Разработка
Разработка Быстрый старт Локальная настройка Карта репозиториев Стандарты кода Git-процесс Стратегия ветвления Руководство по код-ревью Критерии готовности Процесс релиза Флаги фич FAQ разработчика Миграция secure auth
7. Эксплуатация
Эксплуатация Дежурство Управление инцидентами Уровни критичности Политика эскалации Постмортемы Ранбуки Управление изменениями Непрерывность бизнеса
8. Аналитика
Аналитика План трекинга событий Определения KPI Каталог дашбордов Словарь метрик Эксперименты Стандарты отчётности
9. Управление
Управление Решения (ADR) Политика статуса контента Changelog обновлений документации

На странице

Архитектура Типы секретов 1. Application Secrets 2. Database Credentials 3. API Keys & Tokens 4. TLS Certificates 5. Signing Keys (JWT, Encryption) Интеграция с Kubernetes External Secrets Operator Service Account Integration CI/CD Integration GitLab CI + Vault Ротация секретов Автоматическая ротация Ручная ротация Developer Experience Local Development Secret Scanning Best Practices ✅ DO ❌ DON'T Audit & Compliance Vault Audit Logs Compliance Requirements Связанные страницы