- 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!
160 lines
5.7 KiB
Bash
Executable File
160 lines
5.7 KiB
Bash
Executable File
#!/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"
|