#!/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."