Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
O Azure Disk Encryption está programado para ser descontinuado a 15 de setembro de 2028. Até essa data, pode continuar a usar o Azure Disk Encryption sem interrupções. A 15 de setembro de 2028, cargas de trabalho com ADE continuarão a funcionar, mas os discos encriptados não conseguirão desbloquear após o reinício da VM, resultando em interrupção do serviço.
Use encriptação no host para novas VMs. Todas as VMs habilitadas por ADE (incluindo backups) devem migrar para encriptação no host antes da data de desativação para evitar interrupções do serviço. Consulte Migrar de Encriptação de Disco Azure para Encriptação no Host para mais detalhes.
Aplica-se a: ✔️ Windows VMs
Este artigo fornece scripts de exemplo para preparar VHDs pré-criptografados e outras tarefas.
Note
Todos os scripts referem-se à versão mais recente, não AAD do ADE, exceto onde indicado.
Exemplos de scripts do PowerShell para a Criptografia de Disco do Azure
Listar todas as VMs criptografadas em sua assinatura
Você pode encontrar todas as VMs criptografadas pelo ADE e a versão da extensão, em todos os grupos de recursos presentes em uma assinatura, usando esse script do PowerShell.
Como alternativa, esses cmdlets mostrarão todas as VMs criptografadas pelo ADE (mas não a versão da extensão):
$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}Listar todas as instâncias criptografadas do VMSS em sua assinatura
Você pode encontrar todas as instâncias de Conjuntos de Escala de Máquina Virtual criptografados pelo ADE e a versão de extensão, em todos os grupos de recursos presentes em uma assinatura, usando esse script do PowerShell.
Listar todos os segredos de criptografia de disco usados para criptografar VMs em um cofre de chaves
Get-AzKeyVaultSecret -VaultName $KeyVaultName | where {$_.Tags.ContainsKey('DiskEncryptionKeyFileName')} | format-table @{Label="MachineName"; Expression={$_.Tags['MachineName']}}, @{Label="VolumeLetter"; Expression={$_.Tags['VolumeLetter']}}, @{Label="EncryptionKeyURL"; Expression={$_.Id}}
Utilização do script PowerShell de pré-requisitos de Encriptação de Discos Azure
Se você já estiver familiarizado com os pré-requisitos para a Criptografia de Disco do Azure, poderá usar o script PowerShell de pré-requisitos da Criptografia de Disco do Azure. Para obter um exemplo de como usar esse script do PowerShell, consulte o Guia de início rápido Criptografar uma VM. Você pode remover os comentários de uma seção do script, começando na linha 211, para criptografar todos os discos para VMs existentes em um grupo de recursos existente.
A tabela a seguir mostra quais parâmetros podem ser usados no script do PowerShell:
| Parameter | Description | Mandatory? |
|---|---|---|
| $resourceGroupName | Nome do grupo de recursos ao qual o KeyVault pertence. Um novo grupo de recursos com este nome será criado se não estiver presente. | True |
| $keyVaultName | Nome do KeyVault no qual as chaves de criptografia devem ser colocadas. Um cofre novo com este nome será criado se ainda não existir. | True |
| $location | Localização do KeyVault. Verifique se o KeyVault e as VMs a serem criptografadas estão no mesmo local. Obtenha uma lista de locais com o Get-AzLocation. |
True |
| $subscriptionId | Identificador da assinatura do Azure a ser usada. Pode obter o seu ID de Subscrição com Get-AzSubscription. |
True |
| $aadAppName | Nome do aplicativo Microsoft Entra que será usado para gravar segredos no KeyVault. Um novo aplicativo com este nome será criado se não existir. Se esse aplicativo já existir, passe o parâmetro aadClientSecret para o script. | False |
| $aadClientSecret | Segredo do cliente da aplicação Microsoft Entra que foi criada anteriormente. | False |
| $keyEncryptionKeyName | Nome da chave de criptografia de chave opcional no KeyVault. Uma nova chave com este nome será criada se não existir. | False |
Modelos do Resource Manager
Criptografar ou descriptografar VMs sem um aplicativo Microsoft Entra
- Habilitar a criptografia de disco em uma VM do Windows existente ou em execução
- Desabilitar a criptografia em um de VM do Windows em execução
Criptografar ou descriptografar VMs com uma aplicação Microsoft Entra (versão anterior)
- Habilitar a criptografia de disco em uma VM do Windows existente ou em execução
- Desabilitar a criptografia em um de VM do Windows em execução
-
Criar um novo disco gerenciado criptografado a partir de um VHD/blob de armazenamento pré-criptografado
- Cria um novo disco gerido criptografado com base num VHD pré-criptografado e nas suas configurações de criptografia correspondentes.
Preparar um VHD do Windows pré-criptografado
As seções a seguir são necessárias para preparar um VHD do Windows pré-criptografado para implantação como um VHD criptografado na IaaS do Azure. Use as informações para preparar e inicializar uma nova VM do Windows (VHD) no Azure Site Recovery ou no Azure. Para obter mais informações sobre como preparar e carregar um VHD, consulte Carregar um VHD generalizado e usá-lo para criar novas VMs no Azure.
Atualizar a política de grupo para permitir sem TPM para proteção do sistema operativo
Configure a definição da Política de Grupo do BitLocker Criptografia de Unidade de Disco BitLocker, que pode ser encontrada em Política do Computador Local>Configuração do Computador>Modelos Administrativos>Componentes do Windows. Altere esta configuração para Unidades do Sistema Operacional >>, como ilustrado na figura seguinte:
Instalar componentes de recursos do BitLocker
Para Windows Server 2012 e versões posteriores, use o seguinte comando:
dism /online /Enable-Feature /all /FeatureName:BitLocker /quiet /norestart
Para o Windows Server 2008 R2, use o seguinte comando:
ServerManagerCmd -install BitLockers
Preparar o volume do SO para o BitLocker utilizando bdehdcfg
Para compactar a partição do sistema operacional e preparar a máquina para o BitLocker, execute o bdehdcfg se necessário:
bdehdcfg -target c: shrink -quiet
Proteger o volume do SO utilizando o BitLocker
Use o manage-bde comando para habilitar a criptografia no volume de inicialização usando um protetor de chave externo. Coloque também a chave externa (arquivo .bek) na unidade externa ou no volume. A criptografia é ativada no volume do sistema/de arranque após a próxima reinicialização.
manage-bde -on %systemdrive% -sk [ExternalDriveOrVolume]
reboot
Note
Prepare a VM com um VHD de dados/recurso separado para obter a chave externa usando o BitLocker.
Carregar VHD criptografado em uma conta de armazenamento do Azure
Depois que a criptografia BitLocker estiver habilitada, o VHD criptografado local precisará ser carregado em sua conta de armazenamento.
Add-AzVhd [-Destination] <Uri> [-LocalFilePath] <FileInfo> [[-NumberOfUploaderThreads] <Int32> ] [[-BaseImageUriToPatch] <Uri> ] [[-OverWrite]] [ <CommonParameters>]
Carregue o segredo da VM pré-encriptada para o cofre de chaves
O segredo de criptografia de disco obtido anteriormente deve ser carregado como um segredo no cofre de chaves. Para fazer isso, você deve conceder a permissão de segredo definido e a permissão de chave de encapsulamento para a conta que carregará os segredos.
# 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
Segredo de criptografia de disco não criptografado com um KEK
Para configurar o segredo no cofre de chaves, use Set-AzKeyVaultSecret. A frase secreta é codificada como uma cadeia de caracteres base64 e, em seguida, carregada para o cofre de chaves. Além disso, certifique-se de que as seguintes tags estão definidas quando você cria o segredo no cofre de chaves.
# 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
Use o $secretUrl na próxima etapa para conectar o disco do sistema operacional sem usar o KEK.
Segredo de criptografia de disco criptografado com um KEK
Antes de carregar o segredo para o cofre de chaves, você pode, opcionalmente, criptografá-lo usando uma chave de criptografia de chave. Use a API wrap para primeiro criptografar o segredo usando a chave de criptografia de chave. A saída dessa operação de encapsulamento é uma cadeia de caracteres codificada por URL base64, que você pode carregar como um segredo usando o 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 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
Use $KeyEncryptionKey e $secretUrl na próxima etapa para conectar o disco do sistema operacional usando o KEK.
Especifique um URL secreto ao anexar um disco do SO
Sem usar um KEK
Enquanto estás a anexar o disco do sistema operativo, precisas passar $secretUrl. O URL foi gerado na seção "Segredo de criptografia de disco não criptografado com um KEK".
Set-AzVMOSDisk `
-VM $VirtualMachine `
-Name $OSDiskName `
-SourceImageUri $VhdUri `
-VhdUri $OSDiskUri `
-Windows `
-CreateOption FromImage `
-DiskEncryptionKeyVaultId $KeyVault.ResourceId `
-DiskEncryptionKeyUrl $SecretUrl
Usando um KEK
Ao anexares o disco do sistema operativo, passa $KeyEncryptionKey e $secretUrl. O URL foi gerado na seção "Segredo de criptografia de disco criptografado com um 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