Il va nous falloir plusieurs données pour récupérer un mot de passe :
vault write -force auth/approle/role/<VAULT_ROLE>/secret-id
Récupération du VAULT_TOKEN pour accéder aux secrets :
VAULT_TOKEN=$(curl -sSf --data "{\"role_id\":\"<ROLE_ID>\",\"secret_id\":\"$VAULT_SECRET_ID\"}" $VAULT_URL/v1/auth/approle/login | jq -r '.["auth"]["client_token"]')
Récupération des secrets dans le dossier en Json ;
curl -sSf -X GET -H "Accept: */*" -H "X-Vault-Token: $VAULT_TOKEN" "$VAULT_URL/v1/$VAULT_ENGINE/data/approle/$VAULT_ROLE"
Récupération du secret recherché avec jq :
| jq -r '.["data"]["data"]["$VAULT_SECRET_NAME"]'
Afin de ne pas dévoiler les informations ou les tokens utilisés, on les met en variable d'environnement :
export VAULT_URL='' # Vault URL with "https://"
export VAULT_ENGINE='' # Wallet name (ex : VPS)
export VAULT_ROLE='' # Role name (folder)
export VAULT_SECRET_ID='' # To be retrieved in Vault CLI with 'vault write -force auth/approle/role/<VAULT_ROLE>/secret-id'
export VAULT_SECRET_NAME='' # Secret name
#!/bin/bash
function Get-Secret {
VAULT_TOKEN=$(curl -sSf --data "{\"role_id\":\"$VAULT_ROLE\",\"secret_id\":\"$VAULT_SECRET_ID\"}" $VAULT_URL/v1/auth/approle/login | jq -r '.["auth"]["client_token"]')
SECRET=$(curl -sSf -X GET -H "Accept: */*" -H "X-Vault-Token: $VAULT_TOKEN" "$VAULT_URL/v1/$VAULT_ENGINE/data/approle/$VAULT_ROLE" | jq -r --arg VAULT_SECRET_NAME "$VAULT_SECRET_NAME" '.["data"]["data"][$VAULT_SECRET_NAME]')
echo "$SECRET"
}
VAULT_SECRET_NAME='kaypair'
PASSWORD=$(Get-Secret)
echo $PASSWORD
#!/usr/bin/env python
import requests
import os
import json
# Variables declaration
VAULT_URL = os.getenv('VAULT_URL')
VAULT_ENGINE = os.getenv('VAULT_ENGINE')
VAULT_ROLE = os.getenv('VAULT_ROLE')
VAULT_SECRET_ID = os.getenv('VAULT_SECRET_ID')
def GetSecret():
# Get token access
data = {"role_id":VAULT_ROLE,"secret_id":VAULT_SECRET_ID}
response = requests.post(VAULT_URL + '/v1/auth/approle/login', data=data)
JSON = json.loads(response.text)
TOKEN = JSON["auth"]["client_token"]
# Get secret
headers = {
'Accept': '*/*',
'X-Vault-Token': TOKEN
}
response = requests.get(VAULT_URL + '/v1/' + VAULT_ENGINE + '/data/approle/' + VAULT_ROLE, headers=headers)
JSON = json.loads(response.text)
SECRET = JSON["data"]["data"][VAULT_SECRET_NAME]
return SECRET
VAULT_SECRET_NAME='kaypair'
SECRET = GetSecret()
print (SECRET)