Files
microdao-daarion/infrastructure/auth/generate-all-secrets.sh
Apple 70fd268a0d 🚀 Production-ready: Auth enforcement + Observability + Policy
- Atomic генерація всіх секретів (generate-all-secrets.sh)
- Auth enforcement перевірка (enforce-auth.sh)
- Оновлений full flow test (must-pass)
- Prometheus alerting rules для Memory Module
- Matrix alerts bridge (алерти в ops room)
- Policy engine документація для пам'яті

Готово до production deployment!
2026-01-10 10:56:05 -08:00

160 lines
5.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"