1
0
Bifurcation 0
miroir de https://github.com/PAPAMICA/Wiki-Tech.io.git synchronisé 2024-11-28 04:01:22 +01:00
Wiki-Tech.io/SelfHosted/Vault.html

85 lignes
3,9 Kio
HTML
Brut Vue normale Historique

2021-05-04 11:08:15 +02:00
<!--
title: Vault
description: Un gestionnaire de secrets avec API !
published: true
2021-05-05 11:03:20 +02:00
date: 2021-05-05T09:03:19.187Z
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/&lt;VAULT_ROLE&gt;/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\":\"&lt;ROLE_ID&gt;\",\"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>&nbsp;</p>
2021-05-05 11:03:20 +02:00
<h3>Récupération des secrets dans un script :</h3>
<h4>Variable d'environnement à configurer</h4>
<p>Afin de ne pas dévoiler les informations ou les tokens utilisés, on les met en variable d'environnement :</p>
<pre><code class="language-python">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/&lt;VAULT_ROLE&gt;/secret-id'
export VAULT_SECRET_NAME='' # Secret name</code></pre>
<p>&nbsp;</p>
<h4>Fonction Bash</h4>
2021-05-04 14:45:33 +02:00
<pre><code class="language-python">#!/bin/bash
2021-05-04 14:45:08 +02:00
2021-05-05 11:03:20 +02:00
function Get-Secret {
2021-05-04 14:45:08 +02:00
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"]')
2021-05-05 11:03:20 +02:00
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]')
2021-05-04 14:45:08 +02:00
echo "$SECRET"
}
2021-05-05 11:03:20 +02:00
VAULT_SECRET_NAME='kaypair'
PASSWORD=$(Get-Secret)
echo $PASSWORD</code></pre>
2021-05-04 13:06:31 +02:00
<p>&nbsp;</p>
2021-05-05 11:03:20 +02:00
<h4>Fonction Python</h4>
<pre><code class="language-python">#!/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)</code></pre>