Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Die Azure Disk Encryption wird am 15. September 2028 eingestellt. Bis zu diesem Datum können Sie die Azure Disk Encryption ohne Unterbrechung weiterhin verwenden. Am 15. September 2028 werden ADE-fähige Workloads weiterhin ausgeführt, verschlüsselte Datenträger werden jedoch nach dem Neustart des virtuellen Computers nicht entsperrt, was zu Dienstunterbrechungen führt.
Verwenden Sie die Verschlüsselung auf dem Host für neue virtuelle Computer, oder ziehen Sie vertrauliche VM-Größen mit Betriebssystemdatenträgerverschlüsselung für vertrauliche Computerarbeitslasten in Betracht. Alle ADE-fähigen VMs (einschließlich Sicherungen) müssen vor dem Deaktivierungsdatum zur Verschlüsselung auf dem Host migriert werden, um Dienstunterbrechungen zu vermeiden. Ausführliche Informationen finden Sie unter Migrieren von Azure Disk Encryption zu Verschlüsselung auf dem Host .
Vorsicht
In diesem Artikel wird auf CentOS verwiesen, eine Linux-Verteilung, die den EOL-Status (End-of-Life) aufweist. Berücksichtigen Sie Ihre Nutzung und planen Sie entsprechend. Weitere Informationen finden Sie im End-of-Life-Leitfaden für CentOS.
Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen
Dieser Artikel bietet Beispielskripts für die Vorbereitung vorab verschlüsselter VHDs und andere Aufgaben.
Hinweis
Alle Skripts beziehen sich auf die neueste, nicht Microsoft Entra ID Version von ADE, außer wo angegeben.
PowerShell-Beispielskripts für Azure Disk Encryption
Auflisten aller verschlüsselten VMs Ihres Abonnements
Sie finden alle mit ADE verschlüsselten VMs und die Erweiterungsversion in allen Ressourcengruppen, die in einem Abonnement vorhanden sind, mit diesem PowerShell-Skript.
Alternativ zeigen diese Cmdlets alle mit ADE verschlüsselten VMs an (jedoch nicht die Erweiterungsversion):
$osVolEncrypted = {(Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).OsVolumeEncrypted} $dataVolEncrypted= {(Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.Name).DataVolumesEncrypted} Get-AzVm | Format-Table @{Label="MachineName"; Expression={$_.Name}}, @{Label="OsVolumeEncrypted"; Expression=$osVolEncrypted}, @{Label="DataVolumesEncrypted"; Expression=$dataVolEncrypted}Auflisten aller verschlüsselten VMSS-Instanzen in Ihrem Abonnement
Sie finden alle mit ADE verschlüsselten VMSS-Instanzen und die Erweiterungsversion in allen Ressourcengruppen, die in einem Abonnement vorhanden sind, mit diesem PowerShell-Skript.
Auflisten aller Geheimnisse der Datenträgerverschlüsselung, die zum Verschlüsseln von VMs in einem Schlüsseltresor verwendet werden
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Verwenden des PowerShell-Skripts für die Voraussetzungen für Azure Disk Encryption
Wenn Sie bereits mit den Voraussetzungen für Azure Disk Encryption vertraut sind, können Sie das PowerShell-Skript zur Überprüfung der Azure Disk Encryption-Voraussetzungen verwenden. Ein Beispiel für die Verwendung dieses PowerShell-Skripts finden Sie im Schnellstart: Verschlüsseln einer VM. Sie können die Kommentare aus einem Abschnitt des Skripts, beginnend ab Zeile 211, entfernen, um alle Datenträger für vorhandene virtuelle Computer in einer vorhandenen Ressourcengruppe zu verschlüsseln.
In der folgenden Tabelle sind die Parameter aufgeführt, die Sie im PowerShell-Skript verwenden können:
| Parameter | BESCHREIBUNG | Erforderlich? |
|---|---|---|
| $resourceGroupName | Name der Ressourcengruppe, zu der der Schlüsseltresor gehört. Das Skript erstellt eine neue Ressourcengruppe mit diesem Namen, wenn sie nicht vorhanden ist. | True |
| $keyVaultName | Name des KeyVault, in dem Verschlüsselungsschlüssel gespeichert werden sollen. Das Skript erstellt einen neuen Tresor mit diesem Namen, wenn er nicht vorhanden ist. | True |
| $location | Standort des Schlüsseltresors. Überprüfen Sie, ob sich die zu verschlüsselnden KeyVault- und VMs an demselben Speicherort befinden. Mit Get-AzLocation können Sie eine Standortliste abrufen. |
True |
| $subscriptionId | Bezeichner des zu verwendenden Azure Abonnements. Rufen Sie Ihre Abonnement-ID über Get-AzSubscription ab. |
True |
| $aadAppName | Name der Microsoft Entra Anwendung, die geheime Schlüssel in KeyVault schreibt. Das Skript erstellt eine neue Anwendung mit diesem Namen, wenn sie nicht vorhanden ist. Wenn diese App bereits vorhanden ist, übergeben Sie den Parameter aadClientSecret an das Skript. | False |
| $aadClientSecret | Geheimer Clientschlüssel der zuvor erstellten Microsoft Entra Anwendung. | False |
| $keyEncryptionKeyName | Name des optionalen Schlüssels für die Schlüsselverschlüsselung in Key Vault. Das Skript erstellt einen neuen Schlüssel mit diesem Namen, wenn kein Schlüssel vorhanden ist. | False |
Verschlüsseln oder Entschlüsseln von VMs ohne Microsoft Entra-App
- Enable disk encryption on an existing or running Linux VM (Aktivieren der Datenträgerverschlüsselung auf einem vorhandenen oder ausgeführten virtuellen Linux-Computer)
-
Disable encryption on a running Linux VM (Deaktivieren der Verschlüsselung auf einem ausgeführten virtuellen Linux-Computer)
- Das Deaktivieren der Verschlüsselung ist nur auf Datenvolumes für Linux-VMs zulässig.
Verschlüsseln oder Entschlüsseln von VMs mit einer Microsoft Entra-App (vorheriges Release)
- Enable disk encryption on an existing or running Linux VM (Aktivieren der Datenträgerverschlüsselung auf einem vorhandenen oder ausgeführten virtuellen Linux-Computer)
-
Disable encryption on a running Linux VM (Deaktivieren der Verschlüsselung auf einem ausgeführten virtuellen Linux-Computer)
- Das Deaktivieren der Verschlüsselung ist nur auf Datenvolumes für Linux-VMs zulässig.
-
Create a new encrypted managed disk from a pre-encrypted VHD/storage blob (Erstellen eines neuen verschlüsselten verwalteten Datenträgers auf der Grundlage einer vorverschlüsselten VHD/eines Speicherblobs)
- Erstellt einen neuen verschlüsselten verwalteten Datenträger, wenn eine vorverschlüsselte VHD und die entsprechenden Verschlüsselungseinstellungen vorhanden sind
Verschlüsseln eines Betriebssystemdatenträgers auf einer ausgeführten Linux-VM
Voraussetzungen für die Verschlüsselung des Betriebssystemdatenträgers
- Die VM muss eine Distribution verwenden, die mit der Verschlüsselung von Betriebssystemdatenträgern kompatibel ist. Eine Liste dieser Distributionen finden Sie unter Von Azure Disk Encryption unterstützte Betriebssysteme.
- Die VM muss über ein Marketplace-Image im Azure Resource Manager erstellt werden.
- Azure-VM mit mindestens 4 GB RAM (7 GB empfohlen). Weitere Informationen finden Sie unter Arbeitsspeicheranforderungen.
- (Für RHEL und CentOS) Deaktivieren Sie SELinux. Informationen zum Deaktivieren von SELinux finden Sie unter „4.4.2. Disabling SELinux“ (Deaktivieren von SELinux) im SELinux User's and Administrator's Guide (SELinux-Handbuch für Benutzer und Administratoren) in der VM.
- Die VM muss nach dem Deaktivieren von SELinux mindestens einmal neu gestartet werden.
Schritte
Erstellen Sie eine VM mit einer der oben angegebenen Distributionen.
Konfigurieren Sie die VM gemäß Ihren Anforderungen. Wenn Sie alle Datenträger (für Betriebssystem und Daten) verschlüsseln möchten, müssen die Datenträger für Daten angegeben und über „/etc/fstab“ bereitgestellt werden.
Hinweis
Verwenden Sie „UUID=...“, um Datenlaufwerke nicht über den Blockgerätnamen, z.B. „/dev/sdb1“, sondern unter „/etc/fstab“ anzugeben. Während der Verschlüsselung ändert sich die Reihenfolge der Laufwerke auf dem virtuellen Computer. Wenn für Ihren virtuellen Computer eine bestimmte Reihenfolge der Blockgeräte erforderlich ist, funktioniert die Bereitstellung nach der Verschlüsselung nicht mehr.
Melden Sie sich bei den SSH-Sitzungen ab.
Geben Sie zum Verschlüsseln des Betriebssystems für „volumeType“ die Option All oder OS an, wenn Sie die Verschlüsselung aktivieren.
Hinweis
Beenden Sie alle Prozesse im Benutzerbereich, die nicht als
systemd-Dienste mit einemSIGKILLausgeführt werden. Starten Sie die VM neu. Planen Sie für den virtuellen Computer eine Downtime ein, wenn Sie die Verschlüsselung des Betriebssystemdatenträgers auf einem ausgeführten virtuellen Computer aktivieren.Überprüfen Sie den Fortschritt der Verschlüsselung in regelmäßigen Abständen, indem Sie die Anleitung im nächsten Abschnitt befolgen.
Wenn für „Get-AzVmDiskEncryptionStatus“ der Status „VMRestartPending“ angezeigt wird, können Sie die VM neu starten, indem Sie sich entweder bei der VM anmelden oder die Anmeldung per Portal, PowerShell oder CLI durchführen.
C:\> Get-AzVmDiskEncryptionStatus -ResourceGroupName $ResourceGroupName -VMName $VMName -ExtensionName $ExtensionNameOsVolumeEncrypted : VMRestartPending DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk successfully encrypted, reboot the VMSpeichern Sie vor dem Neustart die Startdiagnose der VM.
Überwachen des Fortschritts der Betriebssystemverschlüsselung
Es gibt drei Möglichkeiten, den Fortschritt der Betriebssystemverschlüsselung zu überwachen:
Verwenden Sie das
Get-AzVmDiskEncryptionStatus-Cmdlet, und untersuchen Sie das Feld „ProgressMessage“:Get-AzVMDiskEncryptionStatus -ResourceGroupName $_.ResourceGroupName -VMName $_.NameOsVolumeEncrypted : EncryptionInProgress DataVolumesEncrypted : NotMounted OsVolumeEncryptionSettings : Microsoft.Azure.Management.Compute.Models.DiskEncryptionSettings ProgressMessage : OS disk encryption startedWenn die VM den Status „OS disk encryption started“ erreicht hat, dauert der Vorgang auf einer VM mit Premium-Speicher ca. 40 bis 50 Minuten.
Aufgrund von GitHub-Issue #388 in WALinuxAgent werden
OsVolumeEncryptedundDataVolumesEncryptedin einigen Distributionen alsUnknownangezeigt. Bei WALinuxAgent Version 2.1.5 und höher wird dieses Problem automatisch behoben. Falls SieUnknownin der Ausgabe sehen, können Sie den Status der Datenverschlüsselung über den Azure-Ressourcen-Explorer überprüfen.Wechseln Sie zum Azure-Ressourcen-Explorer, und erweitern Sie diese Hierarchie im Auswahlbereich auf der linken Seite:
|-- subscriptions |-- [Your subscription] |-- resourceGroups |-- [Your resource group] |-- providers |-- Microsoft.Compute |-- virtualMachines |-- [Your virtual machine] |-- InstanceViewScrollen Sie unter „InstanceView“ nach unten, um den Verschlüsselungsstatus Ihrer Laufwerke anzuzeigen.
Sehen Sie sich die Startdiagnose an. Meldungen der ADE-Erweiterung weisen das Präfix
[AzureDiskEncryption]auf.Melden Sie sich per SSH bei der VM an und rufen Sie das Erweiterungsprotokoll von:
/var/log/azure/Microsoft.Azure.Security.AzureDiskEncryptionForLinux
Melden Sie sich nicht bei der VM an, während die Betriebssystemverschlüsselung ausgeführt wird. Kopieren Sie die Protokolle nur, wenn die beiden anderen Methoden fehlschlagen.
Vorbereiten einer vorverschlüsselten Linux-VHD
Die Vorbereitung für vorverschlüsselte VHDs kann je nach Distribution variieren. Es sind Beispiele zur Vorbereitung von Ubuntu, openSUSE und CentOS 7 verfügbar.
Konfigurieren Sie die Verschlüsselung während der Installation einer Distribution, indem Sie die folgenden Schritte ausführen:
Wählen Sie beim Partitionieren von Datenträgern die Option Configure encrypted volumes (Verschlüsselte Volumes konfigurieren).
Erstellen Sie ein separates Startlaufwerk, das nicht verschlüsselt sein darf. Verschlüsseln Sie Ihr Stammlaufwerk.
Geben Sie eine Passphrase an. Sie haben diese Passphrase in den Schlüsseltresor hochgeladen.
Schließen Sie die Partitionierung ab.
Beim Starten der VM werden Sie nach einer Passphrase gefragt. Verwenden Sie die Passphrase, die Sie in Schritt 3 angegeben haben.
Bereiten Sie die VM für das Hochladen in Azure anhand dieser Anleitung vor. Führen Sie den letzten Schritt (das Aufheben der VM-Bereitstellung) noch nicht aus.
Konfigurieren Sie die Verschlüsselung für Azure, indem Sie die folgenden Schritte ausführen:
Erstellen Sie eine Datei unter
/usr/local/sbin/azure_crypt_key.shmit dem Inhalt des folgenden Skripts. Achten Sie auf KeyFileName, da dies der von Azure verwendete Dateiname für die Passphrase ist.#!/bin/sh MountPoint=/tmp-keydisk-mount KeyFileName=LinuxPassPhraseFileName echo "Trying to get the key from disks ..." >&2 mkdir -p $MountPoint modprobe vfat >/dev/null 2>&1 modprobe ntfs >/dev/null 2>&1 sleep 2 OPENED=0 cd /sys/block for DEV in sd*; do echo "> Trying device: $DEV ..." >&2 mount -t vfat -r /dev/${DEV}1 $MountPoint >/dev/null|| mount -t ntfs -r /dev/${DEV}1 $MountPoint >/dev/null if [ -f $MountPoint/$KeyFileName ]; then cat $MountPoint/$KeyFileName umount $MountPoint 2>/dev/null OPENED=1 break fi umount $MountPoint 2>/dev/null done if [ $OPENED -eq 0 ]; then echo "FAILED to find suitable passphrase file ..." >&2 echo -n "Try to enter your password: " >&2 read -s -r A </dev/console echo -n "$A" else echo "Success loading keyfile!" >&2 fiÄndern Sie die Verschlüsselungskonfiguration in /etc/crypttab. Diese sollte wie folgt aussehen:
xxx_crypt uuid=xxxxxxxxxxxxxxxxxxxxx none luks,discard,keyscript=/usr/local/sbin/azure_crypt_key.shFügen Sie dem Skript Berechtigungen für die Ausführung hinzu:
sudo chmod +x /usr/local/sbin/azure_crypt_key.shBearbeiten Sie
/etc/initramfs-tools/modules, indem Sie Zeilen anfügen:vfat ntfs nls_cp437 nls_utf8 nls_iso8859-1Führen Sie
update-initramfs -u -k allzum Aktualisieren von „initramfs“ aus, damitkeyscriptwirksam wird.Nun können Sie die Bereitstellung des virtuellen Computers aufheben.
Fahren Sie mit dem nächsten Schritt fort, und laden Sie Ihre VHD in Azure hoch.
Hochladen einer verschlüsselten VHD in ein Azure-Speicherkonto
Nachdem die DM-Crypt-Verschlüsselung aktiviert wurde, muss die lokale verschlüsselte VHD in Ihr Speicherkonto hochgeladen werden.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Hochladen des Geheimnisses für den vorab verschlüsselten virtuellen Computer in Ihren Schlüsseltresor
Beim Verschlüsseln mit einer Microsoft Entra-App (früheres Release) muss das zuvor abgerufene Geheimnis zur Datenträgerverschlüsselung als Geheimnis in den Schlüsseltresor hochgeladen werden. Der Schlüsseltresor muss für die Datenverschlüsselung aktiviert sein und über Berechtigungen für Ihren Microsoft Entra-Client verfügen.
$AadClientId = "My-AAD-Client-Id"
$AadClientSecret = "My-AAD-Client-Secret"
$key vault = New-AzKeyVault -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -Location $Location
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -ServicePrincipalName $AadClientId -PermissionsToKeys all -PermissionsToSecrets all
Set-AzKeyVaultAccessPolicy -VaultName $KeyVaultName -ResourceGroupName $ResourceGroupName -EnabledForDiskEncryption
Geheimnis der Datenträgerverschlüsselung ohne Verschlüsselung per KEK
Verwenden Sie Set-AzKeyVaultSecret, um das Geheimnis im Schlüsseltresor einzurichten. Die Passphrase wird als Base64-Zeichenfolge codiert und dann in den Schlüsseltresor hochgeladen. Überprüfen Sie außerdem, ob die folgenden Tags festgelegt sind, wenn Sie das Geheimnis im Schlüsseltresor erstellen.
# This is the passphrase that was provided for encryption during the distribution installation
$passphrase = "contoso-password"
$tags = @{"DiskEncryptionKeyEncryptionAlgorithm" = "RSA-OAEP"; "DiskEncryptionKeyFileName" = "LinuxPassPhraseFileName"}
$secretName = [guid]::NewGuid().ToString()
$secretValue = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($passphrase))
$secureSecretValue = ConvertTo-SecureString $secretValue -AsPlainText -Force
$secret = Set-AzKeyVaultSecret -VaultName $KeyVaultName -Name $secretName -SecretValue $secureSecretValue -tags $tags
$secretUrl = $secret.Id
Verwenden Sie den $secretUrl im nächsten Schritt zum Anfügen des Betriebssystemdatenträgers ohne KEK.
Geheimnis der Datenträgerverschlüsselung mit Verschlüsselung per KEK
Das Geheimnis kann optional mit einem KEK verschlüsselt werden, bevor er in den Schlüsseltresor hochgeladen wird. Verwenden Sie die Wrapper-API, um das Geheimnis zuerst mit dem KEK zu verschlüsseln. Die Ausgabe dieses Wrapper-Vorgangs ist eine Base64-codierte URL-Zeichenfolge, die dann als Geheimnis mit dem Set-AzKeyVaultSecret-Cmdlet hochgeladen wird.
# This is the passphrase that was provided for encryption during the distribution installation
$passphrase = "contoso-password"
Add-AzKeyVaultKey -VaultName $KeyVaultName -Name "keyencryptionkey" -Destination Software
$KeyEncryptionKey = Get-AzKeyVaultKey -VaultName $KeyVault.OriginalVault.Name -Name "keyencryptionkey"
$apiversion = "2015-06-01"
##############################
# Get Auth URI
##############################
$uri = $KeyVault.VaultUri + "/keys"
$headers = @{}
$response = try { Invoke-RestMethod -Method GET -Uri $uri -Headers $headers } catch { $_.Exception.Response }
$authHeader = $response.Headers["www-authenticate"]
$authUri = [regex]::match($authHeader, 'authorization="(.*?)"').Groups[1].Value
Write-Host "Got Auth URI successfully"
##############################
# Get Auth Token
##############################
$uri = $authUri + "/oauth2/token"
$body = "grant_type=client_credentials"
$body += "&client_id=" + $AadClientId
$body += "&client_secret=" + [Uri]::EscapeDataString($AadClientSecret)
$body += "&resource=" + [Uri]::EscapeDataString("https://vault.azure.net")
$headers = @{}
$response = Invoke-RestMethod -Method POST -Uri $uri -Headers $headers -Body $body
$access_token = $response.access_token
Write-Host "Got Auth Token successfully"
##############################
# Get KEK info
##############################
$uri = $KeyEncryptionKey.Id + "?api-version=" + $apiversion
$headers = @{"Authorization" = "Bearer " + $access_token}
$response = Invoke-RestMethod -Method GET -Uri $uri -Headers $headers
$keyid = $response.key.kid
Write-Host "Got KEK info successfully"
##############################
# Encrypt passphrase by using KEK
##############################
$passphraseB64 = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($Passphrase))
$uri = $keyid + "/encrypt?api-version=" + $apiversion
$headers = @{"Authorization" = "Bearer " + $access_token; "Content-Type" = "application/json"}
$bodyObj = @{"alg" = "RSA-OAEP"; "value" = $passphraseB64}
$body = $bodyObj | ConvertTo-Json
$response = Invoke-RestMethod -Method POST -Uri $uri -Headers $headers -Body $body
$wrappedSecret = $response.value
Write-Host "Encrypted passphrase successfully"
##############################
# Store secret
##############################
$secretName = [guid]::NewGuid().ToString()
$uri = $KeyVault.VaultUri + "/secrets/" + $secretName + "?api-version=" + $apiversion
$secretAttributes = @{"enabled" = $true}
$secretTags = @{"DiskEncryptionKeyEncryptionAlgorithm" = "RSA-OAEP"; "DiskEncryptionKeyFileName" = "LinuxPassPhraseFileName"}
$headers = @{"Authorization" = "Bearer " + $access_token; "Content-Type" = "application/json"}
$bodyObj = @{"value" = $wrappedSecret; "attributes" = $secretAttributes; "tags" = $secretTags}
$body = $bodyObj | ConvertTo-Json
$response = Invoke-RestMethod -Method PUT -Uri $uri -Headers $headers -Body $body
Write-Host "Stored secret successfully"
$secretUrl = $response.id
Verwenden Sie $KeyEncryptionKey und $secretUrl im nächsten Schritt für das Anfügen des Betriebssystemdatenträgers mithilfe von KEK.
Angeben einer Geheimnis-URL beim Anfügen eines Betriebssystemdatenträgers
Ohne KEK
Beim Anfügen des Betriebssystemdatenträgers muss $secretUrl übergeben werden. Die URL wird im Abschnitt „Geheimnis der Datenträgerverschlüsselung, das nicht mit einem KEK verschlüsselt ist“ generiert.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Mit KEK
Beim Anfügen des Betriebssystemdatenträgers müssen $KeyEncryptionKey und $secretUrl übergeben werden. Die URL wird im Abschnitt „Geheimnis für die Datenträgerverschlüsselung, verschlüsselt mit einem KEK“ generiert.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $CopiedTemplateBlobUri `
-VhdUri $OSDiskUri `
-Linux `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id