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

"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 $settings
    
    
  • De 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:

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.