Gestion des secrets avec Azure KeyVault
Gérer les secrets d’une plateforme peut vite tourner au cauchemar, je pense avoir tout vu. Du stockage directement dans le code versionné, dans un fichier KeePass au classeur Excel.
Dans ce guide je vais vous exposer ma façon de gérer les mots de passe applicatif, ils seront générés de façon aléatoire et stockés dans un KeyVault Azure. Grace à cela, il sera non seulement accessible depuis n’importe quel client connecté et autorisé à l’affiché mais aussi à l’ensemble des composants Azure de votre infrastructure.
Préparation
Avant toutes choses, vous devez être connecté à Azure avec le CLI.
az login
vous devez aussi disposer d’un groupe de ressource ou mettre votre KeyVault
az group create -n "myResourceGroup" -l "westeurope"
Afin de rendre plus la mise en place plus simple nous allons mettre toutes les infos en variables d’environnement.
export VAULTNAME="myKeyVault"
export RESOURCEGROUP="myResourceGroup"
export LOCATION="westeurope"
export SECRETNAME="myPassword"
Le KeyVault Azure
Création du KeyVault
Nous allons commencer par créer un KeyVault
az keyvault create --name $VAULTNAME --resource-group $RESOURCEGROUP --location $LOCATION
Pour afficher la liste des KeyVault :
az keyvault list --resource-group $RESOURCEGROUP -o table
Ajout du secrets dans le KeyVault
Grace à la commande openssl rand -base64 32
nous allons générer un mot de passe aléatoire et le stocker dans notre keyVault:
az keyvault secret set --vault-name $VAULTNAME --name $SECRETNAME --value $(openssl rand -base64 32)
Pour afficher la liste des secrets :
az keyvault secret list --vault-name $VAULTNAME
[
{
"attributes": {
"created": "2019-06-26T09:22:00+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Purgeable",
"updated": "2019-06-26T09:22:00+00:00"
},
"contentType": null,
"id": "https://xxx.vault.azure.net/secrets/fluent-passwd",
"managed": null,
"tags": {
"file-encoding": "utf-8"
}
},
{
"attributes": {
"created": "2019-06-26T12:26:35+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Purgeable",
"updated": "2019-06-26T12:26:35+00:00"
},
"contentType": null,
"id": "https://xxx.vault.azure.net/secrets/myPassword",
"managed": null,
"tags": {
"file-encoding": "utf-8"
}
}
]
Pour afficher un secret :
az keyvault secret show --name $SECRETNAME --vault-name $VAULTNAME
{
"attributes": {
"created": "2019-06-26T09:22:00+00:00",
"enabled": true,
"expires": null,
"notBefore": null,
"recoveryLevel": "Purgeable",
"updated": "2019-06-26T09:22:00+00:00"
},
"contentType": null,
"id": "https://xxx.vault.azure.net/secrets/myPassword",
"kid": null,
"managed": null,
"tags": {
"file-encoding": "utf-8"
},
"value": "41nM82exp5noH08lpKA8dUFM+MXZElh7VptzhDwbbTU="
}
Secrets et variable d’environnement
Pour attribuer mon secret à une variable d’environnement :
export myPassword=$(az keyvault secret show --name $SECRETNAME --vault-name $VAULTNAME --query value)