Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Azure Disk Encryption är planerat att tas bort den 15 september 2028. Fram till det datumet kan du fortsätta att använda Azure Disk Encryption utan avbrott. Den 15 september 2028 fortsätter ADE-aktiverade arbetsbelastningar att köras, men krypterade diskar kan inte låsas upp efter omstarter av virtuella datorer, vilket resulterar i avbrott i tjänsten.
Använd kryptering vid värden för nya VM:er eller överväg konfidentiella VM-storlekar med OS-diskkryptering för arbetslaster för konfidentiell databehandling. Alla ADE-aktiverade virtuella datorer (inklusive säkerhetskopior) måste migreras till kryptering hos värden före pensionsdatumet för att undvika serviceavbrott. Se Migrera från Azure Disk Encryption till värdkryptering för detaljer.
Gäller för: ✔️ Virtuella Windows-datorer
Den här artikeln innehåller exempelskript för att förbereda förkrypterade virtuella hårddiskar och andra uppgifter.
Note
Alla skript refererar till den senaste, icke-AAD-versionen av ADE, förutom där det anges.
PowerShell-exempelskript för Azure Disk Encryption
- Visa en lista över alla krypterade virtuella datorer i din prenumeration
Du hittar alla ADE-krypterade virtuella datorer och tilläggsversionen i alla resursgrupper som finns i en prenumeration med hjälp av Find_1passAdeVersion_VM.ps1 PowerShell-skript.
Alternativt visar dessa cmdletar alla ADE-krypterade virtuella datorer (men inte tilläggsversionen):
$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}
Visa en lista över alla krypterade VMSS-instanser i din prenumeration
Du kan hitta alla ADE-krypterade instanser i skaluppsättningar för virtuella datorer och tilläggsversionen i alla resursgrupper inom en prenumeration genom att använda PowerShell-skriptet Find_1passAdeVersion_VMSS.ps1.
Visa en lista över alla diskkrypteringshemligheter som används för att kryptera virtuella datorer i ett nyckelvalv
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Använda PowerShell-skriptet för förhandskrav för Azure Disk Encryption
Om du redan är bekant med förhandskraven för Azure Disk Encryption kan du använda PowerShell-skriptet för Förhandskrav för Azure Disk Encryption. Ett exempel på hur du använder det här PowerShell-skriptet finns i snabbstarten Kryptera en virtuell dator. Du kan ta bort kommentarerna från ett avsnitt i skriptet, från och med rad 211, för att kryptera alla diskar för befintliga virtuella datorer i en befintlig resursgrupp.
I följande tabell visas vilka parametrar du kan använda i PowerShell-skriptet:
| Parameter | Beskrivning | Obligatorisk? |
|---|---|---|
| $resourceGroupName | Namnet på resursgruppen som nyckelvalvet tillhör. Skriptet skapar en ny resursgrupp med det här namnet om det inte finns någon. | True |
| $keyVaultName | Namnet på nyckelvalvet där krypteringsnycklar ska placeras. Skriptet skapar ett nytt valv med det här namnet om det inte finns något. | True |
| $location | Placering av nyckelvalvet. Kontrollera att nyckelvalvet och de virtuella datorer som ska krypteras finns på samma plats. Hämta en platslista med Get-AzLocation. |
True |
| $subscriptionId | Identifierare för den Azure prenumeration som ska användas. Hämta ditt prenumerations-ID med Get-AzSubscription. |
True |
| $aadAppName | Namnet på det Microsoft Entra program som skriver hemligheter till Key Vault. Skriptet skapar ett nytt program med det här namnet om det inte finns något. Om den här appen redan finns skickar du parametern aadClientSecret till skriptet. | Falsk |
| $aadClientSecret | Klienthemligheten för den Microsoft Entra-applikation som skapades tidigare. | Falsk |
| $keyEncryptionKeyName | Namn på valfri nyckelkrypteringsnyckel i Key Vault. Skriptet skapar en ny nyckel med det här namnet om det inte finns någon. | Falsk |
Resource Manager-mallar
Kryptera eller dekryptera virtuella datorer utan en Microsoft Entra-app
- Aktivera diskkryptering på en befintlig eller kör en virtuell Windows-dator
- Inaktivera kryptering på en virtuell Windows-dator som körs
Kryptera eller dekryptera virtuella datorer med hjälp av en Microsoft Entra app
- Aktivera diskkryptering på en befintlig eller kör en virtuell Windows-dator
- Inaktivera kryptering på en virtuell Windows-dator som körs
- Skapa en ny krypterad hanterad disk från en förkrypterad VHD/lagringsblob – Skapar en ny krypterad hanterad disk från en förkrypterad virtuell hårddisk och motsvarande krypteringsinställningar.
Förbereda en förkrypterad virtuell Windows-hårddisk
I följande avsnitt beskrivs hur du förbereder en förkrypterad Windows VHD för distribution som en krypterad virtuell hårddisk i Azure IaaS. Använd den här informationen för att förbereda och starta en ny Windows virtuell dator (VHD) på Azure Site Recovery eller Azure. Mer information om hur du förbereder och laddar upp en virtuell hårddisk finns i Ladda upp en generaliserad virtuell hårddisk och använd den för att skapa nya virtuella datorer i Azure.
Uppdatera grupppolicy för att tillåta icke-TPM (Trusted Platform Module) för OS-skydd
Konfigurera BitLocker Group Policy-inställningen BitLocker-diskkryptering, som du hittar under Lokal datorprincip>Datorkonfiguration>Administrativa mallar>Windows-komponenter. Ändra den här inställningen till Operativsystemenheter>Kräv ytterligare autentisering vid start>Tillåt BitLocker utan kompatibel TPM, som visas i följande figur:
Installera BitLocker-funktionskomponenter
För Windows Server 2012 och senare använder du följande kommando:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
För Windows Server 2008 R2 använder du följande kommando:
ServerManagerCmd -install BitLockers
Förbereda OS-volymen för BitLocker med hjälp av bdehdcfg
Om du vill komprimera OS-partitionen och förbereda datorn för BitLocker kör du bdehdcfg om det behövs:
bdehdcfg -target c: shrink -quiet
Skydda OS-volymen med hjälp av BitLocker
manage-bde Använd kommandot för att aktivera kryptering på startvolymen med hjälp av ett externt nyckelskydd. Placera även den externa nyckeln (.bek-filen) på den externa enheten eller volymen. Kryptering är aktiverat på system-/startvolymen efter nästa omstart.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Note
Förbered den virtuella datorn med en separat data-/resurs-VHD för att hämta den externa nyckeln med hjälp av BitLocker.
Ladda upp krypterad virtuell hårddisk till ett Azure Storage-konto
När BitLocker-kryptering har aktiverats måste den lokala krypterade virtuella hårddisken laddas upp till ditt lagringskonto.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Ladda upp hemligheten för den förkrypterade virtuella datorn till ditt nyckelvalv
Ladda upp diskkrypteringshemligheten som du fick tidigare som en hemlighet i nyckelvalvet. Det gör du genom att ge behörigheten att ange hemligheter och behörigheten wrap key till det konto som laddar upp hemligheterna.
# 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
Diskkrypteringsnyckel som inte är krypterad med en KEK
Om du vill konfigurera hemligheten i nyckelvalvet använder du Set-AzKeyVaultSecret. Lösenfrasen kodas som en base64-sträng och laddas sedan upp till nyckelvalvet. Kontrollera dessutom att följande taggar har angetts när du skapar hemligheten i nyckelvalvet.
# 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
$secretUrl Använd i nästa steg för att ansluta OS-disken utan att använda en KEK.
Diskkrypteringshemlighet krypterad med en KEK
Innan du laddar upp hemligheten till nyckelvalvet kan du kryptera den med hjälp av en nyckelkrypteringsnyckel. Använd wrap-API :et för att först kryptera hemligheten med hjälp av nyckelkrypteringsnyckeln. Utdata från den här wrap-åtgärden är en base64 URL-kodad sträng som du sedan kan ladda upp som en hemlighet med hjälp av cmdleten Set-AzKeyVaultSecret .
# 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
Använd $KeyEncryptionKey och $secretUrl i nästa steg för att ansluta OS-disken med hjälp av en KEK.
Ange en hemlig URL när du ansluter en OS-disk
Utan att använda en KEK
När du ansluter OS-disken skickar du $secretUrl. URL:en genereras i avsnittet "Hemlighet för diskkryptering som inte är krypterad med en KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Användning av en KEK
När du ansluter OS-disken skickar du $KeyEncryptionKey och $secretUrl. URL:en genereras i avsnittet "Hemlighet för diskkryptering krypterad med en 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