Share via


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

Van toepassing op: ✔️ Flexibele schaalsets ✔️ voor Windows-VM's ✔️ Uniform-schaalsets

Met Azure Disk Storage kunt u uw eigen sleutels beheren bij gebruik van versleuteling aan de serverzijde (SSE) voor beheerde schijven, als 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 Azure PowerShell-module.
  • Alleen software- en HSM RSA-sleutels van grootten 2048-bits, 3072-bits en 4.096-bits worden ondersteund, geen andere sleutels of grootten.
    • HSM-sleutels vereisen de Premium-laag van Azure Key Vaults.
  • Alleen voor Ultra Disks en Premium SSD v2-schijven:
    • Momentopnamen die zijn gemaakt op basis van schijven die zijn versleuteld met versleuteling aan de serverzijde en door de klant beheerde sleutels moeten worden versleuteld met dezelfde door de klant beheerde sleutels.
    • Door de gebruiker toegewezen beheerde identiteiten worden niet ondersteund voor Ultra Disks- en Premium SSD v2-schijven die zijn versleuteld met door de klant beheerde sleutels.
    • Momenteel niet ondersteund in Azure Government of Azure China.
  • 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.
    • Azure Key Vaults kunnen worden gebruikt vanuit een ander abonnement, maar moeten zich in dezelfde regio bevinden als uw schijfversleutelingsset. Als preview-versie kunt u Azure Key Vaults van verschillende Microsoft Entra-tenants gebruiken.
  • Schijven die zijn versleuteld met door de klant beheerde sleutels, kunnen alleen worden verplaatst naar een andere resourcegroep als de virtuele machine waaraan ze zijn gekoppeld, ongedaan wordt gemaakt.
  • Schijven, momentopnamen en installatiekopieën die zijn versleuteld met door de klant beheerde sleutels, kunnen niet worden verplaatst tussen abonnementen.
  • Beheerde schijven die momenteel of eerder zijn versleuteld met Behulp van Azure Disk Encryption, kunnen niet worden versleuteld met door de klant beheerde sleutels.
  • Kan maximaal 5000 schijfversleutelingssets per regio per abonnement maken.
  • Zie Preview voor meer informatie over het gebruik van door de klant beheerde sleutels met galerieën met gedeelde installatiekopieën: door de klant beheerde sleutels gebruiken voor het versleutelen van afbeeldingen.

Een Azure Key Vault en DiskEncryptionSet instellen optioneel 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 nieuwste 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 het Key Vault-exemplaar maakt, moet u beveiliging tegen opschonen 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 sleutelkluis 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 
    
  3. Maak een exemplaar van een DiskEncryptionSet. U kunt RotationToLatestKeyVersionEnabled instellen op $true om automatische rotatie van de sleutel in te schakelen. Wanneer u automatische rotatie inschakelt, worden alle beheerde schijven, momentopnamen en installatiekopieën die naar de schijfversleuteling verwijzen, automatisch bijgewerkt 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 $false
    
    $des=New-AzDiskEncryptionSet -Name $diskEncryptionSetName `
           -ResourceGroupName $ResourceGroupName `
           -InputObject $desConfig
    
  4. Verdeel 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 heeft gemaakt. Als er een foutbericht wordt weergegeven als 'Kan het Active Directory-object niet vinden' wanneer u de volgende opdracht uitvoert, wacht u enkele minuten en probeert u het opnieuw.

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

Een sleutelkluis gebruiken in een ander abonnement

U kunt uw Azure Key Vaults ook centraal beheren vanuit één abonnement en de sleutels gebruiken die zijn opgeslagen in 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 Sleutelkluis als uw schijfversleutelingsset zich in dezelfde regio bevinden en dezelfde tenant gebruiken.

Het volgende script is een voorbeeld van hoe u een schijfversleutelingsset configureert voor het gebruik van een sleutel uit een Sleutelkluis in een ander abonnement, 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 $false

$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 behulp van een Marketplace-installatiekopieën, het besturingssysteem en de gegevensschijven versleutelen 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 door de klant beheerde sleutels en door de klant beheerde sleutels

Dit script werkt alleen voor schaalsets in de uniforme indelingsmodus. Volg voor schaalsets in de flexibele indelingsmodus de bestaande beheerde schijven 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-installatiekopieën, het besturingssysteem en de gegevensschijven versleutelen 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 flexibele indelingsmodus als er geen indelingsmodus is opgegeven. Voor meer informatie over deze wijziging en welke acties u moet ondernemen, gaat u naar Belangrijke wijziging 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 door de klant beheerde sleutels configureert, wordt automatisch een beheerde identiteit toegewezen aan uw resources onder de dekking. 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 overgedragen naar de nieuwe tenant, zodat door de klant beheerde sleutels mogelijk niet meer werken. Zie Een abonnement overdragen tussen Microsoft Entra-mappen voor meer informatie.

Volgende stappen