initial upload
This commit is contained in:
119
setup_vault_secrets.sh
Executable file
119
setup_vault_secrets.sh
Executable file
@@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Pfad zur Bootstrap-Datei
|
||||
BOOTSTRAP_VARS="terraform/bootstrap.tfvars"
|
||||
VAULT_CA_LOCAL="./vault-ca.crt"
|
||||
|
||||
# Check if bootstrap vars exist
|
||||
if [ ! -f "$BOOTSTRAP_VARS" ]; then
|
||||
echo "Fehler: $BOOTSTRAP_VARS nicht gefunden."
|
||||
echo "Bitte stelle sicher, dass du im Root des Repos bist und die Datei existiert."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for Vault CA
|
||||
if [ ! -f "$VAULT_CA_LOCAL" ]; then
|
||||
echo "Lade CA Zertifikat vom Vault Server..."
|
||||
scp -i ~/.ssh/id_ed25519_ansible_prod ansible@10.100.30.11:/opt/vault/certs/ca.crt "$VAULT_CA_LOCAL"
|
||||
fi
|
||||
|
||||
# Get Root Token from user
|
||||
read -sp "Bitte gib das Vault Root Token ein (aus init_keys.json): " VAULT_ROOT_TOKEN
|
||||
echo ""
|
||||
|
||||
if [ -z "$VAULT_ROOT_TOKEN" ]; then
|
||||
echo "Token darf nicht leer sein."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup Vault Environment
|
||||
export VAULT_ADDR='https://10.100.30.11:8200'
|
||||
export VAULT_TOKEN="$VAULT_ROOT_TOKEN"
|
||||
export VAULT_CACERT="$VAULT_CA_LOCAL"
|
||||
|
||||
echo "Prüfe Vault Status..."
|
||||
vault status > /dev/null
|
||||
|
||||
echo "Aktiviere KV v2 Engine..."
|
||||
vault secrets enable -path=secret kv-v2 || echo "Engine existiert bereits (ignoriere Fehler)."
|
||||
|
||||
# Helper function to extract var from tfvars (simple grep/cut, assumes standard formatting)
|
||||
get_var() {
|
||||
grep "^$1" "$BOOTSTRAP_VARS" | cut -d'=' -f2- | tr -d ' "' | sed 's/#.*//' | xargs
|
||||
}
|
||||
|
||||
echo "Lese Secrets aus $BOOTSTRAP_VARS..."
|
||||
|
||||
PM_TOKEN_ID=$(get_var "proxmox_api_token_id")
|
||||
PM_TOKEN_SECRET=$(get_var "proxmox_api_token_secret")
|
||||
OPN_KEY=$(get_var "opnsense_api_key")
|
||||
OPN_SECRET=$(get_var "opnsense_api_secret")
|
||||
OPN_URI=$(get_var "opnsense_uri")
|
||||
CI_USER=$(get_var "ci_user")
|
||||
CI_PASS=$(get_var "ci_password")
|
||||
SSH_KEY=$(get_var "ssh_public_key")
|
||||
|
||||
echo "Schreibe Secrets in Vault..."
|
||||
|
||||
vault kv put secret/infrastructure/proxmox \
|
||||
api_token_id="$PM_TOKEN_ID" \
|
||||
api_token_secret="$PM_TOKEN_SECRET"
|
||||
|
||||
vault kv put secret/infrastructure/opnsense \
|
||||
api_key="$OPN_KEY" \
|
||||
api_secret="$OPN_SECRET" \
|
||||
uri="$OPN_URI"
|
||||
|
||||
vault kv put secret/infrastructure/vm-credentials \
|
||||
ci_user="$CI_USER" \
|
||||
ci_password="$CI_PASS" \
|
||||
ssh_public_key="$SSH_KEY"
|
||||
|
||||
echo "✅ Alle Secrets erfolgreich importiert!"
|
||||
|
||||
# --- Cleanup & Switch to Production ---
|
||||
echo ""
|
||||
echo "----------------------------------------------------------------"
|
||||
echo "PHASE 3: CLEANUP & PRODUCTION SWITCH"
|
||||
echo "----------------------------------------------------------------"
|
||||
echo "Vault ist nun befüllt. Wir können nun die lokalen Secrets löschen"
|
||||
echo "und Terraform auf den Production-Mode umstellen."
|
||||
echo ""
|
||||
read -p "Möchtest du '$BOOTSTRAP_VARS' jetzt löschen? (y/n) " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
rm "$BOOTSTRAP_VARS"
|
||||
echo "🗑️ '$BOOTSTRAP_VARS' wurde gelöscht."
|
||||
echo "ℹ️ Hinweis: Die Variable 'use_vault' in Terraform defaults auf 'true',"
|
||||
echo " daher ist keine weitere Dateiänderung nötig."
|
||||
else
|
||||
echo "⚠️ Datei wurde NICHT gelöscht. Bitte denke daran, sie manuell zu entfernen,"
|
||||
echo " bevor du den Code ins Git pushst!"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "----------------------------------------------------------------"
|
||||
echo "SECURITY: CLEANUP REMOTE KEYS"
|
||||
echo "----------------------------------------------------------------"
|
||||
echo "Auf dem Vault-Server liegt die Datei '/opt/vault/file/init_keys.json'."
|
||||
echo "Diese enthält das Root-Token und die Unseal-Keys im Klartext."
|
||||
echo "Für maximale Sicherheit sollte diese Datei gelöscht werden (Achtung: Auto-Unseal geht dann nicht mehr!)"
|
||||
echo "oder zumindest das Root-Token daraus entfernt werden."
|
||||
echo ""
|
||||
read -p "Soll das Root-Token jetzt remote aus der Datei entfernt werden (empfohlen)? (y/n) " -n 1 -r
|
||||
echo ""
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
# Wir nutzen jq um das root_token Feld zu löschen und überschreiben die Datei
|
||||
ssh -i ~/.ssh/id_ed25519_ansible_prod ansible@10.100.30.11 "sudo jq 'del(.root_token)' /opt/vault/file/init_keys.json | sudo tee /opt/vault/file/init_keys.json.safe > /dev/null && sudo mv /opt/vault/file/init_keys.json.safe /opt/vault/file/init_keys.json && sudo chmod 600 /opt/vault/file/init_keys.json"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✅ Root-Token wurde aus der Remote-Datei entfernt."
|
||||
echo " Die Unseal-Keys bleiben für den Auto-Unseal erhalten."
|
||||
else
|
||||
echo "❌ Fehler beim Bereinigen der Remote-Datei."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 Setup abgeschlossen! Du bist jetzt im Production Mode."
|
||||
Reference in New Issue
Block a user