Aktivieren von vom Kunden verwalteten Schlüsseln für Azure verwalteten Datenträger mit PowerShell

Gilt für: ✔️ Windows VMs ✔️ Flexible Skalierungssätze ✔️ Einheitliche Skalierungssätze

Azure Disk Storage unterstützt die serverseitige Verschlüsselung (SSE) mit vom Kunden verwalteten Schlüsseln für verwaltete Datenträger. Konzeptionelle Informationen zu vom Kunden verwalteten Schlüsseln und anderen Verschlüsselungstypen für verwaltete Datenträger finden Sie unter "Vom Kunden verwaltete Schlüssel".

Beschränkungen

Vorerst gelten für vom Kunden verwaltete Schlüssel die folgenden Einschränkungen:

  • Wenn dieses Feature für einen Datenträger mit inkrementellen Momentaufnahmen aktiviert ist, kann es auf diesem Datenträger oder seinen Momentaufnahmen nicht deaktiviert werden. Um dieses Problem zu umgehen, kopieren Sie alle Daten auf einen anderen verwalteten Datenträger ohne kundenseitig verwaltete Schlüssel. Dazu können Sie entweder die Azure CLI oder das modul Azure PowerShell verwenden.
  • Ein Datenträger und alle zugehörigen inkrementellen Momentaufnahmen müssen denselben Datenträgerverschlüsselungssatz aufweisen.
  • Es werden ausschließlich Software- und HSM RSA-Schlüssel mit den Größen 2.048 Bit, 3.072 Bit und 4.096 Bit unterstützt, keine anderen Schlüssel oder Größen.
    • HSM-Schlüssel erfordern die Premium-Ebene der Azure-Schlüsseltresore.
  • Nur für Ultra-Datenträger und Premium SSD v2-Datenträger:
    • (Vorschau) Vom Benutzer zugewiesene verwaltete Identitäten sind für Ultra Disks und Premium SSD v2-Datenträger verfügbar, die mit vom Kunden verwalteten Schlüsseln verschlüsselt sind.
  • Die meisten Ressourcen, die sich auf Ihre vom Kunden verwalteten Schlüssel (Datenträgerverschlüsselungssätze, VMs, Datenträger und Momentaufnahmen) beziehen, müssen sich im selben Abonnement und in derselben Region befinden.
  • Datenträger, die mit vom Kunden verwalteten Schlüsseln verschlüsselt sind, können nur zu einer anderen Ressourcengruppe wechseln, wenn die virtuelle Maschine, der sie zugeordnet sind, freigegeben ist.
  • Mit kundenseitig verwalteten Schlüsseln verschlüsselte Datenträger, Momentaufnahmen und Images können nicht zwischen Abonnements verschoben werden.
  • Verwaltete Datenträger, die derzeit oder zuvor mit Azure Disk Encryption verschlüsselt wurden, können nicht mit vom Kunden verwalteten Schlüsseln verschlüsselt werden.
  • Pro Region und Abonnement können nur bis zu 5.000 Datenträgerverschlüsselungssätze erstellt werden.
  • Informationen über die Verwendung von kundenseitig verwalteter Schlüssel mit Shared Image Gallerys finden Sie unter Vorschau: Verwenden von kundenseitig verwalteten Schlüsseln zum Verschlüsseln von Images.

Einrichten von Azure Key Vault und einer Datenträgerverschlüsselung mit automatischer Schlüsseldrehung

Um vom Kunden verwaltete Schlüssel mit serverseitiger Verschlüsselung zu verwenden, richten Sie einen Azure Key Vault und einen Datenträgerverschlüsselungssatz ein.

  1. Installieren Sie die neueste Azure PowerShell-Version, und melden Sie sich mit Ihrem Azure Konto anConnect-AzAccount.

  2. Erstellen Sie eine Instanz von Azure Key Vault und Verschlüsselungsschlüsseln.

    Beim Erstellen der Key Vault Instanz müssen Sie den Löschschutz aktivieren. Der Schutz vor endgültigem Löschen stellt sicher, dass ein gelöschter Schlüssel erst nach Ablauf der Aufbewahrungsdauer dauerhaft gelöscht werden kann. Diese Einstellungen schützen Sie vor dem Verlust von Daten durch versehentliches Löschen. Diese Einstellungen sind obligatorisch, wenn Sie eine Key Vault zum Verschlüsseln von verwalteten Datenträgern verwenden.

    $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. Erstellen Sie einen Datenträgerverschlüsselungssatz. Dieses Skript legt RotationToLatestKeyVersionEnabled auf $true fest, um die automatische Drehung des Schlüssels zu ermöglichen. Wenn Sie die automatische Rotation aktivieren, aktualisiert das System automatisch alle verwalteten Datenträger, Momentaufnahmen und Images, die auf den Datenträgerverschlüsselungssatz verweisen, sodass die neue Version des Schlüssels innerhalb einer Stunde verwendet wird.

    $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. Gewähren Sie dem Datenträgerverschlüsselungssatz Zugriff auf den Schlüsseltresor.

    Hinweis

    Es kann einige Minuten dauern, bis Azure die Identität Ihres Datenträgerverschlüsselungssatzes in Microsoft Entra ID erstellt. Wenn beim Ausführen des folgenden Befehls eine Fehlermeldung wie "Das Active Directory Objekt nicht gefunden" angezeigt wird, warten Sie einige Minuten, und versuchen Sie es erneut.

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

Verwenden eines Schlüsseltresors in einem anderen Abonnement

Alternativ können Sie Ihre Azure Key Vaults zentral über ein einzelnes Abonnement verwalten und die im Key Vault gespeicherten Schlüssel verwenden, um verwaltete Datenträger und Momentaufnahmen in anderen Abonnements in Ihrer Organisation zu verschlüsseln. Dadurch kann Ihr Sicherheitsteam eine stabile Sicherheitsrichtlinie für ein einzelnes Abonnement erzwingen und einfach verwalten.

Wichtig

Für diese Konfiguration müssen sich sowohl Ihr Key Vault als auch der Datenträgerverschlüsselungssatz in derselben Region befinden und denselben Mandanten verwenden.

Das folgende Skript ist ein Beispiel dafür, wie Sie einen Datenträgerverschlüsselungssatz für die Verwendung eines Schlüssels aus einem Key Vault in einem anderen Abonnement, aber derselben Region konfigurieren würden:

$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

Verwalten von vom Kunden verwalteten Schlüsseln für Azure verwalteten Datenträger mit PowerShell

Nachdem Sie die erforderlichen Ressourcen erstellt und konfiguriert haben, verwenden Sie das folgende Beispiel Azure PowerShell Skripts, um verschlüsselte VMs und Datenträger zu erstellen, vorhandene verwaltete Datenträger und Skalierungssätze zu verschlüsseln, einen Datenträgerverschlüsselungssatzschlüssel zu drehen und den serverseitigen Verschlüsselungsstatus eines Datenträgers zu überprüfen.

Erstellen einer VM mit einem Marketplace-Image, Verschlüsseln der Datenträger für Betriebssystem und Daten mit vom Kunden verwalteten Schlüsseln

Bevor Sie das Skript ausführen, stellen Sie eine vorhandene Ressourcengruppe und einen Datenträgerverschlüsselungssatz zusammen mit Werten für die Anmeldeinformationen des VM-Administrators, der Region, der Größe des virtuellen Computers und des virtuellen Netzwerks bereit. Das Skript erstellt das virtuelle Netzwerk, die Netzwerkschnittstelle und den virtuellen Computer aus einem Windows Server Marketplace-Image. Es wird Get-AzDiskEncryptionSet verwendet, um den Datenträgerverschlüsselungssatz abzurufen und New-AzVM den virtuellen Computer mit einem verschlüsselten Betriebssystemdatenträger und einem verschlüsselten 128-GiB-Datenträger zu erstellen. Ersetzen Sie die Beispielwerte durch Ihre eigenen Parameter, und führen Sie dann das Skript aus.

$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

Erstellen eines leeren Datenträgers, der mit serverseitiger Verschlüsselung und vom Kunden verwalteten Schlüsseln verschlüsselt wird, und Anfügen an eine VM

Das Skript verwendet Add-AzVMDataDisk , um den verschlüsselten Datenträger zur VM-Konfiguration hinzuzufügen und Update-AzVM die Konfiguration anzuwenden. Ersetzen Sie die Beispielwerte durch Ihre eigenen Parameter, und führen Sie dann das Skript aus.

$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

Verschlüsseln vorhandener verwalteter Datenträger

Ihre vorhandenen Datenträger dürfen nicht an eine ausgeführte VM angefügt werden. Das Skript verwendet New-AzDiskUpdateConfig und Update-AzDisk, um kundenseitig verwaltete Schlüssel für den Datenträger zu konfigurieren.

$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

Verschlüsseln eines vorhandenen Skalierungssatzes für virtuelle Computer (einheitlicher Orchestrierungsmodus) mithilfe der serverseitigen Verschlüsselung und vom Kunden verwalteter Schlüssel

Dieses Skript funktioniert nur für Skalierungsgruppen im einheitlichen Orchestrierungsmodus. Für Skalierungsgruppen im flexiblen Orchestrierungsmodus befolgen Sie Anleitungen unter „Verschlüsseln vorhandener verwalteter Datenträgern für jede VM“.

Das Skript verwendet Get-AzVmss , um den Skalierungssatz abzurufen und Update-AzVmss den Datenträgerverschlüsselungssatz anzuwenden. Ersetzen Sie die Beispielwerte durch Ihre eigenen Parameter, und führen Sie dann das Skript aus.

#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

Erstellen einer VM-Skalierungsgruppe mit einem Marketplace-Image, Verschlüsseln der Datenträger für Betriebssystem und Daten mit vom Kunden verwalteten Schlüsseln

Bevor Sie das Skript ausführen, stellen Sie eine vorhandene Ressourcengruppe und einen Datenträgerverschlüsselungssatz zusammen mit Werten für administratoranmeldeinformationen, Region, VM-Größe und virtuelles Netzwerk bereit. Das Skript erstellt das virtuelle Netzwerk und verwendet New-AzVmss, um eine einheitliche VM-Skalierungsgruppe mit zwei Instanzen aus einem Marketplace-Image von Windows Server zu erstellen. Die Betriebssystemdatenträger und die 128-GiB-Datenträger des Skalierungssatzes verwenden den Datenträgerverschlüsselungssatz. Ersetzen Sie die Beispielwerte durch Ihre eigenen Parameter, und führen Sie dann das Skript aus.

Wichtig

Ab November 2023 werden VM-Skalierungssätze, die mit PowerShell und Azure CLI erstellt wurden, standardmäßig auf den flexiblen Orchestrierungsmodus festgelegt, wenn kein Orchestrierungsmodus angegeben wird. Weitere Informationen zu dieser Änderung und zu den aktionen, die Sie ausführen sollten, finden Sie unter Breaking Change for VMSS PowerShell/CLI Customers - 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

Den Schlüssel eines Datenträgerverschlüsselungssatzes ändern, um die Schlüsselrotation für die referenzierten Ressourcen durchzuführen

Das Skript verwendet Update-AzDiskEncryptionSet , um den Schlüssel zu ändern, auf den durch den Datenträgerverschlüsselungssatz verwiesen wird. Ersetzen Sie die Beispielwerte durch Ihre eigenen Parameter, und führen Sie dann das Skript aus.

$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

Ermitteln des Status der serverseitigen Verschlüsselung eines Datenträgers

Das Skript verwendet Get-AzDisk , um den serverseitigen Verschlüsselungstyp des Datenträgers abzurufen.

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

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

Für Datenträger, die in den vorherigen Beispielen konfiguriert sind, EncryptionAtRestWithCustomerKey gibt die serverseitige Verschlüsselung mit einem vom Kunden verwalteten Schlüssel an. EncryptionAtRestWithPlatformAndCustomerKeys gibt doppelte Verschlüsselung mit vom Kunden verwalteten und plattformverwalteten Schlüsseln an.

Wichtig

Vom Kunden verwaltete Schlüssel basieren auf verwalteten Identitäten für Azure Ressourcen, ein Feature von Microsoft Entra ID. Wenn Sie vom Kunden verwaltete Schlüssel konfigurieren, wird Ihren Ressourcen im Hintergrund automatisch eine verwaltete Identität zugewiesen. Wenn Sie anschließend das Abonnement, die Ressourcengruppe oder den verwalteten Datenträger von einem Microsoft Entra Verzeichnis in ein anderes verschieben, wird die verwaltete Identität, die den verwalteten Datenträgern zugeordnet ist, nicht an den neuen Mandanten übertragen, sodass vom Kunden verwaltete Schlüssel möglicherweise nicht mehr funktionieren. Weitere Informationen finden Sie unter Transferieren eines Abonnements zwischen Microsoft Entra Verzeichnissen.

Nächste Schritte