Categorias
Azure SQL Database How To Troubleshooting

Azure SQL Database – Transparent Data Encryption with bring your own key

[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.  

https://azure.microsoft.com/en-us/blog/transparent-data-encryption-with-customer-managed-keys-in-azure-sql-database-generally-available/

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. 

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-byok-azure-sql?view=azuresqldb-current 

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 

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-byok-azure-sql?view=azuresqldb-current 

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.  

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-byok-azure-sql 

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-byok-azure-sql-configure

https://azure.microsoft.com/en-us/blog/transparent-data-encryption-with-customer-managed-keys-in-azure-sql-database-generally-available/ 

https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-azure-sql 

https://azure.microsoft.com/en-us/blog/preview-sql-transparent-data-encryption-tde-with-bring-your-own-key-support/