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 .
Gilt für: ✔️ Windows-VMs
Dieser Artikel bietet Beispielskripts für die Vorbereitung vorab verschlüsselter VHDs und andere Aufgaben.
Hinweis
Alle Skripte beziehen sich auf die neueste, Nicht-AAD-Version von ADE, sofern nicht anders angegeben.
PowerShell-Beispielskripts für Azure Disk Encryption
- Auflisten aller verschlüsselten VMs Ihres Abonnements
Sie finden alle ADE-verschlüsselten VMs und die Erweiterungsversion in allen Ressourcengruppen, die in einem Abonnement vorhanden sind, mithilfe des Find_1passAdeVersion_VM.ps1 PowerShell-Skripts.
Alternativ zeigen diese Cmdlets alle ADE-verschlüsselten VMs (aber nicht die Erweiterungsversion) an:
$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 können mithilfe des Find_1passAdeVersion_VMSS.ps1 PowerShell-Skripts in allen Ressourcengruppen eines Abonnements alle ADE-verschlüsselten Instanzen von VM-Skalierungsgruppen und die Erweiterungsversion finden.
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.
Die folgende Tabelle zeigt, welche Parameter Sie im PowerShell-Skript verwenden können:
| Parameter | BESCHREIBUNG | Erforderlich? |
|---|---|---|
| $resourceGroupName | Name der Ressourcengruppe, zu der der Schlüsselspeicher gehört. Das Skript erstellt eine neue Ressourcengruppe mit diesem Namen, wenn sie nicht vorhanden ist. | True |
| $keyVaultName | Name des Schlüsseltresors, in dem Verschlüsselungsschlüssel platziert werden sollen. Das Skript erstellt einen neuen Tresor mit diesem Namen, wenn er nicht vorhanden ist. | True |
| $location | Speicherort des Schlüsseltresors. Stellen Sie sicher, dass sich der zu verschlüsselnde Schlüsseltresor 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 Key Vault schreibt. Das Skript erstellt eine neue Anwendung mit diesem Namen, wenn sie nicht vorhanden ist. Wenn diese App bereits vorhanden ist, übergeben Sie den aadClientSecret-Parameter an das Skript. | False |
| $aadClientSecret | Geheimer Clientschlüssel der zuvor erstellten Microsoft Entra Anwendung. | False |
| $keyEncryptionKeyName | Name des optionalen Schlüsselverschlüsselungsschlüssels in Key Vault. Das Skript erstellt einen neuen Schlüssel mit diesem Namen, wenn kein Schlüssel vorhanden ist. | False |
Resource Manager-Vorlagen
Verschlüsseln oder Entschlüsseln von VMs ohne Microsoft Entra-App
- Enable disk encryption on an existing or running Windows VM (Aktivieren der Datenträgerverschlüsselung auf einem vorhandenen oder ausgeführten virtuellen Windows-Computer)
- Disable encryption on a running Windows VM (Deaktivieren der Verschlüsselung auf einem ausgeführten virtuellen Windows-Computer)
Verschlüsseln oder Entschlüsseln von virtuellen Computern mithilfe einer Microsoft Entra-App
- Enable disk encryption on an existing or running Windows VM (Aktivieren der Datenträgerverschlüsselung auf einem vorhandenen oder ausgeführten virtuellen Windows-Computer)
- Disable encryption on a running Windows VM (Deaktivieren der Verschlüsselung auf einem ausgeführten virtuellen Windows-Computer)
- Erstellen Eines neuen verschlüsselten verwalteten Datenträgers aus einem vorverschlüsselten VHD/Storage-Blob – Erstellt einen neuen verschlüsselten verwalteten Datenträger aus einer vorverschlüsselten VHD und den entsprechenden Verschlüsselungseinstellungen.
Vorbereiten einer vorverschlüsselten Windows-VHD
In den folgenden Abschnitten wird erläutert, wie Sie eine vorverschlüsselte Windows VHD für die Bereitstellung als verschlüsselte VHD in Azure IaaS vorbereiten. Verwenden Sie diese Informationen, um eine neue Windows VM (VHD) auf Azure Site Recovery oder Azure vorzubereiten und zu starten. Weitere Informationen zum Vorbereiten und Hochladen einer virtuellen Festplatte finden Sie unter "Hochladen einer generalisierten VHD" und verwenden sie zum Erstellen neuer VMs in Azure.
Aktualisieren der Gruppenrichtlinie, um Schutz ohne TPM für das Betriebssystem zu ermöglichen
Sie müssen die BitLocker-Gruppenrichtlinieneinstellung mit dem Namen BitLocker-Laufwerkverschlüsselung konfigurieren, die sich unter Lokale Computerrichtlinie>Computerkonfiguration>Administrative Vorlagen>Windows-Komponenten befindet. Ändern Sie diese Einstellung wie folgt: Betriebssystemlaufwerke>Zusätzliche Authentifizierung beim Start anfordern>BitLocker ohne kompatibles TPM zulassen. Dies wird in der folgenden Abbildung dargestellt:
Installieren der Komponenten der BitLocker-Funktion
Verwenden Sie für Windows Server 2012 und höher den folgenden Befehl:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
Verwenden Sie für Windows Server 2008 R2 den folgenden Befehl:
ServerManagerCmd -install BitLockers
Vorbereiten des Betriebssystemvolumes für BitLocker mit bdehdcfg
Führen Sie den Befehl bdehdcfg aus, falls erforderlich, um die Betriebssystempartition zu komprimieren und den Computer für BitLocker vorzubereiten:
bdehdcfg -target c: shrink -quiet
Schützen des Betriebssystemvolumes mit BitLocker
Verwenden Sie den manage-bde Befehl, um die Verschlüsselung auf dem Startvolume mithilfe einer externen Schlüsselschutzvorrichtung zu aktivieren. Platzieren Sie außerdem den externen Schlüssel (BEK-Datei) auf dem externen Laufwerk oder Volume. Die Verschlüsselung wird nach dem nächsten Neustart auf dem System-/Startvolume aktiviert.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Hinweis
Bereiten Sie den virtuellen Computer mit einer separaten Daten-/Ressourcen-VHD zum Abrufen des externen Schlüssels mit BitLocker vor.
Hochladen einer verschlüsselten VHD in ein Azure-Speicherkonto
Nachdem die BitLocker-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
Laden Sie den Geheimschlüssel für die Datenträgerverschlüsselung hoch, den Sie zuvor als geheimer Schlüssel im Schlüsseltresor erhalten haben. Erteilen Sie dazu dem Konto, das die Geheimnisse hochlädt, die Berechtigung zum Festlegen von Geheimnissen sowie die „wrapKey“-Berechtigung.
# Typically, account Id is the user principal name (in user@domain.com format)
$upn = (Get-AzureRmContext).Account.Id
Set-AzKeyVaultAccessPolicy -VaultName $kvname -UserPrincipalName $acctid -PermissionsToKeys wrapKey -PermissionsToSecrets set
# In cloud shell, the account ID is a managed service identity, so specify the username directly
# $upn = "user@domain.com"
# Set-AzKeyVaultAccessPolicy -VaultName $kvname -UserPrincipalName $acctid -PermissionsToKeys wrapKey -PermissionsToSecrets set
# When running as a service principal, retrieve the service principal ID from the account ID, and set access policy to that
# $acctid = (Get-AzureRmContext).Account.Id
# $spoid = (Get-AzureRmADServicePrincipal -ServicePrincipalName $acctid).Id
# Set-AzKeyVaultAccessPolicy -VaultName $kvname -ObjectId $spoid -BypassObjectIdValidation -PermissionsToKeys wrapKey -PermissionsToSecrets set
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. Stellen Sie außerdem sicher, dass die folgenden Tags festgelegt sind, während das Geheimnis im Schlüsseltresor erstellt wird.
# 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 im nächsten Schritt das $secretUrl, um den Betriebssystemdatenträger ohne Verwendung eines KEK anzufügen.
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 Wrap-API, um das Geheimnis zunächst mit dem Schlüsselverschlüsselungsschlüssel 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 a 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 den $secretUrl nächsten Schritt zum Anfügen des Betriebssystemdatenträgers mithilfe eines KEK.
Angeben einer Geheimnis-URL beim Anfügen eines Betriebssystemdatenträgers
Ohne KEK
Während Sie den Betriebssystemdatenträger anhängen, übergeben Sie $secretUrl. 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 `
-Windows `
-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 `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id