Key Vault-extensie voor virtuele machines voor Linux

De Key Vault VM-extensie biedt automatische vernieuwing van certificaten die zijn opgeslagen in een Azure-sleutelkluis. Met name de extensie bewaakt een lijst met waargenomen certificaten die zijn opgeslagen in sleutelkluizen. Bij het detecteren van een wijziging haalt de extensie de bijbehorende certificaten op en installeert deze. De Key Vault VM-extensie wordt gepubliceerd en ondersteund door Microsoft, momenteel op Linux-VM's. In dit document worden de ondersteunde platformen, configuraties en implementatieopties voor de Key Vault VM-extensie voor Linux besturingssysteem be detailleert.

Besturingssysteem

De Key Vault VM-extensie ondersteunt deze Linux-distributies:

Notitie

Als u uitgebreide beveiligingsfuncties wilt krijgen, bereidt u de upgrade van Ubuntu-1604- en Debian-9-systemen voor, aangezien deze versies het einde van de aangewezen ondersteuningsperiode bereiken.

Notitie

De Key Vault VM-extensie downloadt de certificaten op de standaardlocatie of naar de locatie die is opgegeven door de eigenschap certStoreLocation in de instellingen van de VM-extensie. Met de KeyValut VM-extensie wordt de mapmachtiging bijgewerkt naar 700 (drwx------) zodat alleen de eigenaar van de map lees-, schrijf- en uitvoermachtigingen heeft

Ondersteunde typen certificaatinhoud

  • PKCS #12
  • PEM

Prerequisities

  • Key Vault met certificaat. Zie Een Key Vault

  • VM/VMSS moet een beheerde identiteit hebben toegewezen

  • Het Key Vault-toegangsbeleid moet worden ingesteld met geheimen en machtigingen voor de beheerde identiteit van get VM/VMSS om het deel van het certificaat van een geheim list op te halen. Zie How to Authenticate to Key Vault and Assign a Key Vault access policy (Een Key Vault-toegangsbeleid toewijzen).

  • VMSS 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]" }

Key Vault VM-extensieversie

  • Gebruikers van Ubuntu-18.04 en SUSE-15 kunnen ervoor kiezen om de versie van hun key vault vm-extensie bij te werken om gebruik te maken van de downloadfunctie voor de volledige V2.0 certificaatketen. Certificaatverkennen (tussenliggend en basiscertificaat) worden toegevoegd aan het leaf-certificaat in het PEM-bestand.

  • Als u liever upgradet naar v2.0 , moet u eerst verwijderen en vervolgens v1.0 v2.0 installeren.

  az vm extension delete --name KeyVaultForLinux --resource-group ${resourceGroup} --vm-name ${vmName}
  az vm extension set -n "KeyVaultForLinux" --publisher Microsoft.Azure.KeyVault --resource-group "${resourceGroup}" --vm-name "${vmName}" –settings .\akvvm.json –version 2.0

De vlag --versie 2.0 is optioneel omdat de meest recente versie standaard wordt geïnstalleerd.

  • Als de VM certificaten heeft die zijn gedownload door v1.0, worden de gedownloade certificaten NIET verwijderd als de v1.0 AKVVM-extensie wordt verwijderd. Na de installatie van v2.0 worden de bestaande certificaten NIET gewijzigd. U moet de certificaatbestanden verwijderen of het certificaat overrollen om het PEM-bestand met de volledige keten op de VM op te halen.

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 informatie zonder dat dit gevolgen heeft voor de beveiliging. Voor de extensie is een lijst met bewaakte geheimen, pollingfrequentie en het doelcertificaatopslag vereist. Met name:

    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "name": "KVVMExtensionForLinux",
      "apiVersion": "2019-07-01",
      "location": "<location>",
      "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
      ],
      "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForLinux",
      "typeHandlerVersion": "2.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
        "secretsManagementSettings": {
          "pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
          "certificateStoreName": <It is ignored on Linux>,
          "linkOnRenewal": <Not available on Linux e.g.: false>,
          "certificateStoreLocation": <disk path where certificate is stored, default: "/var/lib/waagent/Microsoft.Azure.KeyVault">,
          "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", "https://myvault.vault.azure.net/secrets/mycertificate2"]>
        },
        "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 vereist voor VM's met door de gebruiker toegewezen identiteiten. Stel msiClientId in op de identiteit die wordt geverifieerd voor Key Vault.

Ook vereist voor Azure Arc VM's met ingeschakelde . Stel msiEndpoint in op http://localhost:40342/metadata/identity .

Eigenschapswaarden

Name Waarde/voorbeeld Gegevenstype
apiVersion 2019-07-01 date
publisher Microsoft.Azure.KeyVault tekenreeks
type KeyVaultForLinux tekenreeks
typeHandlerVersion 2,0 int
pollingIntervalIns 3600 tekenreeks
certificateStoreName Dit wordt genegeerd in Linux tekenreeks
linkOnRenewal onjuist booleaans
certificateStoreLocation /var/lib/waagent/Microsoft.Azure.KeyVault 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": "KeyVaultForLinux",
      "apiVersion": "2019-07-01",
      "location": "<location>",
      "dependsOn": [
          "[concat('Microsoft.Compute/virtualMachines/', <vmName>)]"
      ],
      "properties": {
      "publisher": "Microsoft.Azure.KeyVault",
      "type": "KeyVaultForLinux",
      "typeHandlerVersion": "2.0",
      "autoUpgradeMinorVersion": true,
      "settings": {
          "secretsManagementSettings": {
          "pollingIntervalInS": <polling interval in seconds, e.g. "3600">,
          "certificateStoreName": <ingnored on linux>,
          "certificateStoreLocation": <disk path where certificate is stored, default: "/var/lib/waagent/Microsoft.Azure.KeyVault">,
          "observedCertificates": <list of KeyVault URIs representing monitored certificates, e.g.: "https://myvault.vault.azure.net/secrets/mycertificate"
        }      
      }
      }
    }

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,
    ...
}

[Opmerking] 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. Gebruik in plaats daarvan één door de gebruiker toegewezen MSI-identiteit en pre-ACL voor uw kluizen met die identiteit voordat u implementeert.

Azure PowerShell implementatie

Waarschuwing

PowerShell-clients voegen vaak \ toe aan in settings.json, wat ervoor zorgt dat " akvvm_service mislukt met fout: [CertificateManagementConfiguration] Failed to parse the configuration settings with:not an object.

De Azure PowerShell kan worden gebruikt om de VM-extensie Key Vault te 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 =  "KeyVaultForLinux"
        $extPublisher = "Microsoft.Azure.KeyVault"
        $extType = "KeyVaultForLinux"
    
    
        # Start the deployment
        Set-AzVmExtension -TypeHandlerVersion "2.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 = "KeyVaultForLinux"
        $extPublisher = "Microsoft.Azure.KeyVault"
        $extType = "KeyVaultForLinux"
    
        # Add Extension to VMSS
        $vmss = Get-AzVmss -ResourceGroupName <ResourceGroupName> -VMScaleSetName <VmssName>
        Add-AzVmssExtension -VirtualMachineScaleSet $vmss  -Name $extName -Publisher $extPublisher -Type $extType -TypeHandlerVersion "2.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 -n "KeyVaultForLinux" `
         --publisher Microsoft.Azure.KeyVault `
         -g "<resourcegroup>" `
         --vm-name "<vmName>" `
         --version 2.0 `
         --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 -n "KeyVaultForLinux" `
          --publisher Microsoft.Azure.KeyVault `
          -g "<resourcegroup>" `
          --vmss-name "<vmssName>" `
          --version 2.0 `
          --settings '{\"secretsManagementSettings\": { \"pollingIntervalInS\": \"<pollingInterval>\", \"certificateStoreName\": \"<certStoreName>\", \"certificateStoreLocation\": \"<certStoreLoc>\", \"observedCertificates\": [\" <observedCert1> \", \" <observedCert2> \"] }}'
    

Houd rekening met de volgende beperkingen/vereisten:

Problemen oplossen en ondersteuning

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
/var/log/waagent.log Geeft aan wanneer er een update van de extensie is uitgevoerd.
/var/log/azure/Microsoft.Azure.KeyVault.KeyVaultForLinux/* Bekijk de logboeken Key Vault VM-extensieservice om de status van de akvvm_service service en het downloaden van certificaten te bepalen. De downloadlocatie van PEM-bestanden vindt u ook in deze bestanden met een vermelding met de naam certificaatbestandsnaam. Als certificateStoreLocation niet is opgegeven, wordt de standaardwaarde /var/lib/waagent/Microsoft.Azure.KeyVault.Store/
/var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux- <most recent version> /config/* De configuratie en binaire bestanden voor Key Vault VM-extensieservice.

Symbolische koppelingen of Symlinks zijn in feite geavanceerde snelkoppelingen. U kunt deze symlink gebruiken om de nieuwste versie van het certificaat in Linux op te halen om te voorkomen dat de map wordt gecontroleerd en om het meest recente certificaat ([VaultName].[CertificateName]) automatisch op te halen.

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.

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.