Extension de machine virtuelle Key Vault pour Windows
L’extension de machine virtuelle Azure Key Vault assure l’actualisation automatique des certificats stockés dans un coffre de clés Azure. L’extension surveille une liste de certificats observés stockés dans des coffres de clés. Lors de la détection d’une modification, l’extension récupère et installe les certificats correspondants. Cet article présente les plateformes, configurations et options de déploiement qui sont prises en charge pour l’extension de machine virtuelle Key Vault pour Windows.
Systèmes d’exploitation
L’extension de machine virtuelle Key Vault prend en charge les versions ci-dessous de Windows :
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012
L’extension de machine virtuelle Key Vault est également prise en charge sur une machine virtuelle locale personnalisée. La machine virtuelle doit être chargée et convertie en image spécialisée pour être utilisée dans Azure avec l’installation minimale Windows Server 2019.
Certificats pris en charge
L’extension de machine virtuelle Key Vault prend en charge les types de contenu de certificat suivants :
- PKCS#12
- PEM
Notes
L’extension de machine virtuelle Key Vault télécharge tous les certificats dans le magasin de certificats Windows ou l’emplacement fourni par la propriété certificateStoreLocation
dans les paramètres de l’extension de machine virtuelle.
Mises à jour dans la version 3.0+
La version 3.0 de l’extension de machine virtuelle Key Vault pour Windows ajoute la prise en charge des fonctionnalités suivantes :
- Ajouter des autorisations ACL aux certificats téléchargés
- Configuration du magasin de certificats par certificat
- Exporter des clés privées
- Prise en charge de la reliaison de certificats IIS
Prérequis
Passez en revue les conditions préalables suivantes pour l’utilisation de l’extension de machine virtuelle Key Vault pour Windows :
Une instance Key Vault Azure avec un certificat. Pour plus d’informations, consultez Créer un coffre de clé avec le portail Azure.
Une machine virtuelle avec une identité managée affectée.
Le rôle Utilisateur de secrets Key Vault doit être attribué au niveau de l’étendue Key Vault pour les machines virtuelles et l’identité managée Azure Virtual Machine Scale Sets. Ce rôle récupère la partie d’un secret d’un certificat. Pour plus d’informations, consultez les articles suivants :
Les groupes de machines virtuelles identiques doivent avoir la configuration
identity
suivante :"identity": { "type": "UserAssigned", "userAssignedIdentities": { "[parameters('userAssignedIdentityResourceId')]": {} } }
L’extension de machine virtuelle Key Vault doit avoir la configuration
authenticationSettings
suivante :"authenticationSettings": { "msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]", "msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]" }
Notes
L’ancien modèle d’autorisation de stratégie d’accès peut également être utilisé pour fournir l’accès aux machines virtuelles et aux Virtual Machine Scale Sets. Cette méthode nécessite une stratégie avec des autorisations d’obtention et de liste sur les secrets. Pour plus d’informations, consultez Attribuer une stratégie d’accès Key Vault.
Schéma d’extensions
L’extrait JSON suivant illustre le schéma de l’extension de machine virtuelle Key Vault. Avant d’examiner les options d’implémentation de schéma, passez en revue les notes importantes suivantes.
L’extension ne nécessite pas de paramètre protégés. Tous les paramètres sont considérés comme des informations publiques.
Vos URL de certificats observés doivent être de la forme
https://myVaultName.vault.azure.net/secrets/myCertName
.Cette forme est préférée car le chemin
/secrets
retourne le certificat complet, y compris la clé privée, contrairement au chemin/certificates
. Pour plus d’informations sur les certificats, consultez Vue d’ensemble des clés, des secrets et des certificats Azure Key Vault.La propriété
authenticationSettings
est requise pour les machines virtuelles avec n’importe quelles identités affectées par l’utilisateur.Elle spécifie l'identité à utiliser pour l'authentification auprès de Key Vault. Définissez cette propriété avec une identité affectée par le système pour éviter les problèmes liés à une extension de machine virtuelle avec plusieurs identités.
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KVVMExtensionForWindows",
"apiVersion": "2022-08-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "3.0",
"autoUpgradeMinorVersion": true,
"settings": {
"secretsManagementSettings": {
"pollingIntervalInS": <A string that specifies the polling interval in seconds. Example: "3600">,
"linkOnRenewal": <Windows only. Ensures s-channel binding when the certificate renews without necessitating redeployment. Example: true>,
"requireInitialSync": <Initial synchronization of certificates. Example: true>,
"observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example:
[
{
"url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
"certificateStoreName": <The certificate store name. Example: "MY">,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
"accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreName": <Example: "MY">,
"certificateStoreLocation": <Example: "CurrentUser">,
"keyExportable": <Optional. Lets the private key be exportable. Example: "false">,
"accounts": <Example: ["Local Service"]>
}
]>
},
"authenticationSettings": {
"msiEndpoint": <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
"msiClientId": <Required when the VM has any user assigned identities. Specifies the MSI identity. Example: "c7373ae5-91c2-4165-8ab6-7381d6e75619">
}
}
}
}
Valeurs de propriétés
Le schéma JSON comprend les propriétés suivantes.
Nom | Valeur/Exemple | Type de données |
---|---|---|
apiVersion |
2022-08-01 | Date |
publisher |
Microsoft.Azure.KeyVault | string |
type |
KeyVaultForWindows | string |
typeHandlerVersion |
"3.0" | string |
pollingIntervalInS |
"3600" | string |
linkOnRenewal (facultatif) |
true | boolean |
requireInitialSync (facultatif) |
false | boolean |
observedCertificates |
[{...}, {...}] | tableau de chaînes |
observedCertificates/url |
"https://myvault.vault.azure.net/secrets/mycertificate" | string |
observedCertificates/certificateStoreName |
MY | string |
observedCertificates/certificateStoreLocation |
LocalMachine ou CurrentUser (respect de la casse) | string |
observedCertificates/keyExportable (facultatif) |
false | boolean |
observedCertificates/accounts (facultatif) |
["Network Service", "Local Service"] | tableau de chaînes |
msiEndpoint |
"http://169.254.169.254/metadata/identity/oauth2/token" | string |
msiClientId |
c7373ae5-91c2-4165-8ab6-7381d6e75619 | string |
Déploiement de modèle
Les extensions de machines virtuelles Azure peuvent être déployées avec des modèles Azure Resource Manager. Les modèles sont idéaux lorsque vous déployez une ou plusieurs machines virtuelles nécessitant une actualisation de certificats après le déploiement. Vous pouvez déployer l’extension sur des machines virtuelles individuelles ou dans des instances de Virtual Machine Scale Sets. La configuration et le schéma sont communs aux deux types de modèle.
La configuration JSON d’une extension de coffre de clés est imbriquée dans le modèle de machine virtuelle ou de Virtual Machine Scale Sets. Pour une extension de ressource de machine virtuelle, la configuration est imbriquée sous l’objet "resources": []
de machine virtuelle. Pour une extension d’instance de Virtual Machine Scale Sets, la configuration est imbriquée sous l’objet "virtualMachineProfile":"extensionProfile":{"extensions" :[]
.
Les extraits de code JSON suivants fournissent des exemples de paramètres pour un déploiement de modèle ARM de l’extension de machine virtuelle Key Vault.
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KeyVaultForWindows",
"apiVersion": "2022-08-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "3.0",
"autoUpgradeMinorVersion": true,
"settings": {
"secretsManagementSettings": {
"pollingIntervalInS": <A string that specifies the polling interval in seconds. Example: "3600">,
"linkOnRenewal": <Windows only. Ensures s-channel binding when the certificate renews without necessitating redeployment. Example: true>,
"observedCertificates": <An array of KeyVault URIs that represent monitored certificates, including certificate store location and ACL permission to certificate private key. Example:
[
{
"url": <A Key Vault URI to the secret portion of the certificate. Example: "https://myvault.vault.azure.net/secrets/mycertificate1">,
"certificateStoreName": <The certificate store name. Example: "MY">,
"certificateStoreLocation": <The certificate store location, which currently works locally only. Example: "LocalMachine">,
"accounts": <Optional. An array of preferred accounts with read access to certificate private keys. Administrators and SYSTEM get Full Control by default. Example: ["Network Service", "Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate2">,
"certificateStoreName": <Example: "MY">,
"certificateStoreLocation": <Example: "CurrentUser">,
"keyExportable": <Optional. Lets the private key be exportable. Example: "false">,
"accounts": <Example: ["Local Service"]>
},
{
"url": <Example: "https://myvault.vault.azure.net/secrets/mycertificate3">,
"certificateStoreName": <Example: "TrustedPeople">,
"certificateStoreLocation": <Example: "LocalMachine">
}
]>
},
"authenticationSettings": {
"msiEndpoint": <Required when the msiClientId property is used. Specifies the MSI endpoint. Example for most Azure VMs: "http://169.254.169.254/metadata/identity/oauth2/token">,
"msiClientId": <Required when the VM has any user assigned identities. Specifies the MSI identity. Example: "c7373ae5-91c2-4165-8ab6-7381d6e75619">
}
}
}
}
Tri des dépendances d’extension
Vous pouvez activer l’extension de machine virtuelle Key Vault pour prendre en charge l’ordre des dépendances d’extension. Par défaut, l’extension de machine virtuelle Key Vault signale un démarrage réussi dès le début de l’interrogation. Toutefois, vous pouvez configurer l’extension pour signaler un démarrage réussi uniquement après que l’extension a téléchargé et installé tous les certificats.
Si vous utilisez d’autres extensions qui nécessitent l’installation de tous les certificats avant leur démarrage, vous pouvez activer l’ordre des dépendances d’extension dans l’extension de machine virtuelle Key Vault. Cette fonctionnalité permet à d’autres extensions de déclarer une dépendance sur l’extension de machine virtuelle Key Vault.
Vous pouvez utiliser cette fonctionnalité pour empêcher le démarrage d’autres extensions jusqu’à ce que tous les certificats dépendants soient installés. Lorsque la fonctionnalité est activée, l’extension de machine virtuelle Key Vault tente de télécharger et d’installer indéfiniment les certificats et reste dans un état de transition, jusqu’à ce que tous les certificats soient correctement installés. Une fois tous les certificats présents, l’extension de machine virtuelle Key Vault signale un démarrage réussi.
Pour activer la fonctionnalité de classement des dépendances d’extension dans l’extension de machine virtuelle Key Vault, définissez la propriété secretsManagementSettings
:
"secretsManagementSettings": {
"requireInitialSync": true,
...
}
Pour plus d’informations sur la configuration des dépendances entre les extensions, consultez Provisionnement d’extensions de séquence dans les Virtual Machine Scale Sets.
Important
La fonctionnalité de classement des dépendances d’extension n’est pas compatible avec un modèle ARM qui crée une identité affectée par le système et met à jour une stratégie d’accès Key Vault avec celle-ci. Si vous tentez d’utiliser la fonctionnalité dans ce scénario, un blocage se produit, car la stratégie d’accès Key Vault ne peut pas être mise à jour tant que toutes les extensions n’ont pas démarré. Vous devez utiliser à la place une identité MSI unique affectée par l’utilisateur et inscrire vos coffres au préalable sur une liste de contrôle d’accès en utilisant cette identité avant de les déployer.
Déploiement d’Azure PowerShell
L’extension de machine virtuelle Azure Key Vault peut être déployée avec Azure PowerShell. Enregistrez les paramètres d’extension de machine virtuelle Key Vault dans un fichier JSON (settings.json).
Les extraits de code JSON suivants fournissent des exemples de paramètres pour le déploiement de l’extension de machine virtuelle Key Vault avec PowerShell.
{
"secretsManagementSettings": {
"pollingIntervalInS": "3600",
"linkOnRenewal": true,
"observedCertificates":
[
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service"
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"keyExportable": true,
"accounts": [
"Network Service",
"Local Service"
]
}
]},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "c7373ae5-91c2-4165-8ab6-7381d6e75619"
}
}
Déployer sur une machine virtuelle
# Build settings
$settings = (get-content -raw ".\settings.json")
$extName = "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
# Start the deployment
Set-AzVmExtension -TypeHandlerVersion "3.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settings
Déployer sur un Virtual Machine Scale Sets instance
# Build settings
$settings = ".\settings.json"
$extName = "KeyVaultForWindows"
$extPublisher = "Microsoft.Azure.KeyVault"
$extType = "KeyVaultForWindows"
# Add extension to Virtual Machine Scale Sets
$vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName>
Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "3.0" -Setting $settings
# Start the deployment
Update-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> -VirtualMachineScaleSet $vmss
Déploiement de l’interface de ligne de commande Azure
L’extension de machine virtuelle Azure Key Vault peut être déployée à l’aide d’Azure CLI. Enregistrez les paramètres d’extension de machine virtuelle Key Vault dans un fichier JSON (settings.json).
Les extraits de code JSON suivants fournissent des exemples de paramètres pour le déploiement de l’extension de machine virtuelle Key Vault avec Azure CLI.
{
"secretsManagementSettings": {
"pollingIntervalInS": "3600",
"linkOnRenewal": true,
"observedCertificates": [
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate1",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"accounts": [
"Network Service"
]
},
{
"url": "https://<examplekv>.vault.azure.net/secrets/certificate2",
"certificateStoreName": "MY",
"certificateStoreLocation": "LocalMachine",
"keyExportable": true,
"accounts": [
"Network Service",
"Local Service"
]
}
]
},
"authenticationSettings": {
"msiEndpoint": "http://169.254.169.254/metadata/identity/oauth2/token",
"msiClientId": "c7373ae5-91c2-4165-8ab6-7381d6e75619"
}
}
Déployer sur une machine virtuelle
# Start the deployment
az vm extension set --name "KeyVaultForWindows" `
--publisher Microsoft.Azure.KeyVault `
--resource-group "<resourcegroup>" `
--vm-name "<vmName>" `
--settings "@settings.json"
Déployer sur un Virtual Machine Scale Sets instance
# Start the deployment
az vmss extension set --name "KeyVaultForWindows" `
--publisher Microsoft.Azure.KeyVault `
--resource-group "<resourcegroup>" `
--vmss-name "<vmssName>" `
--settings "@settings.json"
Problèmes de dépannage
Voici quelques suggestions pour résoudre les problèmes de déploiement.
Questions fréquentes
Existe-t-il une limite au nombre de certificats observés ?
Non. L’extension de machine virtuelle Key Vault ne limite pas le nombre de certificats observés (observedCertificates
).
Quelle est l’autorisation par défaut lorsqu’aucun compte n’est spécifié ?
Par défaut, les administrateurs et SYSTEM reçoivent le contrôle total.
Comment déterminer si une clé de certificat est CAPI1 ou CNG ?
L’extension s’appuie sur le comportement par défaut de l’API PFXImportCertStore. Par défaut, si l’attribut Nom du fournisseur d’un certificat correspond à CAPI1, alors le certificat est importé avec les API CAPI1. Sinon, le certificat est importé à l’aide d’API CNG.
L’extension prend-elle en charge le rétablissement automatique de la liaison de certificat ?
Oui, l’extension de machine virtuelle Azure Key Vault prend en charge le rétablissement automatique de la liaison de certificat. L’extension de machine virtuelle Key Vault prend en charge la liaison de canal S au moment du renouvellement de certificat lorsque la valeur de la propriété linkOnRenewal
est définie sur true.
Pour IIS, vous pouvez configurer le rétablissement automatique de liaison en activant le rétablissement automatique de liaison des renouvellements de certificat dans IIS. L’extension de machine virtuelle Azure Key Vault génère des notifications de cycle de vie des certificats lorsqu’un certificat avec un SAN correspondant est installé. IIS utilise cet évènement pour rétablir automatiquement la liaison du certificat. Pour obtenir plus d’informations, consultez Rétablissement de liaison de certificat dans IIS
Afficher l’état de l’extension
Vérifiez le statut de votre déploiement d’extension dans le Portail Azure ou à l’aide de PowerShell ou d’Azure CLI.
Pour voir l’état du déploiement des extensions pour une machine virtuelle donnée, exécutez les commandes suivantes.
Azure PowerShell :
Get-AzVMExtension -ResourceGroupName <myResourceGroup> -VMName <myVM> -Name <myExtensionName>
L’interface de ligne de commande Azure CLI :
az vm get-instance-view --resource-group <myResourceGroup> --name <myVM> --query "instanceView.extensions"
Passer en revue les journaux et la configuration
Les journaux d’extension Key Vault machine virtuelle existent uniquement localement sur la machine virtuelle. Passez en revue les détails du journal pour vous aider à résoudre les problèmes.
Fichier journal | Description |
---|---|
C:\WindowsAzure\Logs\WaAppAgent.log` | Indique quand des mises à jour se produisent pour l’extension. |
C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<version la plus récente>\ | Affiche l’état du téléchargement du certificat. L’emplacement de téléchargement est toujours le magasin MY de l’ordinateur Windows (certlm.msc). |
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<version la plus récente>\RuntimeSettings\ | Les journaux du service d’extension de machine virtuelle Key Vault affichent l’état du service akvvm_service. |
C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<version la plus récente>\Status\ | Configuration et fichiers binaires du service d’extension de machine virtuelle Key Vault. |
Obtenir de l’aide
Voici quelques autres options pour vous aider à résoudre les problèmes de déploiement :
Pour obtenir de l’aide, contactez les experts Azure sur les forums Q&A et Stack Overflow.
Si ne trouvez pas de réponse, vous pouvez publier une question sur ce site pour que Microsoft ou d’autres membres de la communauté puissent vous aider.
Vous pouvez aussi contacter le Support Microsoft. Pour plus d’informations sur l’utilisation du support Azure, lisez les Questions fréquentes (FAQ) sur le support Azure.