Key Vault virtuele-machine-extensie voor Windows
De Key Vault VM-extensie biedt automatische vernieuwing van certificaten die zijn opgeslagen in een Azure-sleutelkluis. De extensie bewaakt met name een lijst met waargenomen certificaten die zijn opgeslagen in sleutelkluizen, en bij het detecteren van een wijziging worden de bijbehorende certificaten opgehaald en geïnstalleerd. In dit document worden de ondersteunde platformen, configuraties en implementatieopties voor de Key Vault VM-extensie voor Windows.
Besturingssysteem
De Key Vault VM-extensie ondersteunt onderstaande versies van Windows:
- Windows Server 2019
- Windows Server 2016
- Windows Server 2012
De Key Vault-VM-extensie wordt ook ondersteund op aangepaste lokale VM's die worden geüpload naar en geconverteerd naar een gespecialiseerde installatie-installatie voor gebruik in Azure met behulp van Windows Server 2019 Core Install.
Ondersteunde typen certificaatinhoud
- PKCS #12
- PEM
Vereisten
- Key Vault met certificaat. Zie Een Key Vault
- VM moet een beheerde identiteit hebben toegewezen
- Het Key Vault toegangsbeleid moet worden ingesteld met geheimen en machtigingen voor de beheerde identiteit van
getVM/VMSS om het deel van het certificaat van een geheimlistop te halen. Zie How to Authenticate to Key Vault and Assign a Key Vault access policy (Een Key Vault-toegangsbeleid toewijzen). - Virtual Machine Scale Sets moet de volgende identiteitsinstelling hebben:
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[parameters('userAssignedIdentityResourceId')]": {}
}
}
- De AKV-extensie moet deze instelling hebben:
"authenticationSettings": {
"msiEndpoint": "[parameters('userAssignedIdentityEndpoint')]",
"msiClientId": "[reference(parameters('userAssignedIdentityResourceId'), variables('msiApiVersion')).clientId]"
}
Extensieschema
De volgende JSON toont het schema voor de Key Vault VM-extensie. Voor de extensie zijn geen beveiligde instellingen vereist. Alle instellingen worden beschouwd als openbare informatie. Voor de extensie is een lijst met bewaakte certificaten, pollingfrequentie en het doelcertificaatopslag vereist. Met name:
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KVVMExtensionForWindows",
"apiVersion": "2019-07-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"secretsManagementSettings": {
"pollingIntervalInS": <string specifying polling interval in seconds, e.g: "3600">,
"certificateStoreName": <certificate store name, e.g.: "MY">,
"linkOnRenewal": <Only Windows. This feature ensures s-channel binding when certificate renews, without necessitating a re-deployment. e.g.: false>,
"certificateStoreLocation": <certificate store location, currently it works locally only e.g.: "LocalMachine">,
"requireInitialSync": <initial synchronization of certificates e..g: true>,
"observedCertificates": <list of KeyVault URIs representing monitored certificates, e.g.: "https://myvault.vault.azure.net/secrets/mycertificate"
},
"authenticationSettings": {
"msiEndpoint": <Optional MSI endpoint e.g.: "http://169.254.169.254/metadata/identity">,
"msiClientId": <Optional MSI identity e.g.: "c7373ae5-91c2-4165-8ab6-7381d6e75619">
}
}
}
}
Notitie
De URL's van uw waargenomen certificaten moeten de vorm https://myVaultName.vault.azure.net/secrets/myCertName hebben.
Dit komt doordat het pad het volledige certificaat, met inbegrip van de persoonlijke sleutel, retourneert, terwijl /secrets het pad dat niet /certificates doet. Meer informatie over certificaten vindt u hier: Key Vault Certificaten
Belangrijk
De eigenschap authenticationSettings is alleen vereist voor VM's met door de gebruiker toegewezen identiteiten. Hiermee geeft u de identiteit op die moet worden gebruikt voor verificatie Key Vault.
Belangrijk
Als u de 'msiClientId' opgeeft, is de eigenschap 'msiEndpoint' vereist. Normaal gesproken moet de waarde worden ingesteld op http://169.254.169.254/metadata/identity/oauth2/token .
Eigenschapswaarden
| Name | Waarde/voorbeeld | Gegevenstype |
|---|---|---|
| apiVersion | 2019-07-01 | date |
| publisher | Microsoft.Azure.KeyVault | tekenreeks |
| type | KeyVaultForWindows | tekenreeks |
| typeHandlerVersion | 1.0 | int |
| pollingIntervalIns | 3600 | tekenreeks |
| certificateStoreName | MY | tekenreeks |
| linkOnRenewal | onjuist | booleaans |
| certificateStoreLocation | LocalMachine of CurrentUser (casegevoelig) | tekenreeks |
| requireInitialSync | true | booleaans |
| observedCertificates | ["https://myvault.vault.azure.net/secrets/mycertificate", "https://myvault.vault.azure.net/secrets/mycertificate2"] | tekenreeksmatrice |
| msiEndpoint | http://169.254.169.254/metadata/identity | tekenreeks |
| msiClientId | c7373ae5-91c2-4165-8ab6-7381d6e75619 | tekenreeks |
Sjabloonimplementatie
Azure VM-extensies kunnen worden geïmplementeerd met Azure Resource Manager sjablonen. Sjablonen zijn ideaal bij het implementeren van een of meer virtuele machines waarvoor het vernieuwen van certificaten na de implementatie is vereist. De extensie kan worden geïmplementeerd op afzonderlijke VM's of virtuele-machineschaalsets. Het schema en de configuratie zijn gemeenschappelijk voor beide sjabloontypen.
De JSON-configuratie voor een virtuele-machine-extensie moet zijn genest in het resourcefragment van de virtuele machine van de sjabloon, met name het object voor de virtuele-machinesjabloon en in het geval van een "resources": [] virtuele-machineschaalset onder "virtualMachineProfile":"extensionProfile":{"extensions" :[] object.
Notitie
Voor de VM-extensie moet een door het systeem of de gebruiker beheerde identiteit worden toegewezen voor verificatie bij Key Vault. Zie How to authenticate to Key Vault and assign a Key Vault access policy (Verificatie Key Vault toegangsbeleid toewijzen).
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"name": "KeyVaultForWindows",
"apiVersion": "2019-07-01",
"location": "<location>",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
],
"properties": {
"publisher": "Microsoft.Azure.KeyVault",
"type": "KeyVaultForWindows",
"typeHandlerVersion": "1.0",
"autoUpgradeMinorVersion": true,
"settings": {
"secretsManagementSettings": {
"pollingIntervalInS": <string specifying polling interval in seconds, e.g: "3600">,
"certificateStoreName": <certificate store name, e.g.: "MY">,
"certificateStoreLocation": <certificate store location, currently it works locally only e.g.: "LocalMachine">,
"observedCertificates": <list of KeyVault URIs representing monitored certificates, e.g.: ["https://myvault.vault.azure.net/secrets/mycertificate", "https://myvault.vault.azure.net/secrets/mycertificate2"]>
}
}
}
}
Afhankelijkheidsorder voor extensies
De Key Vault VM-extensie ondersteunt het bestellen van extensies als deze is geconfigureerd. De extensie meldt standaard dat deze is gestart zodra polling is gestart. Het kan echter worden geconfigureerd om te wachten totdat de volledige lijst met certificaten is gedownload voordat een geslaagde start wordt gemeld. Als andere extensies afhankelijk zijn van de installatie van de volledige set certificaten voordat ze worden begonnen, kan deze extensie door het inschakelen van deze instelling een afhankelijkheid declareer van de Key Vault extensie. Hiermee voorkomt u dat deze extensies worden starten totdat alle certificaten die ze nodig hebben, zijn geïnstalleerd. De extensie zal de eerste download voor onbepaalde tijd opnieuw proberen en in een status Transitioning blijven.
Stel het volgende in om dit in te stellen:
"secretsManagementSettings": {
"requireInitialSync": true,
...
}
Notitie
Het gebruik van deze functie is niet compatibel met een ARM-sjabloon waarmee een door het systeem toegewezen identiteit wordt gemaakt en een Key Vault toegangsbeleid met die identiteit wordt bijgewerkt. Dit leidt tot een impasse omdat het toegangsbeleid voor de kluis pas kan worden bijgewerkt als alle extensies zijn gestart. U moet in plaats daarvan één door de gebruiker toegewezen MSI-identiteit en pre-ACL voor uw kluizen met die identiteit gebruiken voordat u implementeert.
Azure PowerShell implementatie
Waarschuwing
PowerShell-clients voegen vaak toe aan \ in settings.json, waardoor akvvm_service mislukt met de fout De extra tekens en worden zichtbaar in de " [CertificateManagementConfiguration] Failed to parse the configuration settings with:not an object. \ " portal, in Extensies onder Instellingen. U kunt dit voorkomen door te $settings initialiseren als een PowerShell: HashTable
$settings = @{
"secretsManagementSettings" = @{
"pollingIntervalInS" = "<pollingInterval>";
"certificateStoreName" = "<certStoreName>";
"certificateStoreLocation" = "<certStoreLoc>";
"observedCertificates" = @("<observedCert1>", "<observedCert2>") } }
De Azure PowerShell kan worden gebruikt om de VM-extensie Key Vault implementeren op een bestaande virtuele machine of virtuele-machineschaalset.
De extensie implementeren op een VM:
# Build settings $settings = '{"secretsManagementSettings": { "pollingIntervalInS": "' + <pollingInterval> + '", "certificateStoreName": "' + <certStoreName> + '", "certificateStoreLocation": "' + <certStoreLoc> + '", "observedCertificates": ["' + <observedCert1> + '","' + <observedCert2> + '"] } }' $extName = "KeyVaultForWindows" $extPublisher = "Microsoft.Azure.KeyVault" $extType = "KeyVaultForWindows" # Start the deployment Set-AzVmExtension -TypeHandlerVersion "1.0" -ResourceGroupName <ResourceGroupName> -Location <Location> -VMName <VMName> -Name $extName -Publisher $extPublisher -Type $extType -SettingString $settingsDe extensie implementeren op een virtuele-machineschaalset:
# Build settings $settings = '{"secretsManagementSettings": { "pollingIntervalInS": "' + <pollingInterval> + '", "certificateStoreName": "' + <certStoreName> + '", "certificateStoreLocation": "' + <certStoreLoc> + '", "observedCertificates": ["' + <observedCert1> + '","' + <observedCert2> + '"] } }' $extName = "KeyVaultForWindows" $extPublisher = "Microsoft.Azure.KeyVault" $extType = "KeyVaultForWindows" # Add Extension to VMSS $vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> Add-AzVmssExtension -VirtualMachineScaleSet $vmss -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "1.0" -Setting $settings # Start the deployment Update-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName> -VirtualMachineScaleSet $vmss
Azure CLI-implementatie
De Azure CLI kan worden gebruikt voor het implementeren van Key Vault VM-extensie op een bestaande virtuele machine of virtuele-machineschaalset.
De extensie implementeren op een VM:
# Start the deployment az vm extension set --name "KeyVaultForWindows" ` --publisher Microsoft.Azure.KeyVault ` --resource-group "<resourcegroup>" ` --vm-name "<vmName>" ` --settings '{\"secretsManagementSettings\": { \"pollingIntervalInS\": \"<pollingInterval>\", \"certificateStoreName\": \"<certStoreName>\", \"certificateStoreLocation\": \"<certStoreLoc>\", \"observedCertificates\": [\" <observedCert1> \", \" <observedCert2> \"] }}'De extensie implementeren op een virtuele-machineschaalset:
# Start the deployment az vmss extension set --name "KeyVaultForWindows" ` --publisher Microsoft.Azure.KeyVault ` --resource-group "<resourcegroup>" ` --vmss-name "<vmName>" ` --settings '{\"secretsManagementSettings\": { \"pollingIntervalInS\": \"<pollingInterval>\", \"certificateStoreName\": \"<certStoreName>\", \"certificateStoreLocation\": \"<certStoreLoc>\", \"observedCertificates\": [\" <observedCert1> \", \" <observedCert2> \"] }}'
Houd rekening met de volgende beperkingen/vereisten:
- Key Vault beperkingen:
- Deze moet bestaan op het moment van de implementatie
- Het Key Vault-toegangsbeleid moet worden ingesteld voor VM/VMSS-identiteit met behulp van een beheerde identiteit. Zie How to Authenticate to Key Vault and Assign a Key Vault access policy (Een Key Vault-toegangsbeleid toewijzen).
Problemen oplossen en ondersteuning
Veelgestelde vragen
- Is er een limiet voor het aantal waargenomen certificaten dat u kunt instellen? Nee, Key Vault VM-extensie heeft geen limiet voor het aantal waargenomen certificaten.
Problemen oplossen
Gegevens over de status van extensie-implementaties kunnen worden opgehaald uit de Azure Portal en met behulp van de Azure PowerShell. Als u de implementatietoestand van extensies voor een bepaalde VM wilt bekijken, moet u de volgende opdracht uitvoeren met behulp van de Azure PowerShell.
Azure PowerShell
Get-AzVMExtension -VMName <vmName> -ResourceGroupname <resource group name>
Azure-CLI
az vm get-instance-view --resource-group <resource group name> --name <vmName> --query "instanceView.extensions"
Logboeken en configuratie
De logboeken Key Vault VM-extensies bestaan alleen lokaal op de VM en zijn het meest informatief als het gaat om het oplossen van problemen
| Locatie | Beschrijving |
|---|---|
| C:\WindowsAzure\Logs\WaAppAgent.log | Geeft aan wanneer er een update van de extensie is uitgevoerd. |
| C:\WindowsAzure\Logs\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows<most recent version>\ | Toont de status van het downloaden van certificaten. De downloadlocatie is altijd de Windows mijn opslag (certlm.msc) van de computer. |
| C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows <most recent version> \RuntimeSettings\ | In Key Vault servicelogboeken van de VM-extensie wordt de status van de akvvm_service service. |
| C:\Packages\Plugins\Microsoft.Azure.KeyVault.KeyVaultForWindows <most recent version> \Status\ | De configuratie en binaire bestanden voor Key Vault VM-extensieservice. |
Ondersteuning
Als u op enig moment in dit artikel meer hulp nodig hebt, kunt u contact opnemen met de Azure-experts op de MSDN Azure- en Stack Overflow forums. U kunt ook een incident ondersteuning voor Azure indienen. Ga naar de ondersteuning voor Azure site en selecteer Ondersteuning krijgen. Lees de veelgestelde vragen Microsoft Azure ondersteuning voor meer Ondersteuning voor Azure over het gebruik van een Microsoft Azure.