Created
December 30, 2025 13:21
-
-
Save diyfr/1c8a9a3ff65cc49bf40329653687a72f to your computer and use it in GitHub Desktop.
Revisions
-
diyfr created this gist
Dec 30, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,84 @@ #!/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