Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Usługa Azure Disk Encryption ma zostać wycofana 15 września 2028 r. Do tej pory można nadal korzystać z usługi Azure Disk Encryption bez zakłóceń. 15 września 2028 r. obciążenia z obsługą programu ADE będą nadal działać, ale zaszyfrowane dyski nie będą mogły zostać odblokowane po ponownym uruchomieniu maszyny wirtualnej, co spowoduje przerwy w działaniu usługi.
Użyj szyfrowania na hoście dla nowych maszyn wirtualnych lub rozważ poufne rozmiary maszyn wirtualnych z szyfrowaniem dysków systemu operacyjnego na potrzeby obciążeń przetwarzania poufnego. Wszystkie maszyny wirtualne z obsługą programu ADE (w tym kopie zapasowe) muszą migrować do szyfrowania na hoście przed datą wycofania, aby uniknąć przerw w działaniu usługi. Aby uzyskać szczegółowe informacje, zobacz Migrowanie z usługi Azure Disk Encryption do szyfrowania na hoście .
Dotyczy: ✔️ maszyny wirtualne z systemem Windows
Ten artykuł zawiera przykładowe skrypty do przygotowywania wstępnie zaszyfrowanych dysków VHD i innych zadań.
Note
Wszystkie skrypty odnoszą się do najnowszej wersji programu ADE, która nie jest oparta na AAD, chyba że zaznaczono inaczej.
Przykładowe skrypty programu PowerShell dla usługi Azure Disk Encryption
- Wyświetlanie listy wszystkich zaszyfrowanych maszyn wirtualnych w ramach subskrypcji
Wszystkie maszyny wirtualne zaszyfrowane za pomocą programu ADE i wersję rozszerzenia można znaleźć we wszystkich grupach zasobów znajdujących się w subskrypcji przy użyciu skryptu programuFind_1passAdeVersion_VM.ps1 PowerShell.
Alternatywnie te polecenia cmdlet pokazują wszystkie maszyny wirtualne zaszyfrowane za pomocą programu ADE (ale nie wersję rozszerzenia):
$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}
Wyświetlanie listy wszystkich zaszyfrowanych wystąpień usługi VMSS w ramach subskrypcji
Wszystkie instancje zestawów skalowania maszyn wirtualnych zaszyfrowanych przy użyciu ADE oraz wersję rozszerzenia we wszystkich grupach zasobów w ramach subskrypcji można znaleźć przy użyciu skryptu programu PowerShell Find_1passAdeVersion_VMSS.ps1.
Lista wszystkich tajnych kluczy szyfrowania dysków używanych do szyfrowania maszyn wirtualnych w magazynie kluczy
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Korzystanie ze skryptu programu PowerShell dla wymagań wstępnych Azure Disk Encryption
Jeśli znasz już wymagania wstępne dotyczące usługi Azure Disk Encryption, możesz użyć skryptu programu PowerShell wymagań wstępnych usługi Azure Disk Encryption. Przykład użycia tego skryptu programu PowerShell znajdziesz w przewodniku „Szybki start: szyfrowanie maszyny wirtualnej”. Komentarze można usunąć z sekcji skryptu, począwszy od wiersza 211, aby zaszyfrować wszystkie dyski dla istniejących maszyn wirtualnych w istniejącej grupie zasobów.
W poniższej tabeli przedstawiono, których parametrów można użyć w skrypcie programu PowerShell:
| Parameter | Opis | Obowiązkowe? |
|---|---|---|
| $resourceGroupName | Nazwa grupy zasobów, do której należy magazyn kluczy. Skrypt tworzy nową grupę zasobów o tej nazwie, jeśli nie istnieje. | True |
| $keyVaultName | Nazwa magazynu kluczy, w którym należy umieścić klucze szyfrowania. Skrypt tworzy nowy sejf o tej nazwie, jeśli jeszcze nie istnieje. | True |
| $location | Lokalizacja magazynu kluczy. Upewnij się, że magazyn kluczy i maszyny wirtualne do szyfrowania znajdują się w tej samej lokalizacji. Pobierz listę lokalizacji za pomocą polecenia Get-AzLocation. |
True |
| $subscriptionId | Identyfikator subskrypcji Azure do użycia. Uzyskaj identyfikator subskrypcji za pomocą Get-AzSubscription. |
True |
| $aadAppName | Nazwa aplikacji Microsoft Entra, która zapisuje wpisy tajne do Key Vault. Skrypt tworzy nową aplikację o tej nazwie, jeśli nie istnieje. Jeśli ta aplikacja już istnieje, przekaż parametr aadClientSecret do skryptu. | Fałsz |
| $aadClientSecret | Klucz tajny klienta wcześniej utworzonej aplikacji Microsoft Entra. | Fałsz |
| $keyEncryptionKeyName | Nazwa opcjonalnego klucza szyfrowania klucza w Key Vault. Skrypt tworzy nowy klucz o tej nazwie, jeśli nie istnieje. | Fałsz |
Szablony „Resource Manager”
Szyfrowanie lub odszyfrowywanie maszyn wirtualnych bez aplikacji Firmy Microsoft Entra
- Włączanie szyfrowania dysków na istniejącej lub uruchomionej maszynie wirtualnej z systemem Windows
- Wyłącz szyfrowanie na uruchomionej maszynie wirtualnej z systemem Windows
Szyfrowanie lub odszyfrowywanie maszyn wirtualnych przy użyciu aplikacji Microsoft Entra
- Włączanie szyfrowania dysków na istniejącej lub uruchomionej maszynie wirtualnej z systemem Windows
- Wyłącz szyfrowanie na uruchomionej maszynie wirtualnej z systemem Windows
- Utwórz nowy zaszyfrowany dysk zarządzany na podstawie wstępnie zaszyfrowanego wirtualnego dysku twardego/obiektu blob magazynu — tworzy nowy zaszyfrowany dysk zarządzany ze wstępnie zaszyfrowanego dysku VHD i odpowiadających mu ustawień szyfrowania.
Przygotowywanie uprzednio zaszyfrowanego wirtualnego dysku twardego systemu Windows
W poniższych sekcjach wyjaśniono, jak przygotować wstępnie zaszyfrowany dysk VHD Windows do wdrożenia jako zaszyfrowany wirtualny dysk twardy w usłudze Azure IaaS. Skorzystaj z tych informacji, aby przygotować i uruchomić nową maszynę wirtualną Windows (VHD) na Azure Site Recovery lub Azure. Aby uzyskać więcej informacji na temat przygotowywania i przesyłania dysku VHD, zobacz Przekazywanie uogólnionego dysku VHD i używanie go do tworzenia nowych maszyn wirtualnych na platformie Azure.
Zaktualizuj zasady grupy, aby umożliwić ochronę systemu operacyjnego bez TPM
Skonfiguruj ustawienie Zasad grupy Szyfrowanie dysków funkcją BitLocker, które znajdziesz w obszarze Lokalna polityka komputera>Konfiguracja komputera>Szablony administracyjne>Składniki systemu Windows. Zmień to ustawienie na Dyski systemu operacyjnego>, Wymagaj dodatkowego uwierzytelniania podczas uruchamiania, > oraz Zezwalaj na funkcję BitLocker bez zgodnego modułu TPM, jak pokazano na poniższej grafice:
Instalowanie składników funkcji BitLocker
W przypadku systemu Windows Server 2012 lub nowszego użyj następującego polecenia:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
W systemie Windows Server 2008 R2 użyj następującego polecenia:
ServerManagerCmd -install BitLockers
Przygotuj wolumin systemu operacyjnego dla funkcji BitLocker, używając polecenia bdehdcfg
Aby skompresować partycję systemu operacyjnego i przygotować maszynę do funkcji BitLocker, w razie potrzeby wykonaj polecenie bdehdcfg :
bdehdcfg -target c: shrink -quiet
Ochrona woluminu systemu operacyjnego przy użyciu funkcji BitLocker
manage-bde Użyj polecenia , aby włączyć szyfrowanie na woluminie rozruchowym przy użyciu funkcji ochrony klucza zewnętrznego. Umieść również klucz zewnętrzny (plik ".bek") na dysku zewnętrznym lub woluminie. Szyfrowanie jest włączone na woluminie systemowym/rozruchowym po następnym ponownym uruchomieniu.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Note
Przygotuj maszynę wirtualną z oddzielnym dyskiem VHD na dane/zasoby, aby uzyskać zewnętrzny klucz za pomocą BitLocker.
Przekazywanie zaszyfrowanego wirtualnego dysku twardego do konta usługi Azure Storage
Po włączeniu szyfrowania BitLocker należy przekazać lokalny zaszyfrowany wirtualny dysk twardy do konta magazynu.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Prześlij tajemnicę dla wstępnie zaszyfrowanej maszyny wirtualnej do magazynu kluczy
Prześlij sekret szyfrowania dysku, który został wcześniej dodany jako sekret w swoim magazynie kluczy. W tym celu przyznaj kontu, które przesyła wpisy tajne, uprawnienie set secret oraz uprawnienie wrapKey.
# 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
Klucz tajny szyfrowania dysków nie jest szyfrowany przy użyciu klucza KEK
Aby skonfigurować tajemnicę w magazynie kluczy, użyj polecenia Set-AzKeyVaultSecret. Hasło jest kodowane jako ciąg base64, a następnie przekazywane do magazynu kluczy. Ponadto upewnij się, że następujące tagi są ustawione podczas tworzenia tajemnicy w magazynie kluczy.
# 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
Użyj $secretUrl w następnym kroku, aby dołączyć dysk systemowy bez używania klucza KEK.
Tajny klucz szyfrowania dysku zaszyfrowany przy użyciu klucza KEK
Zanim przekażesz sekret do magazynu kluczy, możesz opcjonalnie zaszyfrować go przy użyciu klucza szyfrującego. Użyj interfejsu API zawijania, aby najpierw zaszyfrować klucz tajny przy użyciu klucza szyfrowania klucza. Dane wyjściowe tej operacji wrapowania to ciąg zakodowany w base64 w formacie URL, który następnie można przekazać jako sekret przy użyciu polecenia cmdlet 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
Użyj $KeyEncryptionKey i $secretUrl w następnym kroku, aby dołączyć dysk systemowy przy użyciu klucza KEK.
Określanie tajnego adresu URL podczas dołączania dysku systemu operacyjnego
Bez używania klucza KEK
Podczas dołączania dysku systemu operacyjnego przekaż polecenie $secretUrl. Adres URL jest generowany w sekcji „Klucz tajny szyfrowania dysku, który nie jest zaszyfrowany za pomocą klucza KEK”.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Korzystanie z KEK
Gdy dołączasz dysk systemu operacyjnego, przekaż $KeyEncryptionKey i $secretUrl. URL jest generowany w sekcji „Tajny klucz szyfrowania dysku zaszyfrowany za pomocą klucza 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