Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 na hospedagem para novas VMs, ou considere tamanhos de VM confidenciais com encriptação do disco do SO para workloads de computação confidencial. 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.
Nota
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
Pode encontrar todas as VMs encriptadas por ADE e a versão da extensão, em todos os grupos de recursos presentes numa subscrição, usando o script PowerShellFind_1passAdeVersion_VM.ps1.
Alternativamente, estes cmdlets mostram todas as VMs encriptadas por 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
Pode encontrar todas as instâncias de conjuntos de dimensionamento de máquinas virtuais encriptadas com ADE, bem como a versão da extensão, em todos os grupos de recursos presentes numa subscrição, utilizando o script do PowerShell Find_1passAdeVersion_VMSS.ps1.
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 seguinte mostra quais os parâmetros que podes usar no script PowerShell:
| Parâmetro | Descrição | Obrigatório? |
|---|---|---|
| $resourceGroupName | Nome do grupo de recursos a que pertence o cofre de chaves. O script cria um novo grupo de recursos com este nome, caso não exista nenhum. | Verdadeiro |
| $keyVaultName | Nome do cofre de chaves onde colocar as chaves de encriptação. O script cria um novo cofre com este nome se não existir um. | Verdadeiro |
| $location | Localização do cofre de chaves. Certifique-se de que o cofre de chaves e as VMs a encriptar estão no mesmo local. Obtenha uma lista de locais com o Get-AzLocation. |
Verdadeiro |
| $subscriptionId | Identificador da subscrição Azure a utilizar. Obtenha o seu ID de subscrição com Get-AzSubscription. |
Verdadeiro |
| $aadAppName | Nome da aplicação Microsoft Entra que escreve segredos no Key Vault. O script cria uma nova aplicação com este nome se não existir uma. Se esta aplicação já existir, passa o parâmetro aadClientSecret para o script. | Falso |
| $aadClientSecret | Segredo do cliente da aplicação do Microsoft Entra criada anteriormente. | Falso |
| $keyEncryptionKeyName | Nome da chave opcional de encriptação de chaves no Key Vault. O script cria uma nova chave com este nome se não existir uma. | Falso |
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
- Desativar a criptografia em uma VM do Windows em execução
Encripte ou desencripte VMs usando uma aplicação Microsoft Entra
- Habilitar a criptografia de disco em uma VM do Windows existente ou em execução
- Desativar a criptografia em uma VM do Windows em execução
- Criar um novo disco gerido encriptado a partir de um VHD/blob de armazenamento pré-encriptado - Cria um novo disco gerido encriptado a partir de um VHD pré-encriptado e das correspondentes definições de encriptação.
Preparar um VHD do Windows pré-criptografado
As secções seguintes explicam como preparar um VHD Windows pré-encriptado para implementação como um VHD encriptado no Azure IaaS. Use esta informação para preparar e arrancar uma VM Windows (VHD) limpa no Azure Site Recovery ou Azure. Para 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 ativar a encriptação no volume de arranque 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
Nota
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
Carrega o segredo de encriptação do disco que já obtiveste como segredo no teu cofre de chaves. Para isso, conceda à conta que carrega os segredos a permissão para definir segredos e a permissão 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
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
Utilize o $secretUrl no passo seguinte para anexar o disco do sistema operativo sem utilizar uma 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. Utilize a API de encapsulamento para primeiro encriptar o segredo utilizando a chave de encriptação de chaves. 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 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
Use $KeyEncryptionKey e $secretUrl no passo seguinte para ligar o disco do sistema operativo usando um KEK.
Especifique um URL secreto ao anexar um disco do SO
Sem usar um KEK
Ao anexar o disco do sistema operativo, indique $secretUrl. A URL é gerada na secção intitulada "Segredo de encriptação do disco não encriptado com uma 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 endereço URL é gerado na secção "Segredo de encriptação do disco encriptado com uma 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