initial upload

This commit is contained in:
Ubuntu
2026-01-08 19:41:23 +00:00
commit ae4f1ad1cc
42 changed files with 1371 additions and 0 deletions

119
setup_vault_secrets.sh Executable file
View 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."