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 de Azure services est d’utiliser une identité managée, mais certains scénarios nécessitent toujours des clés d’accès ou des mots de passe. Faites pivoter ces informations d’identification souvent pour réduire l’impact d’une fuite.

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 de l’autorotation entre différents types de ressources, consultez Présentation de l’autorotation dans Azure Key Vault.

Plus précisément, ce didacticiel effectue la rotation des clés de compte stockage Azure stockées dans Azure Key Vault en tant que secrets. Il utilise une fonction déclenchée par une notification Azure Event Grid.

Important

Pour stockage Azure, préférez l’autorisation Microsoft Entra ID avec une identité gérée plutôt que des clés de compte partagées. Lorsque la conformité est autorisée, désactivez l’autorisation de clé partagée sur le compte de stockage et supprimez entièrement la nécessité de la rotation des clés. Utilisez le modèle de ce didacticiel uniquement lorsqu’une charge de travail nécessite une clé de compte de stockage ou une chaîne de connexion.

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

Diagramme montrant la solution de rotation.

Dans cette solution, Azure Key Vault stocke chaque clé d’accès de compte de stockage sous la forme d’une version du même secret, en remplaçant la clé primaire et secondaire dans les versions successives. Lorsqu’une clé d’accès est stockée en tant que dernière version du secret, la clé secondaire est régénérée et ajoutée à Key Vault en tant que nouvelle version. Cette conception donne à l’application un cycle de rotation complet pour récupérer la clé nouvellement régénérée.

  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 HTTP POST pour appeler le point de terminaison de l’application de fonction abonné à 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 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 l’environnement PowerShell.
  • Un coffre de clés Azure.
  • Deux comptes de stockage Azure.

Remarque

La rotation d’une clé de compte de stockage partagé révoque toute signature d’accès partagé au niveau du compte générée à partir de cette clé. Après la rotation, régénérez les jetons SAP au niveau du compte pour éviter toute interruption des applications.

Si vous n’avez pas de coffre de clés existant et deux comptes de stockage, utilisez ce lien de déploiement :

Lien étiqueté 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. Vérifiez cette configuration dans le Azure CLI ou Azure PowerShell :

az resource list -o table -g vaultrotation

Le résultat ressemble à 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 rotation de clé

Ensuite, créez une application de fonction avec une identité managée affectée par le système, ainsi que les autres composants requis, puis déployez la fonction de rotation pour les clés de compte de stockage.

La fonction de rotation nécessite les composants et la configuration suivants :

  • Un plan Azure App Service.
  • Un compte de stockage pour gérer les déclencheurs d’une application de fonction.
  • Attribution de rôle Azure qui permet à l’application de fonction Azure d’accéder aux secrets du coffre de clés.
  • 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 Event Grid et un déclencheur HTTP (pour la 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 le compte de stockage RG, entrez le nom du groupe de ressources où se trouve le compte de stockage. Conservez la valeur par défaut [resourceGroup().name] si le compte de stockage se trouve dans le même groupe de ressources que la fonction de rotation.

  4. Dans le nom du compte de stockage, entrez le nom du compte de stockage dont vous souhaitez faire pivoter les clés d’accès. Conservez la valeur par défaut [concat(resourceGroup().name, 'storage')] si vous utilisez le compte de stockage des prérequis.

  5. Dans Key Vault RG, entrez le nom du groupe de ressources où se trouve le key vault. Conservez la valeur par défaut [resourceGroup().name] si le coffre de clés se trouve dans le même groupe de ressources que la fonction de rotation.

  6. Dans 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 des prérequis.

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

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

  9. Dans Nom du secret, entrez le nom du secret qui stocke les clés d’accès.

  10. Dans l’URL du dépôt, entrez l’emplacement GitHub du code de fonction : 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 le déploiement terminé, vous disposez d’un compte de stockage, d’une batterie de serveurs, d’une application de fonction et d’une ressource Application Insights :

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

Remarque

Ce modèle ARM utilise le déploiement de contrôle de code source App Service (Kudu) pour extraire le code de fonction de GitHub. Pour une charge de travail de production, nous vous recommandons plutôt d’utiliser un déploiement par package, comme func azure functionapp publish ou le déploiement ZIP avec WEBSITE_RUN_FROM_PACKAGE. Si le déploiement échoue, sélectionnez Redéployer pour réessayer .

Les modèles de déploiement et le code de la fonction de rotation se trouvent dans Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.

Ajouter les clés d’accès du compte de stockage à Key Vault secrets

D'abord, attribuez-vous le rôle Agent des secrets Key Vault afin de pouvoir gérer les secrets dans le coffre :

az role assignment create --role "Key Vault Secrets Officer" --assignee <email-address-of-user> --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/vaultrotation-kv

Vous pouvez maintenant créer un secret dont la valeur est une clé d’accès au compte de stockage. En plus de la valeur, ajoutez l’ID de ressource du compte de stockage, la période de validité du secret et l’ID de clé en tant que balises 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. C’est 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 le secret dans le coffre de clés avec une période de validité de 60 jours et, à des fins de démonstration, une date d’expiration fixée à demain afin de déclencher immédiatement la rotation. Exécutez cette commande avec 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 <key1-value> --tags "CredentialId=key1" "ProviderAddress=<storage-account-resource-id>" "ValidityPeriodDays=60" --expires $tomorrowDate

Ce secret déclenche un SecretNearExpiry événement en quelques minutes, ce qui déclenche à son tour la fonction pour faire pivoter le secret avec un délai d’expiration défini 60 jours. Dans cette configuration, l’événement SecretNearExpiry se déclenche tous les 30 jours (30 jours avant l’expiration), et la fonction de rotation alterne entre key1 et key2.

Vérifiez les clés d’accès régénérées en récupérant la clé du compte de stockage et le secret du coffre de clés Key Vault, puis 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 valeur de la clé correspond au secret dans le 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 une 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 les clés d’un autre compte de stockage à une fonction de rotation existante, 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 le compte de stockage RG, entrez le nom du groupe de ressources où se trouve le compte de stockage. Conservez la valeur par défaut [resourceGroup().name] si le compte de stockage se trouve dans le même groupe de ressources que la fonction de rotation.

  4. Dans le nom du compte de stockage, entrez le nom du compte de stockage dont vous souhaitez faire pivoter les clés d’accès.

  5. Dans Key Vault RG, entrez le nom du groupe de ressources où se trouve le key vault. Conservez la valeur par défaut [resourceGroup().name] si le coffre de clés se trouve dans le même groupe de ressources que la fonction de rotation.

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

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

  8. Dans Nom du secret, entrez le nom du secret qui stocke 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 de compte de stockage à Key Vault secrets

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 le secret dans le coffre de clés avec une période de validité de 60 jours et, à des fins de démonstration, une date d’expiration fixée à demain afin de déclencher immédiatement la rotation. Exécutez cette commande avec 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 <key2-value> --tags "CredentialId=key2" "ProviderAddress=<storage-account-resource-id>" "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 vaultrotationstorage2

Notez que la valeur de la clé correspond au secret dans le 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

Pour désactiver la rotation d’un secret, supprimez l’abonnement Event Grid pour ce secret. Utilisez l’applet de commande Remove-AzEventGridSubscription Azure PowerShell ou la commande Azure CLI az eventgrid event-subscription delete.

Utiliser l’IA pour personnaliser la fonction de rotation pour d’autres services

Ce tutoriel montre la rotation des secrets pour les comptes de stockage Azure, mais vous pouvez adapter la fonction de rotation pour d’autres services Azure qui utilisent des informations d’identification doubles. GitHub Copilot pouvez vous aider à modifier le code de la fonction de rotation PowerShell pour qu’il fonctionne avec votre service.

I'm using the Azure Key Vault dual-credential secret rotation tutorial for Storage accounts. Help me modify the PowerShell rotation function to work with Azure Cosmos DB instead. The function should:
1. Connect to Cosmos DB and regenerate the secondary key
2. Store the new key in Key Vault as a new secret version
3. Alternate between primary and secondary keys on each rotation
Show me the changes needed to the PowerShell function code, including the correct Cosmos DB PowerShell cmdlets.

GitHub Copilot est alimenté par l’IA, donc les surprises et les erreurs sont possibles. Pour plus d’informations, consultez Copilot FAQ.

Étapes suivantes