Restaurar a chave do Key Vault e o segredo para VMs encriptadas utilizando o Azure Backup
Este artigo fala sobre como usar o Backup de VM do Azure para executar a restauração de VMs do Azure criptografadas, se sua chave e seu segredo não existirem no cofre de chaves. Essas etapas também podem ser usadas se você quiser manter uma cópia separada da chave (Chave de Criptografia de Chave) e do segredo (Chave de Criptografia BitLocker) para a VM restaurada.
Nota
Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.
Pré-requisitos
- Backup de VMs criptografadas - O backup das VMs criptografadas do Azure foi feito 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 de VMs do Azure criptografadas.
- Configurar o Cofre de Chaves do Azure – Certifique-se de que o cofre de chaves para o qual as chaves e segredos precisam ser restaurados já esteja presente. Consulte o artigo Introdução ao Cofre de Chaves do Azure para obter detalhes sobre o gerenciamento do cofre de chaves.
- Restaurar disco - Certifique-se de ter acionado o trabalho de restauração para restaurar discos para VM criptografada usando as etapas do PowerShell. Isso ocorre porque esse trabalho gera um arquivo JSON em sua conta de armazenamento contendo chaves e segredos para a VM criptografada a ser restaurada.
Obter chave e segredo do Backup do Azure
Nota
Depois que o disco for restaurado para a VM criptografada, verifique se:
- $details é preenchido com detalhes do trabalho de restauração do disco, conforme mencionado nas etapas do PowerShell na seção Restaurar os discos
- A VM deve ser criada a partir de discos restaurados somente depois que a chave e o segredo forem restaurados no 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 contendo detalhes de chave e segredo para 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
Chave de restauração
Depois que o arquivo JSON for gerado no caminho de destino mencionado acima, gere o arquivo de blob de chave a partir do JSON e alimente-o para restaurar o cmdlet de chave 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 acima para obter nome e valor secretos e alimente-o para definir o cmdlet secret para colocar o segredo (BEK) de volta no cofre de chaves. Use esses cmdlets se sua VM estiver criptografada usando BEK e KEK.
Use esses cmdlets se sua VM do Windows estiver 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 sua VM Linux estiver 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 acima para obter nome e valor secretos e alimente-o para definir o cmdlet secret para colocar o segredo (BEK) de volta no cofre de chaves. Use esses cmdlets se sua VM estiver criptografada usando somente 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
Nota
- O valor para $secretname pode ser obtido referindo-se à saída de $encryptionObject.OsDiskKeyAndSecretDetails.SecretUrl e usando texto após secrets/ Por exemplo, a URL do 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 tag DiskEncryptionKeyFileName é o mesmo que o nome secreto.
Criar máquina virtual a partir do disco restaurado
Se você fez backup de VM criptografada usando o Backup de VM do Azure, os cmdlets do PowerShell mencionados acima ajudam a restaurar a chave e o segredo de volta para o cofre de chaves. Depois de restaurá-los, consulte o artigo Gerenciar backup e restauração de VMs do Azure usando o PowerShell para criar VMs criptografadas a partir de disco, chave e segredo restaurados.
Abordagem herdada
A abordagem acima mencionada funcionaria para todos os pontos de recuperação. No entanto, a abordagem mais antiga de obter informações secretas e de chave 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. Quando o trabalho de restauração do disco estiver concluído para VM criptografada usando as etapas do PowerShell, verifique se $rp está preenchido com um valor válido.
Chave de restauração (abordagem herdada)
Use os cmdlets a seguir para obter informações de chave (KEK) do ponto de recuperação e alimentá-las para restaurar o cmdlet de chave e 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 secretas (BEK) do ponto de recuperação e alimentá-las para definir o cmdlet secreto 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'
Nota
- O valor para $secretname pode ser obtido referindo-se à saída de $rp 1. KeyAndSecretDetails.SecretUrl e usando texto após segredos/ Por exemplo, a URL do segredo de saída é
https://keyvaultname.vault.azure.net/secrets/B3284AAA-DAAA-4AAA-B393-60CAA848AAAA/xx000000xx0849999f3xx30000003163
e o nome secreto é B3284AAA-DAAA-4AAA-B393-60CAA848AAAA - O valor da tag DiskEncryptionKeyFileName é o mesmo que o nome secreto.
- O valor de DiskEncryptionKeyEncryptionKeyURL pode ser obtido do cofre de chaves depois de restaurar as chaves novamente e usar o cmdlet Get-AzureKeyVaultKey
Próximos passos
Depois de restaurar a chave e o segredo de volta ao cofre de chaves, consulte o artigo Gerenciar backup e restauração de VMs do Azure usando o PowerShell para criar VMs criptografadas a partir de disco, chave e segredo restaurados.