Automatiser la permutation d’un secret pour des ressources qui ont deux jeux d’informations d’authentification

La meilleure façon de s’authentifier auprès des services Azure consiste à utiliser une identité managée. Il existe toutefois des scénarios dans lesquels cette approche est inappropriée. Dans ces cas-là, des clés d’accès ou des mots de passe sont utilisés. Vous devez fréquemment permuter les clés d’accès et les mots de passe.

Ce tutoriel montre comment automatiser la rotation régulière des secrets pour les bases de données et les services qui utilisent deux jeux d’informations d’authentification. Plus précisément, ce tutoriel montre comment permuter 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 une notification Azure Event Grid.

Remarque

Pour les services de compte de stockage, l’utilisation de Microsoft Entra ID 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 permutation décrite dans ce tutoriel :

Diagram that shows the rotation solution.

Dans cette solution, Azure Key Vault stocke les clés d’accès individuelles de compte de stockage sous la forme de versions du même secret en alternant entre la clé primaire et la clé secondaire dans les versions qui se suivent. Quand une clé d’accès est stockée dans la dernière version du secret, la clé secondaire est regénérée et ajoutée à Key Vault en tant que nouvelle dernière version du secret. La solution fournit le cycle de permutation complet de l’application pour actualiser jusqu’à la clé regé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 sur Event Grid.
  2. Event Grid vérifie les abonnements aux événements et utilise HTTP POST pour appeler le point de terminaison de l’application de fonction qui est abonné à l’événement.
  3. L’application de fonction identifie la clé secondaire (pas la dernière) et appelle le compte de stockage pour la regénérer.
  4. L’application de fonction ajoute la nouvelle clé regénérée à Azure Key Vault en tant que nouvelle version du secret.

Prérequis

  • 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.

Notes

La rotation de la clé de compte de stockage partagée révoque la signature d’accès partagé (SAP) au niveau du compte 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 toute interruption des applications.

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

Link that's labelled Deploy to 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. Sélectionnez Create (Créer).

    Screenshot that shows how to create a resource group.

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

az resource list -o table -g vaultrotation

Le résultat doit ressembler à la sortie suivante :

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 permutation 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 nécessaires. Vous allez également déployer la fonction de permutation pour les clés de compte de stockage.

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

  • Un plan Azure App Service
  • Un compte de stockage pour gérer les déclencheurs de l’application de fonction
  • Une 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
  • Une fonction de permutation de clé avec un déclencheur d’événement et un déclencheur HTTP (permutation à la demande)
  • Un abonnement aux événements Event Grid pour l’événement SecretNearExpiry
  1. Sélectionnez le lien de déploiement d’un modèle Azure :

    Azure template deployment link.

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

  3. Dans la zone Groupe de ressources 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 dans lequel vous allez déployer la fonction de permutation de clés.

  4. Dans la zone Nom du compte de stockage, entrez le nom du compte de stockage qui contient les clés d’accès à permuter. Si vous utilisez un compte de stockage créé dans la section Prérequis, conservez la valeur par défaut [concat(resourceGroup().name, 'storage')] .

  5. Dans la zone Groupe de ressources du coffre de clés, 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 dans lequel vous allez déployer la fonction de permutation de clés.

  6. Dans la zone Nom du coffre de clés, entrez le nom du coffre de clés. Si vous utilisez un coffre de clés créé dans la section Prérequis, conservez la valeur par défaut [concat(resourceGroup().name, '-kv')] .

  7. Dans la zone Type du plan App Service, sélectionnez le plan d’hébergement. Le plan Premium n’est nécessaire que si votre coffre de clés se trouve derrière un 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 allez stocker les clés d’accès.

  10. Dans la zone URL du dépôt, entrez l’emplacement GitHub du code de la 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. Sélectionnez Create (Créer).

    Screenshot that shows how to create and deploy function.

Après avoir effectué les étapes précédentes, 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é, la page suivante s’affiche :

Screenshot that shows the Your deployment is complete page.

Remarque

En cas de problème, 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 permutation dans Exemples Azure.

Ajouter les clés d’accès de compte de stockage dans aux secrets de Key Vault

Commencez par définir votre stratégie d’accès pour accorder les autorisations Gérer les secrets à votre utilisateur principal :

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 ayant pour valeur une clé d’accès de compte de stockage. Vous avez é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 permutation puisse regénérer la clé dans le compte de stockage.

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

az storage account show -n vaultrotationstorage

Listez les clés d’accès de compte de stockage afin de pouvoir récupérer les valeurs des clés :

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 les valeurs récupérées pour key1Value et storageAccountResourceId :

$tomorrowDate = (get-date).AddDays(+1).ToString("yyyy-MM-ddTHH:mm:ssZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

Ce secret déclenchera l’événement SecretNearExpiry au bout de quelques minutes. Cet événement déclenchera à son tour la fonction permettant de permuter le secret, avec l’expiration définie sur 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 permutation alternera la permutation entre key1 et key2.

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

Utilisez cette commande pour obtenir des informations sur le secret :

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

Remarquez que CredentialId est mis à jour vers l’autre keyName et que value est regénérée :

Screenshot that shows the output of the A Z keyvault secret show command for the first storage account.

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 :

Screenshot that shows the output of the A Z storage account keys list command for the first storage account.

Utiliser la fonction de rotation existante pour plusieurs comptes de stockage

Vous pouvez réutiliser la même application de fonction pour permuter les clés de plusieurs comptes de stockage.

Pour ajouter des clés de compte de stockage à une fonction existante en vue d’une permutation, 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 d’un modèle Azure :

    Azure template deployment link.

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

  3. Dans la zone Groupe de ressources 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 dans lequel vous allez déployer la fonction de permutation de clés.

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

  5. Dans la zone Groupe de ressources du coffre de clés, 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 dans lequel vous allez déployer la fonction de permutation de clés.

  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 allez stocker les clés d’accès.

  9. Sélectionnez Revoir + créer.

  10. Sélectionnez Create (Créer).

    Screenshot that shows how to create an additional storage account.

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

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

az storage account show -n vaultrotationstorage2

Listez les clés d’accès de compte de stockage afin de pouvoir récupérer 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 les valeurs récupérées pour key2Value et storageAccountResourceId :

$tomorrowDate = (Get-Date).AddDays(+1).ToString('yyyy-MM-ddTHH:mm:ssZ')
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 des informations sur le secret :

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

Remarquez que CredentialId est mis à jour vers l’autre keyName et que value est regénérée :

Screenshot that shows the output of the A Z keyvault secret show command for the second storage account.

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 :

Screenshot that shows the output of the A Z storage account keys list command for the second storage account.

Désactiver la rotation d’un secret

Vous pouvez désactiver la rotation d’un secret en supprimant simplement l’abonnement à l’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 à l’emploi :

Notes

Ces fonctions de rotation sont créées par un membre de la communauté et non par Microsoft. Les fonctions fournies par la communauté ne sont prises en charge par aucun programme ou service d’assistance technique Microsoft. Ils sont proposés EN L’ÉTAT sans garantie d’aucune sorte.

Étapes suivantes