Gérer les secrets dans votre modèle ARM en lisant à partir d’Azure Key Vault

Effectué

IaC (Infrastructure as Code) fait référence à la description des besoins d’infrastructure sous forme de fichiers texte compréhensibles par les utilisateurs. Les modèles ARM (Azure Resource Manager) représentent une forme d’IaC.

Tout comme le code de l’application, vous pouvez gérer votre code d’infrastructure dans un système de contrôle de version tel que Git. Cela vous permet de collaborer avec d’autres utilisateurs et de suivre les modifications apportées aux exigences de votre infrastructure au fur et à mesure de leur évolution.

Comme pour votre code d’application, vous ne devez pas coder en dur des informations sensibles telles que les mots de passe et les clés API dans vos modèles ARM. Dans le cas contraire, toute personne disposant d’un accès en lecture à votre référentiel aura accès à ces informations secrètes.

Bien que seules les personnes autorisées dans votre organisation doivent avoir accès aux informations sensibles, vos modèles ARM nécessitent également ces informations. Azure Key Vault est un moyen de vous aider à protéger les informations sensibles.

Azure Key Vault contribue à protéger les informations sensibles

Azure Key Vault est un service cloud qui fonctionne comme un magasin sécurisé pour les secrets. Key Vault vous permet de créer plusieurs conteneurs sécurisés, appelés coffres. Ces coffres sont secondés par des modules de sécurité matériels (HSM). Les coffres permettent de réduire les risques de perte accidentelle des informations de sécurité en centralisant le stockage des secrets d’application. Par ailleurs, les coffres de clés contrôlent et journalisent l’accès à tout ce qui y est stocké.

Key Vault est en mesure de stocker des clés et des secrets. Ses nombreuses fonctionnalités constituent un bon choix pour la gestion de vos secrets, mais également pour votre processus de déploiement.

  • Contrôle d’accès en fonction du rôle. Vous pouvez gérer votre coffre de clés à l’aide de différents rôles, ce qui vous permet de vérifier qu’il est utilisable par les applications et les différents niveaux d’administrateurs.

  • Octroi d’autorisations d’accès aux utilisateurs et aux applications. Vous pouvez configurer votre coffre de clés pour permettre à des utilisateurs et des applications spécifiques d’y accéder. Pour les applications, vous créez un principal de service. En fait, vous pouvez configurer le coffre de clés pour restreindre son accès aux principaux de service uniquement.

    Notes

    Un principal de service est une identité créée pour une utilisation avec des applications, des services hébergés et des outils automatisés pour accéder aux ressources Azure. Vous limitez l’accès aux ressources en affectant uniquement au principal un rôle ou un sous-ensemble de rôles disposant de droits d’accès limités. Cette approche vous offre un contrôle plus granulaire sur ce qui peut accéder à vos ressources et dans quelle mesure.

  • Peut interagir avec un modèle ARM. Durant le déploiement d’un modèle ARM, vous pouvez lire du contenu à partir d’un coffre de clés. Une petite configuration est nécessaire pour le faire fonctionner. Le section suivante fournit des informations supplémentaires.

Configurer les autorisations

Vous avez choisi Key Vault en tant que service de stockage de vos informations d’identification. À ce stade, vous souhaitez pouvoir lire des secrets durant le déploiement afin de définir le mot de passe d’une machine virtuelle, par exemple.

Vous devez effectuer plusieurs étapes de configuration pour configurer Key Vault et permettre sa lecture durant le déploiement. Les étapes à suivre sont les suivantes :

  1. Activer le Key Vault pour le déploiement. Key Vault doit être accessible en lecture au cours du déploiement. Vous pouvez passer ce paramètre lors de sa création ou le modifier ultérieurement.

  2. L’utilisateur a besoin d’une autorisation de déploiement sur le groupe de ressources. Ce point est semblable aux autres déploiements. Toutefois, si vous n’avez pas créé le groupe de ressources, vous pouvez affecter un rôle pour vous assurer que vous pouvez déployer dessus.

  3. L’utilisateur doit disposer d’un accès approprié au coffre de clés. Vous devez vérifier que vous disposez de l’accès approprié au coffre de clés quand vous lisez son contenu pendant le déploiement. Quand vous créez un coffre de clés, il crée une stratégie d’accès qui donne à l’utilisateur les droits nécessaires pour gérer l’ensemble des secrets, clés et certificats.

Configurer Key Vault pour le déploiement

Configurez votre instance de Key Vault pour que les informations d’identification puissent être lues à partir de celle-ci durant le déploiement d’un modèle ARM.

Pour activer Key Vault dans le cadre d’un déploiement, vous pouvez passer un paramètre au moment de la création de l’instance de Key Vault, ou vous pouvez effectuer la modification plus tard. Dans PowerShell, il s’agit d’un commutateur appelé -EnabledForTemplateDeployment. Dans Azure CLI, il s’agit d’un argument appelé --enabled-for-template-deployment qui exige que la valeur true soit également passée.

Notes

Azure CLI vous oblige également à passer un booléen ayant la valeur true.

L’utilisateur doit disposer de l’autorisation de déploiement sur Key Vault et le groupe de ressources

Avant de tenter de déployer et de lire des secrets à partir du coffre de clés, vous devez vérifier que vous disposez d’une autorisation de déploiement. Deux rôles vous permettent d’obtenir cette autorisation :

  • Owner : Si vous avez créé le coffre de clés, vous avez automatiquement ce rôle.
  • Contributor : Ce rôle vous permet d’accéder à la gestion de tous les secrets. Si vous n’avez pas créé le coffre de clés, l’approche la plus simple consiste à vous attribuer le rôle Contributor.

Vous pouvez également créer et attribuer un rôle personnalisé, et vérifier qu’il contient l’autorisation Microsoft.KeyVault/vaults/deploy/action.

Configurer le fichier de paramètres de déploiement

Au lieu de spécifier chaque paramètre et les valeurs correspondantes en tant que paires clé-valeur pendant le déploiement, vous pouvez utiliser un fichier de paramètres.

Dans le fichier de paramètres, vous spécifiez le coffre de clés et le secret qui vous intéresse dans celui-ci. Pour ce faire, vous devez modifier un paramètre, puis mettre à jour le modèle de déploiement pour utiliser ce paramètre.

Notes

Le modèle ne contient aucune information relative à un coffre de clés ou à son secret. La configuration que vous effectuez a lieu dans le fichier de paramètres.

Configurer un coffre de clés et un secret pour un paramètre

Dans le fichier de paramètres, et pour un paramètre spécifique, pointez sur un coffre de clés pour lequel vous disposez d’une autorisation de déploiement. Spécifiez ensuite le secret qui vous intéresse. Vous indiquez le secret par son nom. Pendant le déploiement, cette configuration est résolue en fonction de la valeur du secret. Voici un paramètre appelé myPassword, configuré pour utiliser un coffre de clés spécifique et un secret appelé databaseSecret.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

Dans le code JSON précédent, vous spécifiez l’ID complet du coffre de clés, puis vous demandez le secret databaseSecret. La valeur de ce secret est ensuite extraite et affectée au paramètre myPassword.

Affecter le paramètre au mot de passe de la ressource

Cette étape n’est pas liée au coffre de clés. Elle consiste à vérifier que la ressource prévue utilise le paramètre configuré pour lire la valeur du secret à partir du coffre de clés. Voici un extrait abrégé d’une machine virtuelle, dans le fichier de modèle, qui montre la lecture de l’élément adminPassword à partir du paramètre myPassword. La valeur du secret est ensuite lue à partir du coffre de clés au moment du déploiement, et affectée à l’élément adminPassword.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}