Compartilhar via


Restaurar chave e segredo do Cofre de Chaves para VMs criptografadas usando o Backup do Azure

Este artigo descreve como usar o Backup de VM do Azure para restaurar VMs (Máquinas Virtuais) criptografadas do Azure quando a chave e o segredo originais não estiverem disponíveis no Key Vault. Também é aplicável a cenários em que você deseja manter uma cópia separada da chave (Chave de Criptografia de Chave) e segredo (Chave de Criptografia do BitLocker) para a VM restaurada.

Observação

Recomendamos que você use o módulo Azure Az PowerShell para interagir com o Azure. Para começar, consulte Instalar o Microsoft Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, veja Migrar o Microsoft Azure PowerShell do AzureRM para o Az.

Pré-requisitos

Antes de começar a restaurar uma VM criptografada, verifique se os seguintes pré-requisitos são atendidos:

  • Backup de VMs criptografadas – as VMs criptografadas do Azure têm backup usando o Backup do Azure. Consulte o artigo Gerenciar backup e restauração de VMs do Azure usando o PowerShell para obter detalhes sobre como fazer backup das VMs do Azure criptografadas.
  • Configurar o Cofre de Chaves do Azure – garanta que o cofre de chaves ao qual as chaves e segredos precisam ser restaurados já esteja presente. Consulte o artigo Introdução ao Azure Key Vault para obter detalhes sobre o gerenciamento do cofre de chaves.
  • Restaurar disco – certifique-se de disparar o trabalho de restauração para restaurar discos para VM criptografada usando as etapas do PowerShell para que esse trabalho gere um arquivo JSON em sua conta de armazenamento contendo chaves e segredos para que a VM criptografada seja restaurada.

Obter a chave e o segredo do Backup do Azure

Observação

Depois que o disco for restaurado para a VM criptografada, verifique se:

  • $details são preenchidos com detalhes de trabalho de disco de restauração, conforme mencionado nas etapas do PowerShell na seção Restaurar os Discos
  • A VM deve ser criada de discos restaurados somente após a chave e o segredo serem restaurados para o cofre de chaves.

Consulte as propriedades do disco restaurado para obter os detalhes do trabalho.

$properties = $details.properties
$storageAccountName = $properties["Target Storage Account Name"]
$containerName = $properties["Config Blob Container Name"]
$encryptedBlobName = $properties["Encryption Info Blob Name"]

Defina o contexto de armazenamento do Azure e restaure o arquivo de configuração JSON que contém a chave e os detalhes de segredo da VM criptografada.

Set-AzCurrentStorageAccount -Name $storageaccountname -ResourceGroupName '<rg-name>'
$destination_path = 'C:\vmencryption_config.json'
Get-AzStorageBlobContent -Blob $encryptedBlobName -Container $containerName -Destination $destination_path
$encryptionObject = Get-Content -Path $destination_path  | ConvertFrom-Json

Restaurar chave

Depois que o arquivo JSON for gerado no caminho de destino mencionado, gere o arquivo de blob de chave usando o JSON e alimente-o no cmdlet restore key para colocar a chave (KEK) de volta no cofre de chaves.

$keyDestination = 'C:\keyDetails.blob'
[io.file]::WriteAllBytes($keyDestination, [System.Convert]::FromBase64String($encryptionObject.OsDiskKeyAndSecretDetails.KeyBackupData))
Restore-AzKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile $keyDestination

Restaurar segredo

Use o arquivo JSON gerado para obter o nome e o valor do segredo e alimentá-lo para definir o cmdlet secreto para colocar o segredo – BEK (Chave de Criptografia do BitLocker) de volta no cofre de chaves. Use esses cmdlets se a VM for criptografada usando BEK e KEK.

Use esses cmdlets se a do VM Windows for criptografada usando BEK e KEK.

$secretdata = $encryptionObject.OsDiskKeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA.BEK';'DiskEncryptionKeyEncryptionKeyURL' = $encryptionObject.OsDiskKeyAndSecretDetails.KeyUrl;'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $Secret -ContentType  'Wrapped BEK' -Tags $Tags

Use esses cmdlets se a VM do Linux for criptografada usando BEK e KEK.

$secretdata = $encryptionObject.OsDiskKeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'LinuxPassPhraseFileName';'DiskEncryptionKeyEncryptionKeyURL' = <Key_url_of_newly_restored_key>;'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $Secret -ContentType  'Wrapped BEK' -Tags $Tags

Use o arquivo JSON gerado para obter o nome e o valor do segredo e alimente-o no cmdlet set secret para colocar a chave (BEK) de volta no cofre de chaves. Use esses cmdlets se a VM for criptografada usando apenas BEK.

$secretDestination = 'C:\secret.blob'
[io.file]::WriteAllBytes($secretDestination, [System.Convert]::FromBase64String($encryptionObject.OsDiskKeyAndSecretDetails.KeyVaultSecretBackupData))
Restore-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -InputFile $secretDestination -Verbose

Observação

  • O valor para $secretname pode ser obtido referindo-se à saída de $encryptionObject.OsDiskKeyAndSecretDetails.SecretUrl e usando o texto depois de secrets/, por exemplo, a URL de segredo de saída é https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163 e o nome do segredo é B3284AAA-DAAA-4AAA-B393-60CAA848AAAA
  • O valor da marca DiskEncryptionKeyFileName é igual ao do nome do segredo.

Criar uma máquina virtual de um disco restaurado

Se você fizer backup da VM criptografada usando o Backup de VM do Azure, os cmdlets anteriores do PowerShell ajudarão você a restaurar a chave e o segredo de volta para o cofre de chaves. Depois de restaurá-los, veja o artigo Gerenciar backup e restauração de VMs do Azure usando o PowerShell para criar VMs criptografadas de disco, chave e segredo restaurados.

Abordagem herdada

A abordagem anterior funciona para todos os pontos de recuperação. No entanto, a abordagem antiga de obter informações de chave e segredo do ponto de recuperação seria válida para pontos de recuperação anteriores a 11 de julho de 2017 para VMs criptografadas usando BEK e KEK. Após o trabalho de restauração de disco ser concluído para a VM criptografada usando etapas do PowerShell, verifique se $rp é populado com um valor válido.

Restaurar chave (abordagem herdada)

Use os cmdlets a seguir para obter informações de chave (KEK) do ponto de recuperação e insira-as no cmdlet restore key (restaurar chave) para colocá-las de volta no cofre de chaves.

$rp1 = Get-AzRecoveryServicesBackupRecoveryPoint -RecoveryPointId $rp[0].RecoveryPointId -Item $backupItem -KeyFileDownloadLocation 'C:\Users\downloads'
Restore-AzureKeyVaultKey -VaultName '<target_key_vault_name>' -InputFile 'C:\Users\downloads'

Restaurar segredo (abordagem herdada)

Use os cmdlets a seguir para obter informações de segredo (BEK) do ponto de recuperação e insira-as no cmdlet set secret (definir segredo) para colocá-las de volta no cofre de chaves.

$secretname = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA'
$secretdata = $rp1.KeyAndSecretDetails.SecretData
$Secret = ConvertTo-SecureString -String $secretdata -AsPlainText -Force
$Tags = @{'DiskEncryptionKeyEncryptionAlgorithm' = 'RSA-OAEP';'DiskEncryptionKeyFileName' = 'B3284AAA-DAAA-4AAA-B393-60CAA848AAAA.BEK';'DiskEncryptionKeyEncryptionKeyURL' = 'https://mykeyvault.vault.azure.net:443/keys/KeyName/84daaac999949999030bf99aaa5a9f9';'MachineName' = 'vm-name'}
Set-AzKeyVaultSecret -VaultName '<target_key_vault_name>' -Name $secretname -SecretValue $secret -Tags $Tags -SecretValue $Secret -ContentType  'Wrapped BEK'

Observação

  • O valor para $secretname pode ser obtido referindo-se à saída de $rp1.KeyAndSecretDetails.SecretUrl e usando o texto depois de secrets/, por exemplo, a URL de segredo de saída é https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163 e o nome do segredo é B3284AAA-DAAA-4AAA-B393-60CAA848AAAA
  • O valor da marca DiskEncryptionKeyFileName é igual ao do nome do segredo.
  • O valor de DiskEncryptionKeyEncryptionKeyURL pode ser obtido do cofre de chaves depois de restaurar as chaves novamente e usar o cmdlet Get-AzKeyVaultKey

Próximas etapas

Depois de restaurar a chave e o segredo de volta para o cofre de chaves, consulte o artigo Gerenciar backup e restauração de VMs do Azure usando o PowerShell para criar VMs criptografadas com base em disco, chave e segredo restaurados.