#!/bin/bash # Atomic генерація всіх секретів для production # ВИКОНАТИ ОДНИМ СЕТОМ, без часткових деплоїв set -e echo "🔐 Генерація всіх секретів для production..." echo "⚠️ Це atomic операція - всі секрети генеруються разом" echo "" SECRETS_DIR="./secrets" mkdir -p "$SECRETS_DIR" # ============================================================================ # 1. NATS Operator & Accounts # ============================================================================ echo "=== 1. NATS Operator & Accounts ===" # Перевірка nsc if ! command -v nsc &> /dev/null; then echo "⚠️ nsc не встановлено. Встановіть: https://github.com/nats-io/natscli" echo " Або використайте Docker: docker run -it --rm natsio/nats-box" echo "" echo "Генерую placeholder JWT..." # Placeholder JWT (для тестування) cat > "$SECRETS_DIR/nats-operator.jwt" << EOF # TODO: Замінити на реальний operator JWT # Використайте: nsc add operator DAARION EOF cat > "$SECRETS_DIR/nats-system-account.jwt" << EOF # TODO: Замінити на реальний system account JWT # Використайте: nsc add account SYSTEM EOF else OPERATOR_NAME="DAARION" SYSTEM_ACCOUNT="SYSTEM" # Створення operator (якщо не існує) if [ ! -d "$HOME/.nsc/nats/$OPERATOR_NAME" ]; then echo "Створення operator: $OPERATOR_NAME" nsc add operator "$OPERATOR_NAME" fi # Створення system account if [ ! -d "$HOME/.nsc/nats/$OPERATOR_NAME/accounts/$SYSTEM_ACCOUNT" ]; then echo "Створення system account: $SYSTEM_ACCOUNT" nsc add account "$SYSTEM_ACCOUNT" fi # Створення user accounts for user in memory-service worker-daemon matrix-gateway; do if [ ! -f "$HOME/.nsc/nats/$OPERATOR_NAME/accounts/$SYSTEM_ACCOUNT/users/$user/$user.jwt" ]; then echo "Створення user: $user" nsc add user --account "$SYSTEM_ACCOUNT" "$user" fi done # Копіювання JWT cp "$HOME/.nsc/nats/$OPERATOR_NAME/$OPERATOR_NAME.jwt" "$SECRETS_DIR/nats-operator.jwt" cp "$HOME/.nsc/nats/$OPERATOR_NAME/accounts/$SYSTEM_ACCOUNT/$SYSTEM_ACCOUNT.jwt" "$SECRETS_DIR/nats-system-account.jwt" # Копіювання user JWT for user in memory-service worker-daemon matrix-gateway; do cp "$HOME/.nsc/nats/$OPERATOR_NAME/accounts/$SYSTEM_ACCOUNT/users/$user/$user.jwt" "$SECRETS_DIR/nats-$user.jwt" done echo "✅ NATS JWT згенеровано" fi # ============================================================================ # 2. Qdrant API Keys # ============================================================================ echo "" echo "=== 2. Qdrant API Keys ===" MEMORY_SERVICE_KEY=$(openssl rand -hex 32) WORKER_DAEMON_KEY=$(openssl rand -hex 32) MATRIX_GATEWAY_KEY=$(openssl rand -hex 32) QDRANT_PRIMARY_KEY=$(openssl rand -hex 32) QDRANT_READONLY_KEY=$(openssl rand -hex 32) cat > "$SECRETS_DIR/qdrant-keys.txt" << EOF # Qdrant API Keys MEMORY_SERVICE_KEY=$MEMORY_SERVICE_KEY WORKER_DAEMON_KEY=$WORKER_DAEMON_KEY MATRIX_GATEWAY_KEY=$MATRIX_GATEWAY_KEY QDRANT_PRIMARY_KEY=$QDRANT_PRIMARY_KEY QDRANT_READONLY_KEY=$QDRANT_READONLY_KEY EOF echo "✅ Qdrant API keys згенеровано" # ============================================================================ # 3. Memory Service JWT Secret # ============================================================================ echo "" echo "=== 3. Memory Service JWT Secret ===" MEMORY_JWT_SECRET=$(openssl rand -hex 64) cat > "$SECRETS_DIR/memory-jwt-secret.txt" << EOF # Memory Service JWT Secret (HS256) MEMORY_JWT_SECRET=$MEMORY_JWT_SECRET EOF echo "✅ Memory Service JWT secret згенеровано" # ============================================================================ # 4. Vault Rotation Policy (документація) # ============================================================================ echo "" echo "=== 4. Vault Rotation Policy ===" cat > "$SECRETS_DIR/vault-rotation-policy.md" << EOF # Vault Rotation Policy ## NATS JWT - **TTL:** 90 днів - **Rotation:** За 7 днів до expiry - **Auto-rotation:** Так (через External Secrets Operator) ## Qdrant API Keys - **TTL:** 180 днів - **Rotation:** За 14 днів до expiry - **Auto-rotation:** Так ## Memory Service JWT Secret - **TTL:** 365 днів - **Rotation:** За 30 днів до expiry - **Auto-rotation:** Так ## Процес ротації: 1. Генерація нових секретів 2. Оновлення в Vault 3. External Secrets Operator синхронізує в K8s 4. Перезапуск сервісів (rolling update) 5. Видалення старих секретів EOF echo "✅ Vault rotation policy документовано" # ============================================================================ # Підсумок # ============================================================================ echo "" echo "✅ Всі секрети згенеровано в: $SECRETS_DIR" echo "" echo "⚠️ КРИТИЧНО:" echo " 1. Збережіть $SECRETS_DIR в безпечне місце" echo " 2. Завантажте секрети в Vault" echo " 3. НЕ комітьте $SECRETS_DIR в Git!" echo "" echo "📋 Наступні кроки:" echo " 1. Завантажити секрети в Vault" echo " 2. Оновити External Secrets Operator" echo " 3. Застосувати auth enforcement" echo " 4. Запустити smoke-test"