Partager via


Automatiser la rotation d’un secret pour les ressources ayant deux ensembles d'identifiants d'authentification

La meilleure façon de s’authentifier auprès des services Azure consiste à utiliser une identité managée, mais il existe certains scénarios où cela n’est pas une option. Dans ce cas, les clés d’accès ou les mots de passe sont utilisés. Vous devez faire pivoter fréquemment les clés d’accès et les mots de passe.

Ce tutoriel montre comment automatiser la rotation périodique des secrets pour les bases de données et les services qui utilisent deux ensembles d’informations d’identification d’authentification. Pour obtenir une vue d’ensemble complète des concepts et avantages de l’autorotation entre différents types de ressources, consultez Présentation de l’autorotation dans Azure Key Vault.

Plus précisément, ce tutoriel montre comment faire pivoter les clés de compte de stockage Azure stockées dans Azure Key Vault en tant que secrets. Vous utiliserez une fonction déclenchée par la notification Azure Event Grid.

Remarque

Pour les services de compte de stockage, l’utilisation de l’ID Microsoft Entra pour autoriser les demandes est recommandée. Pour plus d’informations, consultez Autoriser l’accès aux objets blob avec Microsoft Entra ID. Il existe des services qui nécessitent des chaînes de connexion de compte de stockage avec des clés d’accès. Pour ce scénario, nous vous recommandons cette solution.

Voici la solution de rotation décrite dans ce tutoriel :

Diagramme montrant la solution de rotation.

Dans cette solution, Azure Key Vault stocke les clés d’accès individuelles du compte de stockage en tant que versions du même secret, en remplaçant la clé primaire et secondaire dans les versions suivantes. Lorsqu’une clé d’accès est stockée dans la dernière version du secret, la clé secondaire est régénérée et ajoutée à Key Vault en tant que nouvelle version du secret. La solution propose le cycle de rotation complet de l'application pour actualiser la clé régénérée la plus récente.

  1. Trente jours avant la date d’expiration d’un secret, Key Vault publie l’événement d’expiration proche dans Event Grid.
  2. Event Grid vérifie les abonnements aux événements et utilise la méthode HTTP POST pour appeler le point de terminaison de l'application fonctionnelle abonnée à l'événement.
  3. L’application de fonction identifie la clé de remplacement (et non la dernière) et appelle le compte de stockage pour le régénérer.
  4. L’application de fonction ajoute la nouvelle clé régénérée à Azure Key Vault comme nouvelle version du secret.

Conditions préalables

  • Un abonnement Azure. Créez-en un gratuitement.
  • Azure Cloud Shell. Ce tutoriel utilise le portail Cloud Shell avec PowerShell env
  • Azure Key Vault.
  • Deux comptes de stockage Azure.

Remarque

La rotation de la clé de compte de stockage partagé révoque la signature d’accès partagé au niveau du compte (SAP) générée en fonction de cette clé. Après la rotation de la clé de compte de stockage, vous devez régénérer les jetons SAP au niveau du compte pour éviter les interruptions des applications.

Vous pouvez utiliser ce lien de déploiement si vous n’avez pas de coffre de clés et de comptes de stockage existants :

Lien intitulé Déployer sur Azure.

  1. Sous Groupe de ressources, sélectionnez Créer. Nommez le groupe vault rotation, puis sélectionnez OK.

  2. Sélectionnez Vérifier + créer.

  3. Cliquez sur Créer.

    Capture d’écran montrant comment créer un groupe de ressources.

Vous disposez maintenant d’un coffre de clés et de deux comptes de stockage. Vous pouvez vérifier cette configuration dans Azure CLI ou Azure PowerShell en exécutant cette commande :

az resource list -o table -g vaultrotation

Le résultat ressemblera à ceci :

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

Créer et déployer la fonction de rotation de clé

Ensuite, vous allez créer une application de fonction avec une identité managée par le système, en plus d’autres composants requis. Vous allez également déployer la fonction de rotation des clés pour les comptes de stockage.

La fonction de permutation de l’application de fonction nécessite les composants et la configuration suivants :

  • Un plan de service d'application Azure
  • Un compte de stockage pour gérer les déclencheurs d'application fonctionnelle
  • Stratégie d’accès pour accéder aux secrets dans Key Vault
  • Le rôle de service d’opérateur de clé de compte de stockage affecté à l’application de fonction afin qu’elle puisse accéder aux clés d’accès de compte de stockage
  • Fonction de rotation de clé avec un déclencheur d’événement et un déclencheur HTTP (rotation à la demande)
  • Un abonnement aux événements Event Grid pour l’événement SecretNearExpiry
  1. Sélectionnez le lien de déploiement de modèle Azure :

    Lien de déploiement de modèle Azure.

  2. Dans la liste des groupes de ressources, sélectionnez vaultrotation.

  3. Dans la zone RG du compte de stockage , entrez le nom du groupe de ressources dans lequel se trouve votre compte de stockage. Conservez la valeur par défaut [resourceGroup().name] si votre compte de stockage se trouve déjà dans le même groupe de ressources que celui où vous allez déployer la fonction de rotation de clé.

  4. Dans la zone Nom du compte de stockage , entrez le nom du compte de stockage qui contient les clés d’accès à faire pivoter. Conservez la valeur par défaut [concat(resourceGroup().name, 'storage')] si vous utilisez le compte de stockage créé dans les conditions préalables.

  5. Dans la zone RG Key Vault , entrez le nom du groupe de ressources dans lequel se trouve votre coffre de clés. Conservez la valeur par défaut [resourceGroup().name] si votre coffre de clés existe déjà dans le même groupe de ressources que celui où vous allez déployer la fonction de rotation de clé.

  6. Dans la zone Nom du coffre de clés, entrez le nom du coffre de clés. Conservez la valeur par défaut [concat(resourceGroup().name, '-kv')] si vous utilisez le coffre de clés créé dans les conditions préalables.

  7. Dans la zone Type de plan App Service , sélectionnez plan d’hébergement. Le plan Premium est nécessaire uniquement lorsque votre coffre de clés se trouve derrière le pare-feu.

  8. Dans la zone Nom de l’application de fonction , entrez le nom de l’application de fonction.

  9. Dans la zone Nom du secret, entrez le nom du secret dans lequel vous stockerez les clés d’accès.

  10. Dans la zone URL du dépôt , entrez l’emplacement GitHub du code de fonction. Dans ce tutoriel, vous pouvez utiliser https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git .

  11. Sélectionnez Vérifier + créer.

  12. Cliquez sur Créer.

    Capture d’écran montrant comment créer et déployer une fonction.

Une fois les étapes précédentes terminées, vous disposez d’un compte de stockage, d’une batterie de serveurs, d’une application de fonction et d’Application Insights. Une fois le déploiement terminé, cette page s’affiche :

Capture d’écran montrant la page indiquant que votre déploiement est terminé.

Remarque

Si vous rencontrez un échec, vous pouvez sélectionner Redéployer pour terminer le déploiement des composants.

Vous trouverez des modèles de déploiement et du code pour la fonction de rotation dans Azure Samples.

Ajouter les clés d’accès du compte de stockage aux secrets du Coffre de Clés

Tout d’abord, définissez votre stratégie d’accès pour accorder des autorisations de gestion des secrets à votre principal d’utilisateur :

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

Vous pouvez maintenant créer un secret avec une clé d’accès de compte de stockage comme valeur. Vous aurez également besoin de l’ID de ressource du compte de stockage, de la période de validité du secret et de l’ID de clé à ajouter au secret afin que la fonction de rotation puisse régénérer la clé dans le compte de stockage.

Déterminez l’ID de ressource du compte de stockage. Vous trouverez cette valeur dans la id propriété.

az storage account show -n vaultrotationstorage

Répertoriez les clés d’accès du compte de stockage pour obtenir les valeurs de clé :

az storage account keys list -n vaultrotationstorage

Ajoutez un secret au coffre de clés avec une période de validité de 60 jours, un ID de ressource de compte de stockage et, à des fins de démonstration, pour déclencher la rotation immédiatement, définissez la date d’expiration sur demain. Exécutez cette commande en utilisant vos valeurs récupérées pour key1Value et storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Ce secret déclenche l’événement SecretNearExpiry en quelques minutes. Cet événement déclenche à son tour la fonction de rotation du secret avec une expiration définie à 60 jours. Dans cette configuration, l’événement « SecretNearExpiry » est déclenché tous les 30 jours (30 jours avant l’expiration) et la fonction de rotation alterne la rotation entre key1 et key2.

Vous pouvez vérifier que les clés d’accès ont été régénérées en récupérant la clé de compte de stockage et le secret Key Vault et en les comparant.

Utilisez cette commande pour obtenir les informations secrètes :

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

Notez que CredentialId est mis à jour vers l'alternative keyName et que value est régénéré :

Capture d’écran montrant la sortie de la commande A Z keyvault secret show pour le premier compte de stockage.

Récupérez les clés d’accès pour comparer les valeurs :

az storage account keys list -n vaultrotationstorage 

Notez que la value de la clé est identique au secret du coffre de clés :

Capture d’écran montrant la sortie de la commande de liste des clés de compte de stockage A Z pour le premier compte de stockage.

Utiliser la fonction de rotation existante pour plusieurs comptes de stockage

Vous pouvez réutiliser la même application de fonction pour faire pivoter des clés pour plusieurs comptes de stockage.

Pour ajouter des clés de compte de stockage à une fonction existante pour la rotation, vous avez besoin des éléments suivants :

  • Le rôle de service d’opérateur de clé de compte de stockage affecté à l’application de fonction afin qu’elle puisse accéder aux clés d’accès de compte de stockage.
  • Un abonnement aux événements Event Grid pour l’événement SecretNearExpiry .
  1. Sélectionnez le lien de déploiement de modèle Azure :

    Lien de déploiement de modèle Azure.

  2. Dans la liste des groupes de ressources, sélectionnez vaultrotation.

  3. Dans la zone RG du compte de stockage , entrez le nom du groupe de ressources dans lequel se trouve votre compte de stockage. Conservez la valeur par défaut [resourceGroup().name] si votre compte de stockage se trouve déjà dans le même groupe de ressources que celui où vous allez déployer la fonction de rotation de clé.

  4. Dans la zone Nom du compte de stockage , entrez le nom du compte de stockage qui contient les clés d’accès à faire pivoter.

  5. Dans la zone RG Key Vault , entrez le nom du groupe de ressources dans lequel se trouve votre coffre de clés. Conservez la valeur par défaut [resourceGroup().name] si votre coffre de clés existe déjà dans le même groupe de ressources que celui où vous allez déployer la fonction de rotation de clé.

  6. Dans la zone Nom du coffre de clés, entrez le nom du coffre de clés.

  7. Dans la zone Nom de l’application de fonction , entrez le nom de l’application de fonction.

  8. Dans la zone Nom du secret, entrez le nom du secret dans lequel vous stockerez les clés d’accès.

  9. Sélectionnez Vérifier + créer.

  10. Cliquez sur Créer.

    Capture d’écran montrant comment créer un compte de stockage supplémentaire.

Ajouter une clé d’accès du compte de stockage aux secrets de Key Vault

Déterminez l’ID de ressource du compte de stockage. Vous trouverez cette valeur dans la id propriété.

az storage account show -n vaultrotationstorage2

Répertoriez les clés d’accès du compte de stockage pour obtenir la valeur key2 :

az storage account keys list -n vaultrotationstorage2

Ajoutez un secret au coffre de clés avec une période de validité de 60 jours, un ID de ressource de compte de stockage et, à des fins de démonstration, pour déclencher la rotation immédiatement, définissez la date d’expiration sur demain. Exécutez cette commande en utilisant vos valeurs récupérées pour key2Value et storageAccountResourceId:

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Utilisez cette commande pour obtenir les informations secrètes :

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

Notez que CredentialId est mis à jour vers l'alternative keyName et que value est régénéré :

Capture d’écran montrant la sortie de la commande A Z keyvault secret show pour le deuxième compte de stockage.

Récupérez les clés d’accès pour comparer les valeurs :

az storage account keys list -n vaultrotationstorage 

Notez que la value de la clé est identique au secret du coffre de clés :

Capture d’écran montrant la sortie de la commande de liste des clés de compte de stockage A Z pour le deuxième compte de stockage.

Désactiver la rotation d’un secret

Vous pouvez désactiver la rotation d’un secret simplement en supprimant l’abonnement Event Grid pour ce secret. Utilisez la cmdlet Azure PowerShell Remove-AzEventGridSubscription ou la commande Azure CLI az event grid event--subscription delete.

Fonctions de permutation Key Vault pour deux jeux d’informations d’identification

Modèle de fonctions de rotation pour deux ensembles d’informations d’identification et plusieurs fonctions prêtes à être utilisées :

Remarque

Ces fonctions de rotation sont créées par un membre de la communauté et non par Microsoft. Les fonctions de communauté ne sont pas prises en charge dans le cadre d’un programme ou d’un service de support Microsoft, et sont mises à disposition en tant qu’IS sans garantie d’aucune sorte.

Étapes suivantes