[bing_translator]
Transparent Data Encryption (TDE) vem por padrão habilitado quando você cria um novo database no Azure SQL Database.
TDE não é mais uma novidade porem eu tenho visto que é pouco explorada (minha percepção). Se predente usar TDE on-premise vale a pena a leitura no post anterior.
Habilitar ou desabilitar TDE no Azure SQL Database é simplesmente um click para ON ou OFF e a Microsoft faz tudo para você! Simples né, porem algumas perguntas vinham em relação a esse gerenciamento, por exemplo, como é realizado o gerenciamento de chaves ou porque apenas certificado poderiam ser usados.
Com isso em mente a Microsoft disponibilizou uma nova opção: Bring Your Own Key. Com certeza isso faz muita diferença uma vez que posso ter o controle maior sobre as minhas chaves e posso aplicar a política definida pela minha empresa. Sendo assim agora eu posso estar cumprindo as conformidades de órgãos regulamentadores com mais transparência.
Bring Your Own Key
A minha primeira tentativa foi utilizar o Azure Portal para criar todos os passos necessários desde a criação de um novo servidor, key vault e key.
Key Vault
Na blade para criar o key vault começaram meus problemas.
Ao tentar adicionar um acesso para o meu “logical server” eu não pude encontra-lo. Mas a pergunta era, porque não?!
Voltei a ler a documentação e tentei entender melhor como TDE suporta BYOK.
O servidor logico precisa gerar e assinar uma identidade no Azure Active Directory, mas o Azure Portal não me dá essa opção quando estou criando o servidor.
Não tem problema, vamos para o PowerShell.
Set-AzureRmSqlServer ` -ResourceGroupName TDE ` -ServerName tdebalabuch ` -AssignIdentity
Eu não precisei apagar e criar novamente o servidor.
Depois de executar o comando voltei ao Azure Portal e agora o meu servidor estava disponível para adicionar acesso.
Adicionei as permissões necessárias: GET, WRAP e UNWRAP.
Key
Agora que a key vault está criado falta apenas a key.
3 importantes atributos que a Key deve ter:
- No expiration date
- Not disabled
- Permissão de get, wrap key, unwrap key
Habilitar TDE com BYOK
Agora seria a hora de apertar o botão salvar e tudo funcionar perfeito. Seria, mas não foi!
Recebi o erro:
Failed to save Transparent Data Encryption settings for server: {serverName}. Error message: The provided Key Vault uri ‘https://keyvaulttde.vault.azure.net/keys/KeyForTDE/633a6b1fad6941cb96449599df0382c0’ is not valid. Please ensure the vault has the right Recovery Level other than ‘Purgeable’.
Ok. Fiz algo de erro, vou refazer tudo e vai dar certo! #sqn
Boa notícia, refiz algumas vezes e pude perceber o que mesmo sem atribuir uma identidade para o servidor quando clico em salvar a etapa de atribuir uma identidade e conceder as permissões o Azure Portal está fazendo 🙂
Mas ainda falta algo que ele não faz. Então nesse momento apenas é possível utilizar PowerShell e CLI.
Quebrando os passos
Aqui eu comecei a quebrar os passos da criação de todos os recursos envolvidos.
Lendo a documentação novamente me deparo com essa informação
Depois de ler mais documentação percebi que essa funcionalidade era o que estava me causando problema.
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-ovw-soft-delete
https://docs.microsoft.com/en-us/azure/key-vault/key-vault-soft-delete-powershell
Eu tive que executar um comando em PowerShell:
($resource = Get-AzureRmResource -ResourceId (Get-AzureRmKeyVault -VaultName "KeyVaultTDE").ResourceId).Properties | Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true" Set-AzureRmResource -resourceid $resource.ResourceId -Properties $resource.Properties Get-AzureRmKeyVault -VaultName "KeyVaultTDE"
Voltei ao Azure Portal e pude finalizar o processo.
Investigando um pouco mais, quando entrei na Key Vault me apareceu a seguinte mensagem!
OK! Meu entendimento é que Soft Delete ainda está em “Preview” e minha pergunta é: Porque a Microsoft liberou um recurso (TDE com BYOK) que depende de outro recurso que ainda está em “Preview”?
Enquanto o Azure Portal não tem todas as opções disponíveis o melhor jeito é utilizar o PowerShell.