Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
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.
- Trente jours avant la date d’expiration d’un secret, Key Vault publie l’événement d’expiration proche dans Event Grid.
- 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.
- 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.
- 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 :
Sous Groupe de ressources, sélectionnez Créer. Nommez le groupe vault rotation, puis sélectionnez OK.
Sélectionnez Vérifier + créer.
Cliquez sur Créer.
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 .
Sélectionnez le lien de déploiement de modèle Azure :
Dans la liste des groupes de ressources, sélectionnez vaultrotation.
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.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.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.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.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.
Dans Nom de l’application de fonction, entrez le nom de l’application de fonction.
Dans Nom du secret, entrez le nom du secret qui stocke les clés d’accès.
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.Sélectionnez Vérifier + créer.
Cliquez sur Créer.
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 :
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é :
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 :
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 .
Sélectionnez le lien de déploiement de modèle Azure :
Dans la liste des groupes de ressources, sélectionnez vaultrotation.
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.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.
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.Dans Nom du coffre de clés, entrez le nom du coffre de clés.
Dans Nom de l’application de fonction, entrez le nom de l’application de fonction.
Dans Nom du secret, entrez le nom du secret qui stocke les clés d’accès.
Sélectionnez Vérifier + créer.
Cliquez sur Créer.
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é :
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 :
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
- Rotation des secrets pour un ensemble d’informations d’identification
- Comprendre l'autorotation dans Azure Key Vault
- Monitoring Key Vault avec Azure Event Grid
- Créer votre première fonction dans le portail Azure
- Recevoir un courrier électronique lorsqu’un secret de Key Vault change
- schéma d’événement Azure Event Grid pour Azure Key Vault