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)
comments powered by Disqus