Lire des secrets Azure Key Vault avec Bicep

Tanguy SCHOUBERT
Publié par Tanguy SCHOUBERT
Catégorie : Bicep
29/02/2024

Azure Key Vault est un service cloud essentiel pour stocker et partager des secrets. Il protège les clés cryptographiques et les secrets pour les applications et les services en nuage. Malgré son importance, son intégration à Bicep, un outil de gestion des ressources Azure, peut sembler déconcertante. C’est pourquoi ce guide simplifie la récupération des secrets d’Azure Key Vault à l’aide de Bicep, en mettant l’accent sur une gestion sûre et efficace des secrets.

 

Introduction à Bicep

Bicep est un langage spécifique de domaine (DSL) open-source. Il est conçu pour le déploiement déclaratif des ressources Azure et vise à simplifier les modèles d’Azure Resource Manager (ARM). L’accès aux secrets dans Azure Key Vault est une opération courante avec Bicep. Elle est essentielle pour gérer les informations sensibles en toute sécurité.

 

Préparation du service Azure Key Vault

Tout d’abord, assurez-vous que vos secrets sont correctement stockés dans Azure Key Vault. Respectez les meilleures pratiques en matière de permissions et de politiques d’accès pour un stockage sécurisé.

 

Méthode 1 : lecture d’un secret à l’aide d’un fichier de paramètres

Nous avons d’abord parlé de l’utilisation d’un fichier de paramètres faisant référence au secret du coffre-fort. Vous commencez par déclarer une variable sécurisée dans votre fichier Bicep. Créez ensuite un fichier de paramètres. Dans ce fichier, spécifiez la valeur du secret à l’aide de l’identifiant de ressource du coffre-fort et du nom du secret.

 

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mySecret": {
      "reference": {
        "keyVault": {
          "id": "/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/"
        },
        "secretName": ""
      }
    }
  }
}

 

Méthode 2 : Utilisation de la fonction getSecret

Vous pouvez également utiliser la fonction getSecret. Cette méthode permet d’obtenir directement un secret du coffre-fort de clés et de transmettre sa valeur à un paramètre de type chaîne de caractères. Elle est particulièrement utile pour les modules. La fonction doit cibler une ressource Microsoft.KeyVault/vaults. Elle ne s’applique qu’aux paramètres marqués par @secure().

 

Exemple : Création d’un serveur Azure SQL

Commencez par déclarer vos paramètres.Ensuite, utilisez l’appel kv.getSecret pour récupérer directement le mot de passe de l’administrateur :

 

param sqlServerName string
param adminLogin string

@secure()
param adminPassword string = kv.getSecret('vmAdminPassword')

resource kv 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup)
}

resource sqlServer 'Microsoft.Sql/servers@2020-11-01-preview' = {
  name: sqlServerName
  location: resourceGroup().location
  properties: {
    administratorLogin: adminLogin
    administratorLoginPassword: adminPassword
    version: '12.0'
  }
}

 

Cette méthode rationalise le processus en intégrant la récupération du secret dans le fichier Bicep, ce qui élimine la nécessité d’un fichier de paramètres distinct.

Lorsque vous utilisez un module, tel qu’un déploiement SQL, vous pouvez faire référence à un coffre-fort de clés existant et utiliser getSecret pour transmettre le secret en tant que paramètre :

 

module sql './sql.bicep' = {
  params: {
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

En outre, la fonction getSecret peut également être utilisée dans un fichier .bicepparam pour des déploiements plus dynamiques.

 

Conclusion

L’intégration des secrets Azure Key Vault dans vos déploiements Bicep peut être réalisée en référençant un fichier de paramètres ou en utilisant la fonction getSecret. Ces deux méthodes permettent une gestion sécurisée et automatisée des secrets, rationalisant ainsi vos processus de déploiement. Respectez toujours les meilleures pratiques en matière de sécurité, telles que les méthodes de transport sécurisées et le contrôle d’accès, afin de préserver la confidentialité et l’intégrité de vos secrets.