Created
December 30, 2025 13:21
-
-
Save diyfr/1c8a9a3ff65cc49bf40329653687a72f to your computer and use it in GitHub Desktop.
Déverrouillage automatique d'Hashicorp Vault [Solution vraiment basique]
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 characters
| #!/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