Gestion des secrets et des certificats avec Azure Key Vault
14/08/2024
Cet article technique et pédagogique vise à guider les analystes de sécurité, les administrateurs informatiques et les ingénieurs système dans l'utilisation d'Azure Key Vault pour gérer en toute sécurité les secrets (tels que les mots de passe, les clés API, les chaînes de connexion) et les certificats (SSL/TLS). Azure Key Vault est un service cloud qui fournit une solution centralisée et sécurisée pour stocker et accéder à ces éléments critiques, éliminant ainsi le besoin de les intégrer directement dans le code ou les fichiers de configuration, ce qui constitue une mauvaise pratique de sécurité [1].
Présentation
Dans le développement et l’exploitation d’applications modernes, la gestion des secrets et des certificats constitue un défi constant. Les informations d'identification de base de données, les clés API de services tiers, les clés de chiffrement et les certificats SSL/TLS sont des actifs sensibles qui, s'ils sont compromis, pourraient entraîner de graves violations de données. Les stocker de manière non sécurisée, par exemple dans des fichiers texte brut, des variables d'environnement ou directement dans le code source, présente un risque important. Azure Key Vault a été conçu pour résoudre ces problèmes en fournissant un référentiel matériel (HSM) sécurisé pour protéger ces actifs, en contrôlant étroitement l'accès et en simplifiant la gestion du cycle de vie [2].
Ce guide pratique couvrira la création d'un Azure Key Vault, l'ajout et la récupération de secrets et de certificats, la configuration des stratégies d'accès et l'intégration à d'autres services Azure tels qu'Azure App Service. Des instructions étape par étape, des exemples de commandes Azure CLI et des méthodes de validation seront fournis afin que le lecteur puisse mettre en œuvre une gestion sécurisée des secrets et des certificats, renforçant ainsi la posture de sécurité de ses applications et de son infrastructure cloud.
Pourquoi Azure Key Vault est-il crucial ?
- Stockage sécurisé : protège les secrets et les clés de chiffrement à l'aide de modules de sécurité matérielle (HSM) validés FIPS 140-2 niveau 2.
- Contrôle d'accès centralisé : vous permet de gérer les autorisations d'accès aux secrets et aux certificats à un niveau granulaire à l'aide du contrôle d'accès en fonction du rôle Azure (RBAC) ou des stratégies d'accès Key Vault.
- Gestion du cycle de vie : facilite la rotation des secrets et des certificats, l'expiration automatique et la notification des événements.
- Réduction des risques : élimine le besoin de stocker les informations d'identification dans des fichiers de code ou de configuration, minimisant ainsi le risque de fuite.
- Surveillance et audit : enregistre toutes les opérations effectuées dans Key Vault, fournissant des pistes d'audit pour les enquêtes de conformité et de sécurité.
- Intégration simplifiée : s'intègre facilement à d'autres services Azure, tels que Azure App Service, Azure Functions, Azure Virtual Machines et Azure DevOps.
Prérequis
Pour utiliser Azure Key Vault, vous aurez besoin des éléments suivants :
- Abonnement Azure actif : un abonnement Azure pour créer et gérer des ressources.
- Accès administrateur : un compte avec le rôle « Propriétaire » ou « Contributeur » dans l'abonnement Azure, ou un rôle personnalisé avec les autorisations nécessaires pour créer et gérer des Key Vaults.
- Azure CLI ou Azure PowerShell : outils de ligne de commande installés et configurés pour interagir avec Azure.
- Facultatif : Visual Studio Code : pour les tests de développement et d'intégration.
Étape par étape : Gestion des secrets et des certificats avec Azure Key Vault
Créons un Key Vault, ajoutons un secret et un certificat, et configurons l'accès.
1. Création d'un coffre-fort de clés Azure
Créons un Key Vault à l’aide d’Azure CLI. Vous pouvez également utiliser le portail Azure.
- Ouvrez votre terminal ou PowerShell et connectez-vous à Azure :
bash connexion az -
Créez un groupe de ressources (si vous n'en avez pas déjà un) :
bash az groupe créer --name RG-KeyVault-Artigos --location eastus -
Créez le coffre-fort de clés Azure. Choisissez un nom unique au monde pour votre Key Vault.
bash az keyvault create --name kv-artigos-seguranca-01 --resource-group RG-KeyVault-Artigos --location eastus --enabled-for-template-deployment true--enabled-for-template-deployment true: permet d'utiliser Key Vault pour les déploiements de modèles, utile pour l'automatisation.
2. Ajout d'un secret à Key Vault
Ajoutons un mot de passe de base de données comme secretle.
-
Ajoutez un secret appelé « DatabasePassword » avec un exemple de valeur :
bash az keyvault secret set --vault-name kv-artigos-seguranca-01 --name DatabasePassword --value "S3cur3P@ssw0rd!" -
Récupérez le secret pour vérifier qu'il a été correctement stocké :
bash az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv
3. Ajout d'un certificat à Key Vault
Ajoutons un certificat auto-signé à des fins de démonstration. En production, vous utiliserez des certificats d’une autorité de certification de confiance.
-
Créez un certificat auto-signé dans Key Vault :
bash az keyvault certificate create --vault-name kv-artigos-seguranca-01 --name MyWebAppCert --policy "$(az keyvault certificate get-default-policy)" -
Vérifiez les détails du certificat :
bash az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert
4. Configuration des politiques d'accès
Pour permettre aux applications ou aux utilisateurs d'accéder aux secrets et aux certificats, vous devez configurer des stratégies d'accès. Utilisons le contrôle d'accès en fonction du rôle Azure (RBAC).
- Obtenez l'« ID d'objet » de l'application ou de l'utilisateur qui aura besoin d'accéder. Pour une application (Service Principal), vous pouvez l’obtenir après l’avoir enregistrée auprès d’Azure AD. Pour un utilisateur, utilisez
az ad user show --id <user-principal-name> --query id -o tsv. - Attribuez un rôle à votre Key Vault. Par exemple, pour permettre à une application de lire des secrets :
bash # Exemple : Attribuez le rôle « Utilisateur Key Vault Secrets » à un principal de service az role assignation create --role "Key Vault Secrets User" --assignee-object-id <Object Application/User ID> --scope /subscriptions/<Votre ID d'abonnement>/resourceGroups/RG-KeyVault-Artigos/providers/Microsoft.KeyVault/vaults/kv-artigos-seguranca-01- Conseil : Pour les certificats, vous pouvez utiliser la fonction « Utilisateur du certificat Key Vault ».
5. Intégration à un Azure App Service (exemple)
Montrons comment une application peut consommer un secret de Key Vault.
- Créez un Azure App Service (si vous n'en avez pas déjà un) :
bash az appservice plan create --name AppServicePlan-Artigos --resource-group RG-KeyVault-Artigos --sku B1 --is-linux az webapp create --resource-group RG-KeyVault-Artigos --plan AppServicePlan-Artigos --name webapp-artigos-seguranca-01 -
Activez l’identité managée pour App Service. Cela permet à App Service de s’authentifier auprès d’Azure Key Vault sans informations d’identification explicites.
bash az webapp Identity Assign --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 -
Accordez à l’identité managée App Service l’autorisation d’accéder au secret dans Key Vault. Utilisez le
principalIdobtenu à l’étape précédente.bash az keyvault set-policy --name kv-artigos-seguranca-01 --object-id <principalManaged IdentityId> --secret-permissions obtenir la liste- Conseil : Pour utiliser RBAC, attribuez le rôle « Utilisateur Key Vault Secrets » au « principalId » de l'identité managée.
-
Configurez une référence secrète dans App Service. Cela permet à l'application d'accéder au secret en tant que variable d'environnement.
bash az webapp config appsettings set --resource-group RG-KeyVault-Artigos --name webapp-artigos-seguranca-01 --settings DatabasePassword="@Microsoft.KeyVault(SecretUri=https://kv-artigos-seguranca-01.vault.azure.net/secrets/DatabasePassword/)" -
Désormais, votre application (par exemple ASP.NET Core, Node.js) peut lire le secret « DatabasePassword » comme une variable d'environnement normale, et Azure App Service se chargera de le récupérer de Key Vault de manière sécurisée.
Validation et tests
La validation de la gestion des secrets et des certificats implique de vérifier que l'accès est accordé uniquement aux entités autorisées et que les secrets peuvent être correctement récupérés.
1. Test de l'accès aux secrets via Azure CLI
-
Essayez d'accéder au secret avec un compte qui ne dispose pas d'autorisations :
bash az login # Connectez-vous avec un compte sans autorisations az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Résultat attendu : La commande devrait échouer avec une erreur
AuthorizationFailed.
- Résultat attendu : La commande devrait échouer avec une erreur
-
Essayez d'accéder au secret avec un compte disposant des autorisations (par exemple, le compte qui a créé la clé V).ault ou l'identité gérée App Service si vous effectuez des tests depuis l'application).
bash az login # Connectez-vous avec un compte avec des autorisations az keyvault secret show --vault-name kv-artigos-seguranca-01 --name DatabasePassword --query value -o tsv- Résultat attendu : La commande doit renvoyer la valeur secrète.
2. Test de l'accès au certificat
- Vérifiez que le certificat peut être répertorié et récupéré par une entité autorisée.
bash az liste de certificats keyvault --vault-name kv-artigos-seguranca-01 az keyvault certificate show --vault-name kv-artigos-seguranca-01 --name MyWebAppCert- Résultat attendu : les commandes doivent renvoyer les détails du certificat.
3. Vérification des journaux d'audit de Key Vault
Toutes les opérations dans Key Vault sont enregistrées et peuvent être auditées.
- Dans le portail Azure, accédez à votre Key Vault (
kv-articles-seguranca-01). - Dans le volet de navigation de gauche, sélectionnez Journaux d'activité.
- Vous verrez un journal de toutes les opérations effectuées, y compris la création de secrets, de certificats et de tentatives d'accès.
Conseils de sécurité et bonnes pratiques
- Principe du moindre privilège : accordez uniquement les autorisations nécessaires (obtenir, répertorier, définir, supprimer) aux secrets et aux certificats. Évitez d’accorder des autorisations excessives.
- Rotation régulière des secrets : mettez en œuvre un processus de rotation régulière des secrets et des certificats afin de réduire le risque de compromission.
- Identités gérées : utilisez les identités gérées pour les ressources Azure (identités gérées) autant que possible pour vous authentifier auprès de Key Vault, éliminant ainsi le besoin de gérer les informations d'identification dans votre code.
- Politiques d'accès granulaires : utilisez les politiques d'accès Key Vault ou Azure RBAC pour contrôler qui peut accéder à quoi. Préférez le RBAC pour un contrôle plus fin.
- Surveillance et alertes : configurez des alertes pour les activités suspectes dans Key Vault, telles que les tentatives d'accès infructueuses ou les suppressions de secrets.
- Protection contre la suppression et la purge logicielle : activez la protection contre la suppression et la purge logicielle dans Key Vault pour éviter toute perte accidentelle ou malveillante de secrets et de certificats.
- Sauvegarde régulière : bien que Key Vault soit hautement disponible, pensez à sauvegarder vos secrets et certificats, en particulier pour les scénarios de reprise après sinistre.
- Secrets expirants : définissez les dates d'expiration des secrets et des certificats pour forcer la rotation et éviter d'utiliser d'anciennes informations d'identification.
Dépannage courant
- Erreur d'autorisation (403 interdit) : vérifiez les stratégies d'accès Key Vault ou les attributions de rôles RBAC pour l'entité qui tente d'accéder. Assurez-vous que le bon « ID d'objet » ou « principalId » est utilisé.
- Secret/Certificat introuvable : Vérifiez le nom du secret/certificat et le nom de Key Vault. Assurez-vous que le secret/certificat existe et n’a pas été supprimé ou expiré.
- Problèmes liés aux identités managées : vérifiez que l'identité managée a été activée pour la ressource Azure et que les autorisations appropriées ont été accordées dans Key Vault.
- Latence dans la récupération des secrets : dans certains cas, il peut y avoir une petite latence dans la récupération des secrets. Assurez-vous que votre application gère cela de manière asynchrone.
- Erreurs de connectivité : vérifiez les paramètres réseau de votre application ou de votre machine virtuelle. Assurez-vous qu’aucun pare-feu ou groupe de sécurité réseau ne bloque l’accès à Key Vault.
Conclusion
Azure Key Vault est un service essentiel pour toute organisation cherchant à protéger ses actifs numériques les plus sensibles dans le cloud. En centralisant la gestion des secrets et des certificats dans un référentiel sécurisé et hautement disponible, cela simplifie la conformité, réduit le risque de violation de données et améliore votre posture de sécurité globale. La mise en œuvre efficace d’Azure Key Vault, combinée aux meilleures pratiques de sécurité et d’automatisation, permet aux développeurs et aux opérateurs de se concentrer sur l’innovation, sachant que leurs informations d’identification et leurs clés sont protégées. Grâce à ce guide pratique, les professionnels de la sécurité pourront utiliser Azure Key Vault pour gérer les secrets et les certificats de manière sécurisée et efficace, garantissant l'intégrité et la confidentialité de leurs applications et données dans Azure.
Références :
[1]Microsoft Apprendre. Qu'est-ce qu'Azure Key Vault ?. Disponible sur : https://learn.microsoft.com/pt-br/azure/key-vault/general/overview [2] Microsoft Apprendre. Bonnes pratiques pour la gestion des secrets dans Azure Key Vault. Disponible sur : https://learn.microsoft.com/pt-br/azure/key-vault/secrets/secrets-best-practices [3] Microsoft Apprendre. À propos des certificats Azure Key Vault. Disponible sur : https://learn.microsoft.com/pt-br/azure/key-vault/certificates/about-certificates