Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Belangrijk
Azure Disk Encryption is gepland voor buitengebruikstelling op 15 september 2028. Tot die datum kunt u Azure Disk Encryption blijven gebruiken zonder onderbreking. Op 15 september 2028 blijven workloads met ADE-functionaliteit actief, maar versleutelde schijven kunnen niet worden ontgrendeld nadat de VM opnieuw is opgestart, wat leidt tot serviceonderbreking.
Gebruik versleuteling op de host voor nieuwe VM's of overweeg vertrouwelijke VM-grootten met besturingssysteemschijfversleuteling voor workloads met vertrouwelijke computing. Alle ADE-VM's (inclusief back-ups) moeten vóór de buitengebruikstellingsdatum migreren naar versleuteling op de host om serviceonderbreking te voorkomen. Zie Migreren van Azure Disk Encryption naar versleuteling op de host voor meer informatie.
Van toepassing op: ✔️ Windows-VM's
Dit artikel bevat voorbeeldscripts voor het voorbereiden van vooraf versleutelde VHD's en andere taken.
Opmerking
Alle scripts verwijzen naar de nieuwste, niet-AAD-versie van ADE, behalve waar vermeld.
PowerShell-voorbeeldscripts voor Azure Disk Encryption
- Alle versleutelde VM's in uw abonnement weergeven
U vindt alle met ADE versleutelde VM's en de extensieversie, in alle resourcegroepen die aanwezig zijn in een abonnement, met behulp van het Find_1passAdeVersion_VM.ps1 PowerShell-script.
Deze cmdlets bevatten ook alle met ADE versleutelde VM's (maar niet de extensieversie):
$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}
Alle versleutelde VMSS-exemplaren in uw abonnement weergeven
U vindt alle met ADE versleutelde instanties van virtuele-machineschaalsets en de extensieversie, in alle resourcegroepen die aanwezig zijn in een abonnement, met behulp van het Find_1passAdeVersion_VMSS.ps1 PowerShell-script.
Een lijst weergeven van alle schijfversleutelingsgeheimen die worden gebruikt voor het versleutelen van VM's in een sleutelkluis
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Het PowerShell-script met vereisten voor Azure Disk Encryption gebruiken
Als u al bekend bent met de vereisten voor Azure Disk Encryption, kunt u het PowerShell-script voor Azure Disk Encryption gebruiken. Raadpleeg de Een VM versleutelen Quickstart voor een voorbeeld van het gebruik van dit PowerShell-script. U kunt de opmerkingen verwijderen uit een sectie van het script, te beginnen bij regel 211, om alle schijven voor bestaande VM's in een bestaande resourcegroep te versleutelen.
In de volgende tabel ziet u welke parameters u kunt gebruiken in het PowerShell-script:
| Parameter | Beschrijving | Verplicht? |
|---|---|---|
| $resourceGroupName | Naam van de resourcegroep waartoe de sleutelkluis behoort. Met het script maakt u een nieuwe resourcegroep met deze naam als deze niet bestaat. | True |
| $keyVaultName | Naam van de sleutelkluis waarin versleutelingssleutels moeten worden opgeslagen. Het script maakt een nieuwe kluis met deze naam aan als er nog geen kluis met deze naam bestaat. | True |
| $location | Locatie van de sleutelkluis. Zorg ervoor dat de sleutelkluis en vm's die moeten worden versleuteld zich op dezelfde locatie bevinden. Een locatielijst ophalen met Get-AzLocation. |
True |
| $subscriptionId | Id van het Azure-abonnement dat moet worden gebruikt. Haal uw abonnements-id op met Get-AzSubscription. |
True |
| $aadAppName | Naam van de Microsoft Entra-toepassing waarmee geheimen naar Key Vault worden geschreven. Met het script maakt u een nieuwe toepassing met deze naam als deze niet bestaat. Als deze app al bestaat, geeft u de parameter aadClientSecret door aan het script. | Onwaar |
| $aadClientSecret | Clientgeheim van de Microsoft Entra-toepassing die eerder is gemaakt. | Onwaar |
| $keyEncryptionKeyName | Naam van optionele sleutelversleutelingssleutel in Key Vault. Met het script maakt u een nieuwe sleutel met deze naam als deze niet bestaat. | Onwaar |
Resource Manager-sjablonen
VM's versleutelen of ontsleutelen zonder een Microsoft Entra-app
- Schijfversleuteling inschakelen op een bestaande of actieve Windows-VM
- versleuteling op een actieve Windows-VM uitschakelen
VM's versleutelen of ontsleutelen met behulp van een Microsoft Entra-app
- Schijfversleuteling inschakelen op een bestaande of actieve Windows-VM
- versleuteling op een actieve Windows-VM uitschakelen
- Maak een nieuwe versleutelde beheerde schijf op basis van een vooraf versleutelde VHD-/opslag-blob : hiermee maakt u een nieuwe versleutelde beheerde schijf op basis van een vooraf versleutelde VHD en de bijbehorende versleutelingsinstellingen.
Een vooraf versleutelde Windows-VHD voorbereiden
In de volgende secties wordt uitgelegd hoe u een vooraf versleutelde Windows VHD voorbereidt voor implementatie als een versleutelde VHD in Azure IaaS. Gebruik deze informatie om een nieuwe Windows VM (VHD) voor te bereiden en op te starten op Azure Site Recovery of Azure. Zie Een gegeneraliseerde VHD uploaden en gebruiken om nieuwe VM's te maken in Azure voor meer informatie over het voorbereiden en uploaden van een VHD.
Groepsbeleid bijwerken om niet-TPM toe te staan voor besturingssysteembeveiliging
Configureer de BitLocker-groepsbeleidsinstelling BitLocker-stationsversleuteling, die u vindt onder Lokale Computerbeleid>Computerconfiguratie>Beheersjablonen>Windows-onderdelen. Wijzig deze instelling in Besturingssysteemstations>Vereisen extra verificatie bij het opstarten>BitLocker toestaan zonder een compatibele TPM, zoals weergegeven in de volgende afbeelding:
BitLocker-functiecomponenten installeren
Gebruik voor Windows Server 2012 en hoger de volgende opdracht:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
Gebruik voor Windows Server 2008 R2 de volgende opdracht:
ServerManagerCmd -install BitLockers
Het besturingssysteemvolume voorbereiden voor BitLocker met behulp van bdehdcfg
Als u de besturingssysteempartitie wilt comprimeren en de machine wilt voorbereiden op BitLocker, voert u de bdehdcfg uit, indien nodig:
bdehdcfg -target c: shrink -quiet
Besturingssysteemvolume beveiligen met BitLocker
Gebruik de manage-bde opdracht om versleuteling op het opstartvolume in te schakelen met behulp van een externe sleutelbeveiliging. Plaats ook het externe sleutelbestand (.bek-bestand) op het externe station of volume. Versleuteling is ingeschakeld op het systeem-/opstartvolume na de volgende herstart.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Opmerking
Bereid de VIRTUELE machine voor met een afzonderlijke gegevens-/resource-VHD voor het ophalen van de externe sleutel met behulp van BitLocker.
Versleutelde VHD uploaden naar een Azure-opslagaccount
Nadat BitLocker-versleuteling is ingeschakeld, moet de lokale versleutelde VHD worden geüpload naar uw opslagaccount.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Upload het geheim voor de vooraf versleutelde VM naar uw sleutelkluis
Upload het schijfversleutelingsgeheim dat u eerder hebt verkregen als geheim in uw sleutelkluis. Hiervoor verleent u de setgeheimmachtiging en de wrapkey-machtiging aan het account waarmee de geheimen worden geüpload.
# 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
Schijfversleutelingsgeheim niet versleuteld met een KEK
Als u het geheim in uw sleutelkluis wilt instellen, gebruikt u Set-AzKeyVaultSecret. De wachtwoordzin wordt gecodeerd als een base64-tekenreeks en vervolgens geüpload naar de sleutelkluis. Zorg er bovendien voor dat de volgende tags zijn ingesteld wanneer u het geheim in de sleutelkluis maakt.
# 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
Gebruik in de volgende stap $secretUrl om de besturingssysteemschijf te koppelen zonder een KEK te gebruiken.
Schijfversleutelingsgeheim versleuteld met een KEK
Voordat u het geheim uploadt naar de sleutelkluis, kunt u het desgewenst versleutelen met behulp van een sleutelversleutelingssleutel. Gebruik de wrap-API om het geheim eerst te versleutelen met behulp van de sleutelversleutelingssleutel. De uitvoer van deze wrap-bewerking is een met base64 URL gecodeerde tekenreeks, die u vervolgens kunt uploaden als een geheim met behulp van de Set-AzKeyVaultSecret cmdlet.
# 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
Gebruik $KeyEncryptionKey en $secretUrl in de volgende stap voor het koppelen van de besturingssysteemschijf met behulp van een KEK.
Een geheime URL opgeven wanneer u een besturingssysteemschijf koppelt
Zonder een KEK te gebruiken
Geef $secretUrl door wanneer u de OS-schijf koppelt. De URL wordt gegenereerd in de sectie "Geheim voor schijfversleuteling niet versleuteld met een KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Een KEK gebruiken
Wanneer u de besturingssysteemschijf koppelt, geeft u $KeyEncryptionKey en $secretUrl door. De URL wordt gegenereerd in de sectie "Geheim voor schijfversleuteling versleuteld met een KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $CopiedTemplateBlobUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl `
-KeyEncryptionKeyVaultId $KeyVault.ResourceId `
-KeyEncryptionKeyURL $KeyEncryptionKey.Id