2021-05-04 11:08:15 +02:00
<!--
title: Vault
description: Un gestionnaire de secrets avec API !
published: true
2021-05-04 14:45:08 +02:00
date: 2021-05-04T12:45:06.683Z
2021-05-04 11:08:15 +02:00
tags:
editor: ckeditor
dateCreated: 2021-05-04T09:08:13.708Z
-->
< figure class = "image image_resized" style = "width:18.97%;" > < img src = "https://www.drupal.org/files/project-images/Vault_VerticalLogo_FullColor_2_0.png" alt = "HashiCorp Vault - AppRole Authentication | Drupal.org" > < / figure >
< h1 > Présentation< / h1 >
< h1 > Installation< / h1 >
< h1 > Utilisation< / h1 >
< h2 > Récupérer un mot de passe avec l'API< / h2 >
2021-05-04 13:16:57 +02:00
< h3 > Les commandes< / h3 >
2021-05-04 13:06:31 +02:00
< p > Il va nous falloir plusieurs données pour récupérer un mot de passe :< / p >
< ul >
< li > VAULT_URL : L'URL de votre serveur VAULT (exemple : "< i > https://vault.papamica.com< / i > ")< / li >
< li > VAULT_ENGINE : Correspond à l'engine racine de votre dossier contenant vos secrets< / li >
< li > VAULT_ROLE : Correspond au nom du dossier qui contient les secrets< / li >
< li > VAULT_SECRET_ID : Correspond à l'ID récupéré au préalable avec la commande < code > vault write -force auth/approle/role/< VAULT_ROLE> /secret-id< / code > < / li >
< li > VAULT_SECRET_NAME : Correspond au nom du secret< / li >
< / ul >
2021-05-04 13:16:57 +02:00
< p > Récupération du VAULT_TOKEN pour accéder aux secrets :< / p >
2021-05-04 14:45:08 +02:00
< pre > < code class = "language-plaintext" > 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"]')< / code > < / pre >
2021-05-04 13:16:57 +02:00
< p > Récupération des secrets dans le dossier en Json ;< / p >
< pre > < code class = "language-plaintext" > curl -sSf -X GET -H "Accept: */*" -H "X-Vault-Token: $VAULT_TOKEN" "$VAULT_URL/v1/$VAULT_ENGINE/data/approle/$VAULT_ROLE"< / code > < / pre >
< p > Récupération du secret recherché avec jq :< / p >
< pre > < code class = "language-plaintext" > | jq -r '.["data"]["data"]["$VAULT_SECRET_NAME"]'< / code > < / pre >
< p > < / p >
< h3 > Fonction Bash< / h3 >
2021-05-04 14:45:08 +02:00
< pre > < code class = "language-c" > #!/bin/bash
# Variables
VAULT_URL='https://vault.domaine.com'
VAULT_ENGINE='wallet-VPN'
VAULT_ROLE='testmickael'
VAULT_SECRET_ID='a154d15s-f48e-aea8-b99e-ab96f021s74e'
VAULT_SECRET_NAME='password'
function Get-Vault {
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 '.["data"]["data"]["password"]')
echo "$SECRET"
}
PASSWORD=$(Get-Vault)< / code > < / pre >
2021-05-04 13:06:31 +02:00
< p > < / p >
2021-05-04 13:16:57 +02:00
< h3 > Fonction Python< / h3 >
2021-05-04 13:06:31 +02:00
< p > < / p >