Habilitar a criptografia de dados transparente na Instância Gerenciada de SQL habilitada pelo Azure Arc (versão prévia)
Este artigo descreve como habilitar e desabilitar a TDE (criptografia de dados transparente) em repouso em uma Instância Gerenciada de SQL habilitada pelo Azure Arc. Neste artigo, o termo instância gerenciada refere-se a uma implantação da Instância Gerenciada de SQL habilitada pelo Azure Arc e a habilitação/desabilitação da TDE será aplicada a todos os bancos de dados em execução em uma instância gerenciada.
Para obter mais informações sobre a TDE, consulte Transparent Data Encryption.
Ativar o recurso TDE faz o seguinte:
- Todos os bancos de dados existentes agora serão criptografados automaticamente.
- Todos os bancos de dados recém-criados serão criptografados automaticamente.
Observação
Como uma versão prévia do recurso, a tecnologia apresentada neste artigo está sujeita aos Termos de uso complementares para versões prévias do Microsoft Azure.
As atualizações mais recentes estão disponíveis nas notas sobre a versão.
Pré-requisitos
Antes de prosseguir com este artigo, é necessário ter uma Instância Gerenciada de SQL habilitada por um recurso do Azure Arc criado e conectado a ela.
- Criar uma Instância Gerenciada de SQL habilitada pelo Azure Arc
- Conectar-se à Instância Gerenciada de SQL habilitada pelo Azure Arc
Limitações
As seguintes limitações se aplicam quando você habilita a TDE automática:
- Há suporte apenas para a Camada de Serviço de Uso Geral.
- Não há suporte para grupos de failover.
Criar uma instância gerenciada com TDE habilitada (CLI do Azure)
O exemplo a seguir cria uma Instância Gerenciada de SQL habilitada pelo Azure Arc com uma réplica, com TDE habilitada:
az sql mi-arc create --name sqlmi-tde --k8s-namespace arc --tde-mode ServiceManaged --use-k8s
Ativar a TDE na instância gerenciada
Quando a TDE está habilitada na Instância Gerenciada de SQL habilitada para Arc, o serviço de dados executa automaticamente as seguintes tarefas:
- Adiciona a chave mestra do banco de dados gerenciado pelo serviço no banco de dados
master
. - Adiciona o protetor de certificado gerenciado pelo serviço.
- Adiciona a DEK (chave de criptografia) associada a todos os bancos de dados na instância gerenciada.
- Habilita a criptografia em todos os bancos de dados na instância gerenciada.
Você pode definir a TDE da Instância Gerenciada de SQL habilitada pelo Azure Arc em um dos dois modos:
- Gerenciada pelo serviço
- Gerenciado pelo cliente
No modo gerenciado pelo serviço, a TDE requer que a instância gerenciada use uma chave mestra de banco de dados gerenciada pelo serviço, bem como o certificado do servidor gerenciado pelo serviço. Essas credenciais são criadas automaticamente quando a TDE gerenciada pelo serviço está habilitada.
No modo gerenciado pelo cliente, a TDE usa uma chave mestra de banco de dados gerenciada pelo serviço e usa as chaves fornecidas para o certificado do servidor. Par configurar o modo gerenciado pelo cliente:
- Criar um certificado.
- Armazene o certificado como um segredo no mesmo namespace do Kubernetes que a instância.
Habilitar
A seção a seguir explica como habilitar a TDE no modo gerenciado pelo serviço.
Para habilitar a TDE no modo gerenciado pelo serviço, execute o seguinte comando:
az sql mi-arc update --tde-mode ServiceManaged
Desativar a TDE na instância gerenciada
Quando a TDE está desabilitada na Instância Gerenciada de SQL habilitada para Arc, o serviço de dados executa automaticamente as seguintes tarefas:
- Desabilita a criptografia em todos os bancos de dados na instância gerenciada.
- Descarta as DEKs associadas em todos os bancos de dados na instância gerenciada.
- Descarta o protetor de certificado gerenciado pelo serviço.
- Descarta a chave mestra do banco de dados gerenciada pelo serviço no banco de dados
master
.
Para desabilitar a TDE:
az sql mi-arc update --tde-mode Disabled
Fazer backup de uma credencial TDE
Quando você faz backup de credenciais da instância gerenciada, as credenciais são armazenadas no contêiner. Para armazenar credenciais em um volume persistente, especifique o caminho de montagem no contêiner. Por exemplo, var/opt/mssql/data
. O seguinte exemplo faz backup de um certificado na instância gerenciada:
Observação
Se o comando kubectl cp
for executado no Windows, o comando poderá falhar ao usar caminhos absolutos do Windows. Use caminhos relativos ou os comandos especificados abaixo.
Faça backup do certificado no contêiner para
/var/opt/mssql/data
.USE master; GO BACKUP CERTIFICATE <cert-name> TO FILE = '<cert-path>' WITH PRIVATE KEY ( FILE = '<private-key-path>', ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
Exemplo:
USE master; GO BACKUP CERTIFICATE MyServerCert TO FILE = '/var/opt/mssql/data/servercert.crt' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key', ENCRYPTION BY PASSWORD = '<UseStrongPasswordHere>');
Copie o certificado do contêiner para o sistema de arquivos.
Copie a chave privada do contêiner para o sistema de arquivos.
Exclua o certificado e a chave privada do contêiner.
kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
Exemplo:
kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"
Restaurar uma credencial TDE para uma instância gerenciada
Semelhante ao caso acima, restaure as credenciais copiando-as para o contêiner e executando em seguida o T-SQL correspondente.
Observação
Se o comando kubectl cp
for executado no Windows, o comando poderá falhar ao usar caminhos absolutos do Windows. Use caminhos relativos ou os comandos especificados abaixo.
Para restaurar backups de banco de dados que foram feitos antes de habilitar a TDE, você precisaria desabilitar a TDE na Instância Gerenciada de SQL, restaurar o backup do banco de dados e habilitar a TDE novamente.
Copie o certificado do sistema de arquivos para o contêiner.
Copie a chave privada do sistema de arquivos para o contêiner.
Crie o certificado usando caminhos de arquivo de
/var/opt/mssql/data
.USE master; GO CREATE CERTIFICATE <certicate-name> FROM FILE = '<certificate-path>' WITH PRIVATE KEY ( FILE = '<private-key-path>', DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
Exemplo:
USE master; GO CREATE CERTIFICATE MyServerCertRestored FROM FILE = '/var/opt/mssql/data/servercert.crt' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/servercert.key', DECRYPTION BY PASSWORD = '<UseStrongPasswordHere>' );
Exclua o certificado e a chave privada do contêiner.
kubectl exec -it --namespace <namespace> --container arc-sqlmi <pod-name> -- bash -c "rm <certificate-path> <private-key-path>
Exemplo:
kubectl exec -it --namespace arc-ns --container arc-sqlmi sql-0 -- bash -c "rm /var/opt/mssql/data/servercert.crt /var/opt/mssql/data/servercert.key"