Files
Applications/terraform-cloudflare-tunnel-zone/vault-setup.sh
T
2026-03-16 18:26:47 +01:00

136 lines
3.9 KiB
Bash
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
# =============================================================================
# Script de configuration Vault pour Cloudflare Tunnel
# =============================================================================
set -e
VAULT_ADDR="${VAULT_ADDR:-https://vault.tips-of-mine.com}"
VAULT_PATH="secret/cloudflare"
echo "🔐 Configuration Vault pour Cloudflare Tunnel"
echo "=============================================="
echo ""
echo "Vault Address: $VAULT_ADDR"
echo "Secret Path: $VAULT_PATH"
echo ""
# Vérifier que Vault CLI est installé
if ! command -v vault &> /dev/null; then
echo "❌ Erreur: vault CLI n'est pas installé"
echo " Installation: https://www.vaultproject.io/downloads"
exit 1
fi
# Vérifier la connexion à Vault
echo "🔍 Vérification de la connexion à Vault..."
if ! vault status &> /dev/null; then
echo "❌ Impossible de se connecter à Vault"
echo " Assurez-vous que VAULT_ADDR et VAULT_TOKEN sont définis"
exit 1
fi
echo "✅ Connecté à Vault"
echo ""
# Fonction pour demander une valeur
ask_value() {
local var_name=$1
local prompt=$2
local is_secret=${3:-false}
if [ "$is_secret" = true ]; then
read -s -p "$prompt: " value
echo ""
else
read -p "$prompt: " value
fi
echo "$value"
}
# Mode interactif ou non
if [ "$1" = "--interactive" ] || [ "$1" = "-i" ]; then
echo "📝 Mode interactif - Entrez vos informations Cloudflare"
echo ""
API_TOKEN=$(ask_value "API_TOKEN" "Cloudflare API Token" true)
ZONE_ID=$(ask_value "ZONE_ID" "Zone ID")
ACCOUNT_ID=$(ask_value "ACCOUNT_ID" "Account ID")
EMAIL=$(ask_value "EMAIL" "Email")
echo ""
echo "💾 Sauvegarde des secrets dans Vault..."
vault kv put "$VAULT_PATH" \
api_token="$API_TOKEN" \
zone_id="$ZONE_ID" \
account_id="$ACCOUNT_ID" \
email="$EMAIL"
echo "✅ Secrets sauvegardés avec succès!"
else
echo "ℹ️ Usage:"
echo " $0 --interactive # Mode interactif"
echo " $0 --verify # Vérifier les secrets"
echo " $0 --create-policy # Créer la policy Terraform"
echo ""
if [ "$1" = "--verify" ] || [ "$1" = "-v" ]; then
echo "🔍 Vérification des secrets..."
echo ""
if vault kv get "$VAULT_PATH" &> /dev/null; then
echo "✅ Les secrets existent dans Vault"
echo ""
echo "Clés présentes:"
vault kv get -format=json "$VAULT_PATH" | jq -r '.data.data | keys[]' | sed 's/^/ - /'
else
echo "❌ Aucun secret trouvé au chemin $VAULT_PATH"
echo " Exécutez: $0 --interactive"
fi
elif [ "$1" = "--create-policy" ] || [ "$1" = "-p" ]; then
echo "📋 Création de la policy Terraform..."
vault policy write terraform-cloudflare - <<EOF
# Policy pour Terraform - Accès lecture aux secrets Cloudflare
path "secret/data/cloudflare" {
capabilities = ["read"]
}
path "secret/metadata/cloudflare" {
capabilities = ["read"]
}
EOF
echo "✅ Policy 'terraform-cloudflare' créée"
echo ""
echo "🎫 Création d'un token pour Terraform..."
TOKEN_OUTPUT=$(vault token create \
-policy=terraform-cloudflare \
-ttl=8h \
-format=json)
TOKEN=$(echo "$TOKEN_OUTPUT" | jq -r '.auth.client_token')
echo "✅ Token créé avec succès!"
echo ""
echo "🔑 Token Vault (à utiliser dans la CI/CD):"
echo " $TOKEN"
echo ""
echo "⚠️ Sauvegardez ce token de manière sécurisée!"
echo " Il expire dans 8 heures"
echo ""
echo "💡 Pour l'utiliser dans Terraform:"
echo " export VAULT_TOKEN='$TOKEN'"
echo " export TF_VAR_vault_token='$TOKEN'"
fi
fi
echo ""
echo "🎉 Configuration terminée!"