Ukázkové skripty pro službu Azure Disk Encryption
Platí pro: ✔️ Virtuální počítače s Windows
Tento článek obsahuje ukázkové skripty pro přípravu předšifrovaných virtuálních pevných disků a dalších úloh.
Poznámka:
Všechny skripty odkazují na nejnovější verzi ADE bez AAD s výjimkou případů, kdy je uvedeno.
Ukázkové skripty PowerShellu pro Azure Disk Encryption
Výpis všech šifrovaných virtuálních počítačů ve vašem předplatném
Pomocí tohoto skriptu PowerShellu najdete všechny virtuální počítače šifrované pomocí ADE a verze rozšíření ve všech skupinách prostředků, které jsou přítomné v předplatném.
Alternativně tyto rutiny zobrazí všechny virtuální počítače šifrované pomocí ADE (ale ne verze rozšíření):
$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}
Výpis všech šifrovaných instancí VMSS ve vašem předplatném
Pomocí tohoto skriptu PowerShellu najdete všechny instance škálovací sady virtuálních počítačů šifrované pomocí ADE a verze rozšíření ve všech skupinách prostředků, které jsou přítomné v předplatném.
Výpis všech tajných kódů šifrování disků používaných k šifrování virtuálních počítačů v trezoru klíčů
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Použití skriptu PowerShellu pro požadavky služby Azure Disk Encryption
Pokud už znáte požadavky služby Azure Disk Encryption, můžete použít skript PowerShellu s požadavky služby Azure Disk Encryption. Příklad použití tohoto skriptu PowerShellu najdete v rychlém startu Šifrování virtuálního počítače. Komentáře můžete odebrat z oddílu skriptu počínaje řádkem 211 a zašifrovat všechny disky pro existující virtuální počítače v existující skupině prostředků.
Následující tabulka ukazuje, které parametry je možné použít ve skriptu PowerShellu:
Parametr | Popis | Povinné? |
---|---|---|
$resourceGroupName | Název skupiny prostředků, do které patří služba KeyVault. Pokud neexistuje, vytvoří se nová skupina prostředků s tímto názvem. | True |
$keyVaultName | Název služby KeyVault, do které se mají umístit šifrovací klíče. Pokud neexistuje, vytvoří se nový trezor s tímto názvem. | True |
$location | Umístění služby KeyVault Ujistěte se, že služba KeyVault a virtuální počítače, které se mají šifrovat, jsou ve stejném umístění. Seznam umístění získáte pomocí rutiny Get-AzLocation . |
True |
$subscriptionId | Identifikátor předplatného Azure, které se má použít. Své ID předplatného můžete získat pomocí rutiny Get-AzSubscription . |
True |
$aadAppName | Název aplikace Microsoft Entra, která se použije k zápisu tajných kódů do služby KeyVault. Pokud aplikace se zadaným názvem neexistuje, vytvoří se nová. Pokud tato aplikace již existuje, předejte do skriptu parametr aadClientSecret. | False |
$aadClientSecret | Tajný klíč klienta aplikace Microsoft Entra, která byla vytvořena dříve. | False |
$keyEncryptionKeyName | Název volitelného šifrovacího klíče ve službě KeyVault Pokud neexistuje, vytvoří se nový klíč s tímto názvem. | False |
Šablony Resource Manageru
Šifrování nebo dešifrování virtuálních počítačů bez aplikace Microsoft Entra
- Povolení šifrování disků na existujícím nebo spuštěném virtuálním počítači s Windows
- Zakázání šifrování na spuštěném virtuálním počítači s Windows
Šifrování nebo dešifrování virtuálních počítačů pomocí aplikace Microsoft Entra (předchozí verze)
- Povolení šifrování disků na existujícím nebo spuštěném virtuálním počítači s Windows
- Zakázání šifrování na spuštěném virtuálním počítači s Windows
- Vytvoření nového šifrovaného spravovaného disku z předem šifrovaného virtuálního pevného disku nebo objektu blob úložiště
- Vytvoří nový šifrovaný spravovaný disk, který poskytuje předšifrovaný virtuální pevný disk a odpovídající nastavení šifrování.
Příprava předšifrovaného virtuálního pevného disku s Windows
Následující části jsou nezbytné k přípravě předšifrovaného virtuálního pevného disku s Windows pro nasazení jako šifrovaného virtuálního pevného disku v Azure IaaS. Informace slouží k přípravě a spuštění nového virtuálního počítače s Windows (VHD) v Azure Site Recovery nebo Azure. Další informace o přípravě a nahrání virtuálního pevného disku najdete v tématu Nahrání generalizovaného virtuálního pevného disku a jeho použití k vytvoření nových virtuálních počítačů v Azure.
Aktualizace zásad skupiny tak, aby umožňovala ochranu operačního systému bez čipu TPM
Nakonfigurujte nastavení zásad skupiny BitLockeru pro nástroj BitLocker Drive Encryption, které najdete v části Součásti>systému Windows Konfigurace počítače s místní>zásadou>počítače. Změňte toto nastavení na Jednotky>operačního systému Vyžadovat další ověřování při spuštění>Povolit BitLocker bez kompatibilního čipu TPM, jak je znázorněno na následujícím obrázku:
Instalace součástí funkcí nástroje BitLocker
Pro Windows Server 2012 a novější použijte následující příkaz:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
V systému Windows Server 2008 R2 použijte následující příkaz:
ServerManagerCmd -install BitLockers
Příprava svazku operačního systému pro BitLocker pomocí bdehdcfg
Pokud chcete zkomprimovat oddíl operačního systému a připravit počítač pro BitLocker, v případě potřeby spusťte bdehdcfg :
bdehdcfg -target c: shrink -quiet
Ochrana svazku operačního systému pomocí Nástroje BitLocker
manage-bde
Pomocí příkazu povolte šifrování spouštěcího svazku pomocí ochrany externím klíčem. Umístěte také externí klíč (soubor .bek) na externí jednotku nebo svazek. Šifrování se povolí na systémovém nebo spouštěcím svazku po dalším restartování.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Poznámka:
Připravte virtuální počítač pomocí samostatného virtuálního pevného disku s daty a prostředky pro získání externího klíče pomocí Nástroje BitLocker.
Nahrání šifrovaného virtuálního pevného disku do účtu úložiště Azure
Po povolení šifrování BitLockeru se místní šifrovaný virtuální pevný disk musí nahrát do vašeho účtu úložiště.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Nahrání tajného klíče pro předšifrovaný virtuální počítač do trezoru klíčů
Tajný klíč pro šifrování disku, který jste získali dříve, se musí nahrát jako tajný kód ve vašem trezoru klíčů. K tomu musíte udělit oprávnění k nastavení tajných kódů a oprávnění k klíči wrapkey účtu, který bude tajné kódy nahrávat.
# 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
Tajný klíč šifrování disku není šifrovaný pomocí klíče KEK
K nastavení tajného kódu v trezoru klíčů použijte Set-AzKeyVaultSecret. Heslo se zakóduje jako řetězec base64 a pak se nahraje do trezoru klíčů. Kromě toho se ujistěte, že při vytváření tajného kódu v trezoru klíčů jsou nastavené následující značky.
# 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
Použijte v dalším kroku pro připojení disku s operačním systémem bez použití klíče KEK.
Tajný kód šifrování disku šifrovaný pomocí klíče KEK
Než tajný klíč nahrajete do trezoru klíčů, můžete ho volitelně zašifrovat pomocí šifrovacího klíče klíče. Pomocí zalamovacího rozhraní API nejprve zašifrujte tajný klíč pomocí šifrovacího klíče. Výstupem této operace zabalení je řetězec kódovaný adresou URL base64, který pak můžete nahrát jako tajný kód pomocí rutiny 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 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
Použijte $KeyEncryptionKey
a $secretUrl
v dalším kroku pro připojení disku s operačním systémem pomocí klíče KEK.
Zadání adresy URL tajného kódu při připojení disku s operačním systémem
Bez použití klíče KEK
Při připojování disku s operačním systémem je potřeba předat $secretUrl
. Adresa URL se vygenerovala v části Tajný klíč pro šifrování disků, který není šifrovaný pomocí klíče KEK.
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Použití klíče KEK
Když připojíte disk s operačním systémem, předejte $KeyEncryptionKey
a $secretUrl
. Adresa URL se vygenerovala v části "Tajný kód šifrování disku šifrovaný pomocí klíče 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