Azure PowerShell - Door de klant beheerde sleutels inschakelen met versleuteling aan de serverzijde - beheerde schijven

Is van toepassing op: ✔️ Windows VM's ✔️ Flexibele schaalsets ✔️ Uniforme schaalsets

Azure Disk Storage kunt u uw eigen sleutels beheren wanneer u SSE (Server-Side Encryption) gebruikt voor beheerde schijven, indien u dat kiest. Voor conceptuele informatie over SSE met door de klant beheerde sleutels en andere typen beheerde schijfversleuteling raadpleegt u de sectie Door de klant beheerde sleutels van ons artikel over schijfversleuteling.

Beperkingen

Op dit moment hebben door de klant beheerde sleutels de volgende beperkingen:

  • Als deze functie is ingeschakeld voor een schijf met incrementele momentopnamen, kan deze niet worden uitgeschakeld op die schijf of de bijbehorende momentopnamen. U kunt dit omzeilen door alle gegevens te kopiëren naar een volledig andere beheerde schijf die geen door de klant beheerde sleutels gebruikt. U kunt dit doen met de Azure CLI of de module Azure PowerShell.
  • Een schijf en alle bijbehorende incrementele momentopnamen moeten dezelfde schijfversleutelingsset hebben.
  • Alleen software- en HSM RSA-sleutels van grootten 2048-bits, 3072-bits en 4.096-bits worden ondersteund, geen andere sleutels of grootten.
    • voor HSM-sleutels is de premiumlaag van Azure Sleutelkluizen vereist.
  • Alleen voor Ultra Disks en Premium SSD v2-schijven:
    • (Preview) Door de gebruiker toegewezen beheerde identiteiten zijn beschikbaar voor Ultra Disks- en Premium SSD v2-schijven die zijn versleuteld met door de klant beheerde sleutels.
  • De meeste resources met betrekking tot uw door de klant beheerde sleutels (schijfversleutelingssets, VM's, schijven en momentopnamen) moeten zich in hetzelfde abonnement en dezelfde regio bevinden.
  • Schijven die zijn versleuteld met door de klant beheerde sleutels, kunnen alleen worden verplaatst naar een andere resourcegroep als de virtuele machine waaraan ze gekoppeld zijn, gedealloceerd is.
  • Schijven, momentopnamen en afbeeldingen die met klantbeheerde sleutels zijn versleuteld, kunnen niet tussen abonnementen worden verplaatst.
  • Beheerde schijven die momenteel of eerder zijn versleuteld met Azure Disk Encryption kunnen niet worden versleuteld met door de klant beheerde sleutels.
  • Kan maximaal 5000 schijfversleutelingssets per regio per abonnement maken.
  • Zie Preview: Gebruik door de klant beheerde sleutels voor het versleutelen van afbeeldingen voor meer informatie over het gebruik van door de klant beheerde sleutels met gedeelde afbeeldingsgalerijen.

Een Azure Key Vault en DiskEncryptionSet instellen met automatische sleutelrotatie

Als u door de klant beheerde sleutels wilt gebruiken met SSE, moet u een Azure Key Vault en een DiskEncryptionSet-resource instellen.

  1. Zorg ervoor dat u de meest recente versie van Azure PowerShell hebt geïnstalleerd en u bent aangemeld bij een Azure-account met Connect-AzAccount

  2. Maak een exemplaar van Azure Key Vault en versleutelingssleutel.

    Wanneer u de Key Vault instantie maakt, moet u verwijderingsbeveiliging inschakelen. Beveiliging tegen opschonen zorgt ervoor dat een verwijderde sleutel pas definitief kan worden verwijderd als de bewaarperiode is verstreken. Met deze instellingen kunt u geen gegevens kwijtraken vanwege onbedoelde verwijdering. Deze instellingen zijn verplicht wanneer u een Key Vault gebruikt voor het versleutelen van beheerde schijven.

    $ResourceGroupName="yourResourceGroupName"
    $LocationName="westcentralus"
    $keyVaultName="yourKeyVaultName"
    $keyName="yourKeyName"
    $keyDestination="Software"
    $diskEncryptionSetName="yourDiskEncryptionSetName"
    
    $keyVault = New-AzKeyVault -Name $keyVaultName `
    -ResourceGroupName $ResourceGroupName `
    -Location $LocationName `
    -EnablePurgeProtection
    
    $key = Add-AzKeyVaultKey -VaultName $keyVaultName `
          -Name $keyName `
          -Destination $keyDestination
    
    Set-AzKeyVaultKeyRotationPolicy -VaultName $keyVaultName -KeyName $keyName -ExpiresIn P2Y -KeyRotationLifetimeAction @{Action="Rotate";TimeBeforeExpiry = "P18M"}
    
  3. Maak een exemplaar van een DiskEncryptionSet. Met dit script stelt u RotationToLatestKeyVersionEnabled in op $true om automatische rotatie van de sleutel mogelijk te maken. Wanneer u automatische rotatie inschakelt, werkt het systeem automatisch alle beheerde schijven, momentopnamen en installatiekopieën bij die verwijzen naar de schijfversleutelingsset om binnen één uur de nieuwe versie van de sleutel te gebruiken.

    $desConfig=New-AzDiskEncryptionSetConfig -Location $LocationName `
        -SourceVaultId $keyVault.ResourceId `
        -KeyUrl $key.Key.Kid `
        -IdentityType SystemAssigned `
        -RotationToLatestKeyVersionEnabled $true
    
    $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName `
           -ResourceGroupName $ResourceGroupName `
           -InputObject $desConfig
    
  4. Geef de DiskEncryptionSet-resource toegang tot de sleutelkluis.

    Notitie

    Het kan enkele minuten duren voordat Azure de identiteit van uw DiskEncryptionSet in uw Microsoft Entra ID maakt. Als er een foutbericht wordt weergegeven als 'Kan het Active Directory-object niet vinden' bij het uitvoeren van de volgende opdracht, wacht u enkele minuten en probeert u het opnieuw.

    Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $des.Identity.PrincipalId -PermissionsToKeys wrapkey,unwrapkey,get
    

Gebruik een sleutelkluis binnen een andere abonnementsdienst

U kunt uw Azure Key Vaults ook centraal beheren vanuit één abonnement en de sleutels gebruiken die zijn opgeslagen in de Key Vault om beheerde schijven en momentopnamen in andere abonnementen in uw organisatie te versleutelen. Hierdoor kan uw beveiligingsteam een robuust beveiligingsbeleid afdwingen en eenvoudig beheren voor één abonnement.

Belangrijk

Voor deze configuratie moeten zowel uw Key Vault als uw schijfversleutelingsset zich in dezelfde regio bevinden en dezelfde tenant gebruiken.

Het volgende script is een voorbeeld van hoe u een schijfversleutelingsset configureert om een sleutel uit een Key Vault in een ander abonnement te gebruiken, maar dezelfde regio:

$sourceSubscriptionId="<sourceSubID>"
$sourceKeyVaultName="<sourceKVName>"
$sourceKeyName="<sourceKeyName>"

$targetSubscriptionId="<targetSubID>"
$targetResourceGroupName="<targetRGName>"
$targetDiskEncryptionSetName="<targetDiskEncSetName>"
$location="<targetRegion>"

Set-AzContext -Subscription $sourceSubscriptionId

$key = Get-AzKeyVaultKey -VaultName $sourceKeyVaultName -Name $sourceKeyName

Set-AzContext -Subscription $targetSubscriptionId

$desConfig=New-AzDiskEncryptionSetConfig -Location $location `
-KeyUrl $key.Key.Kid `
-IdentityType SystemAssigned `
-RotationToLatestKeyVersionEnabled $true

$des=New-AzDiskEncryptionSet -Name $targetDiskEncryptionSetName `
-ResourceGroupName $targetResourceGroupName `
-InputObject $desConfig

Voorbeelden

Nu u deze resources hebt gemaakt en geconfigureerd, kunt u deze gebruiken om uw beheerde schijven te beveiligen. Hieronder volgen voorbeeldscripts, elk met een respectievelijk scenario, die u kunt gebruiken om uw beheerde schijven te beveiligen.

Een virtuele machine maken met een Marketplace-afbeelding, waarbij het besturingssysteem en de gegevensschijven worden versleuteld met door de klant beheerde sleutels.

Kopieer het script, vervang alle voorbeeldwaarden door uw eigen parameters en voer het uit.

$VMLocalAdminUser = "yourVMLocalAdminUserName"
$VMLocalAdminSecurePassword = ConvertTo-SecureString <password> -AsPlainText -Force
$LocationName = "yourRegion"
$ResourceGroupName = "yourResourceGroupName"
$ComputerName = "yourComputerName"
$VMName = "yourVMName"
$VMSize = "yourVMSize"
$diskEncryptionSetName="yourdiskEncryptionSetName"
    
$NetworkName = "yourNetworkName"
$NICName = "yourNICName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
    
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
$NIC = New-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroupName -Location $LocationName -SubnetId $Vnet.Subnets[0].Id
    
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);
    
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2012-R2-Datacenter' -Version latest

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $($VMName +"_OSDisk") -DiskEncryptionSetId $diskEncryptionSet.Id -CreateOption FromImage

$VirtualMachine = Add-AzVMDataDisk -VM $VirtualMachine -Name $($VMName +"DataDisk1") -DiskSizeInGB 128 -StorageAccountType Premium_LRS -CreateOption Empty -Lun 0 -DiskEncryptionSetId $diskEncryptionSet.Id 
    
New-AzVM -ResourceGroupName $ResourceGroupName -Location $LocationName -VM $VirtualMachine -Verbose

Een lege schijf maken die is versleuteld met behulp van versleuteling aan de serverzijde met door de klant beheerde sleutels en deze koppelen aan een VIRTUELE machine

Kopieer het script, vervang alle voorbeeldwaarden door uw eigen parameters en voer het uit.

$vmName = "yourVMName"
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskSKU = "Premium_LRS"
$diskSizeinGiB = 30
$diskLUN = 1
$diskEncryptionSetName="yourDiskEncryptionSetName"


$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroupName 

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

$vm = Add-AzVMDataDisk -VM $vm -Name $diskName -CreateOption Empty -DiskSizeInGB $diskSizeinGiB -StorageAccountType $diskSKU -Lun $diskLUN -DiskEncryptionSetId $diskEncryptionSet.Id 

Update-AzVM -ResourceGroupName $ResourceGroupName -VM $vm

Bestaande beheerde schijven versleutelen

Uw bestaande schijven mogen niet worden gekoppeld aan een actieve VM om ze te versleutelen met behulp van het volgende script:

$rgName = "yourResourceGroupName"
$diskName = "yourDiskName"
$diskEncryptionSetName = "yourDiskEncryptionSetName"
 
$diskEncryptionSet = Get-AzDiskEncryptionSet -ResourceGroupName $rgName -Name $diskEncryptionSetName
 
New-AzDiskUpdateConfig -EncryptionType "EncryptionAtRestWithCustomerKey" -DiskEncryptionSetId $diskEncryptionSet.Id | Update-AzDisk -ResourceGroupName $rgName -DiskName $diskName

Een bestaande virtuele-machineschaalset (uniforme indelingsmodus) versleutelen met SSE (Server-Side Encryption) en door de klant beheerde sleutels

Dit script werkt alleen voor schaalsets in de uniforme orkestratiemodus. Voor schaalsets in de flexibele orkestratiemodus volgt u de instructie om bestaande beheerde schijven te versleutelen voor elke virtuele machine.

Kopieer het script, vervang alle voorbeeldwaarden door uw eigen parameters en voer het uit:

#set variables 
$vmssname = "name of the vmss that is already created"
$diskencryptionsetname = "name of the diskencryptionset already created"
$vmssrgname = "vmss resourcegroup name"
$diskencryptionsetrgname = "diskencryptionset resourcegroup name"

#get vmss object and create diskencryptionset object attach to vmss os disk
$ssevmss = get-azvmss -ResourceGroupName $vmssrgname -VMScaleSetName $vmssname
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet = New-Object -TypeName Microsoft.Azure.Management.Compute.Models.DiskEncryptionSetParameters

#get diskencryption object and retrieve the resource id
$des = Get-AzDiskEncryptionSet -ResourceGroupName $diskencryptionsetrgname -Name $diskencryptionsetname
write-host "the diskencryptionset resource id is:" $des.Id

#associate DES resource id to os disk and update vmss 
$ssevmss.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk.DiskEncryptionSet.id = $des.Id
$ssevmss | update-azvmss

Een virtuele machineschaalset maken met behulp van een Marketplace-afbeelding, waarbij het besturingssysteem en de gegevensschijven worden versleuteld met door de klant beheerde sleutels

Kopieer het script, vervang alle voorbeeldwaarden door uw eigen parameters en voer het uit.

Belangrijk

Vanaf november 2023 worden VM-schaalsets die zijn gemaakt met PowerShell en Azure CLI standaard ingesteld op de modus Flexibele indeling als er geen indelingsmodus is opgegeven. Ga naar Afbrekingswijziging voor VMSS PowerShell/CLI-klanten - Microsoft Community Hub

$VMLocalAdminUser = "yourLocalAdminUser"
$VMLocalAdminSecurePassword = ConvertTo-SecureString Password@123 -AsPlainText -Force
$LocationName = "westcentralus"
$ResourceGroupName = "yourResourceGroupName"
$ComputerNamePrefix = "yourComputerNamePrefix"
$VMScaleSetName = "yourVMSSName"
$VMSize = "Standard_DS3_v2"
$diskEncryptionSetName="yourDiskEncryptionSetName"
    
$NetworkName = "yourVNETName"
$SubnetName = "yourSubnetName"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
    
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix

$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroupName -Location $LocationName -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet

$ipConfig = New-AzVmssIpConfig -Name "myIPConfig" -SubnetId $Vnet.Subnets[0].Id 

$VMSS = New-AzVmssConfig -Location $LocationName -SkuCapacity 2 -SkuName $VMSize -UpgradePolicyMode 'Automatic' -OrchestrationMode 'Uniform'

$VMSS = Add-AzVmssNetworkInterfaceConfiguration -Name "myVMSSNetworkConfig" -VirtualMachineScaleSet $VMSS -Primary $true -IpConfiguration $ipConfig

$diskEncryptionSet=Get-AzDiskEncryptionSet -ResourceGroupName $ResourceGroupName -Name $diskEncryptionSetName

# Enable encryption at rest with customer managed keys for OS disk by setting DiskEncryptionSetId property 

$VMSS = Set-AzVmssStorageProfile $VMSS -OsDiskCreateOption "FromImage" -DiskEncryptionSetId $diskEncryptionSet.Id -ImageReferenceOffer 'WindowsServer' -ImageReferenceSku '2012-R2-Datacenter' -ImageReferenceVersion latest -ImageReferencePublisher 'MicrosoftWindowsServer'

$VMSS = Set-AzVmssOsProfile $VMSS -ComputerNamePrefix $ComputerNamePrefix -AdminUsername $VMLocalAdminUser -AdminPassword $VMLocalAdminSecurePassword

# Add a data disk encrypted at rest with customer managed keys by setting DiskEncryptionSetId property 

$VMSS = Add-AzVmssDataDisk -VirtualMachineScaleSet $VMSS -CreateOption Empty -Lun 1 -DiskSizeGB 128 -StorageAccountType Premium_LRS -DiskEncryptionSetId $diskEncryptionSet.Id

$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);

New-AzVmss -VirtualMachineScaleSet $VMSS -ResourceGroupName $ResourceGroupName -VMScaleSetName $VMScaleSetName

Wijzig de sleutel van een DiskEncryptionSet om de sleutel te roteren voor alle resources die verwijzen naar de DiskEncryptionSet

Kopieer het script, vervang alle voorbeeldwaarden door uw eigen parameters en voer het uit.

$ResourceGroupName="yourResourceGroupName"
$keyVaultName="yourKeyVaultName"
$keyName="yourKeyName"
$diskEncryptionSetName="yourDiskEncryptionSetName"

$keyVault = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $ResourceGroupName

$keyVaultKey = Get-AzKeyVaultKey -VaultName $keyVaultName -Name $keyName

Update-AzDiskEncryptionSet -Name $diskEncryptionSetName -ResourceGroupName $ResourceGroupName -SourceVaultId $keyVault.ResourceId -KeyUrl $keyVaultKey.Id

De status van versleuteling aan de serverzijde van een schijf zoeken

$ResourceGroupName="yourResourceGroupName"
$DiskName="yourDiskName"

$disk=Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $DiskName
$disk.Encryption.Type

Belangrijk

Door de klant beheerde sleutels zijn afhankelijk van beheerde identiteiten voor Azure resources, een functie van Microsoft Entra ID. Wanneer u sleutels beheerd door de klant configureert, wordt achter de schermen automatisch een beheerde identiteit aan uw resources toegewezen. Als u vervolgens het abonnement, de resourcegroep of de beheerde schijf van de ene Microsoft Entra map naar een andere verplaatst, wordt de beheerde identiteit die is gekoppeld aan de beheerde schijven niet overgebracht naar de nieuwe tenant, zodat door de klant beheerde sleutels mogelijk niet meer werken. Zie Transferring van een abonnement tussen Microsoft Entra mappen voor meer informatie.

Volgende stappen