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.

Revisions

  1. diyfr created this gist Dec 30, 2025.
    84 changes: 84 additions & 0 deletions unseal.sh
    Original 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