Skip to content

Instantly share code, notes, and snippets.

@diyfr
Created December 30, 2025 13:21
Show Gist options
  • Select an option

  • Save diyfr/1c8a9a3ff65cc49bf40329653687a72f to your computer and use it in GitHub Desktop.

Select an option

Save diyfr/1c8a9a3ff65cc49bf40329653687a72f to your computer and use it in GitHub Desktop.
Déverrouillage automatique d'Hashicorp Vault [Solution vraiment basique]
#!/bin/bash
# Ce script permet de déverrouiller votre serveur hashicorp vault au redémarrage de votre cluster par exemple.
# Peut-être exécuté via cron...
# Configuration
NAMESPACE="vault" # Namespace où Vault est déployé
VAULT_POD_LABEL="app.kubernetes.io/name=vault" # Label du pod Vault (adaptez selon votre déploiement)
# Chemin du fichier contenant les clés de unseal
# Ce contenu est généré dans les logs à l'installation initiale de votre vault (voir les logs de votre pod au premier lancement)
# Assurez vous de supprimer les codes ANSI ou autres qui pourraient compliquer l'extration des clés
KEYS_FILE="/your/folder/INIT_VAULT_RESULTS.md"
# Extraire les 3 clés du fichier
KEY_1=$(grep "Unseal Key 1:" $KEYS_FILE | sed 's/Unseal Key 1: //' | tr -d '\r\n')
KEY_2=$(grep "Unseal Key 2:" $KEYS_FILE | sed 's/Unseal Key 2: //' | tr -d '\r\n')
KEY_3=$(grep "Unseal Key 3:" $KEYS_FILE | sed 's/Unseal Key 3: //' | tr -d '\r\n')
# Vérifier que les clés ont été extraites
if [ -z "$KEY_1" ] || [ -z "$KEY_2" ] || [ -z "$KEY_3" ]; then
echo "Erreur: Impossible d'extraire toutes les clés du fichier $KEYS_FILE"
exit 1
fi
MAX_RETRIES=30 # Nombre maximal de tentatives pour vérifier que Vault est prêt
RETRY_DELAY=5 # Délai entre les tentatives (en secondes)
# Fonction pour vérifier que le pod Vault est prêt
wait_for_vault_ready() {
echo "Attente que le pod Vault soit en cours d'exécution..."
for ((i=1; i<=MAX_RETRIES; i++)); do
POD_STATUS=$(kubectl get pods -n "$NAMESPACE" -l "$VAULT_POD_LABEL" -o jsonpath='{.items[0].status.phase}')
if [ "$POD_STATUS" = "Running" ]; then
echo "Pod Vault est en cours d'exécution."
return 0
else
echo "Tentative $i/$MAX_RETRIES : Pod Vault pas encore en cours d'exécution (statut=$POD_STATUS)..."
sleep "$RETRY_DELAY"
fi
done
echo "Erreur : Le pod Vault n'est pas en cours d'exécution après ${MAX_RETRIES} tentatives."
exit 1
}
get_vault_pod_name() {
VAULT_POD_NAME=$(kubectl get pods -n "$NAMESPACE" -l "$VAULT_POD_LABEL" -o jsonpath='{.items[0].metadata.name}')
echo "Nom du pod Vault : $VAULT_POD_NAME"
export VAULT_POD_NAME
}
# Fonction pour déverrouiller Vault
unseal_vault() {
SEAL_STATUS=$(kubectl exec -n $NAMESPACE $VAULT_POD_NAME -- vault status -format=json 2>/dev/null | jq -r '.sealed')
if [ "$SEAL_STATUS" = "true" ]; then
echo "Vault est vérouillé"
echo "Utilisation de la clé 1..."
kubectl exec -n $NAMESPACE $VAULT_POD_NAME -- vault operator unseal $KEY_1 >/dev/null 2>&1
echo "Utilisation de la clé 2..."
kubectl exec -n $NAMESPACE $VAULT_POD_NAME -- vault operator unseal $KEY_2 >/dev/null 2>&1
echo "Utilisation de la clé 3..."
kubectl exec -n $NAMESPACE $VAULT_POD_NAME -- vault operator unseal $KEY_3 >/dev/null 2>&1
else
echo "Vault est déjà déverrouillé"
exit 0
fi
# Vérifier que Vault est déverrouillé
SEAL_STATUS_FINAL=$(kubectl exec -n $NAMESPACE $VAULT_POD_NAME -- vault status -format=json 2>/dev/null | jq -r '.sealed')
echo "$SEAL_STATUS_FINAL"
if [ "$SEAL_STATUS_FINAL" = "false" ]; then
echo "Vault est maintenant déverrouillé."
else
echo "Échec du déverrouillage de Vault."
exit 1
fi
}
# Exécution
wait_for_vault_ready
get_vault_pod_name
unseal_vault
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment