Habilitar a criptografia de dados transparente na Instância Gerenciada SQL habilitada pelo Azure Arc (visualização)

Este artigo descreve como habilitar e desabilitar a criptografia de dados transparente (TDE) em repouso em uma Instância Gerenciada SQL habilitada pelo Azure Arc. Neste artigo, o termo instância gerenciada refere-se a uma implantação da Instância Gerenciada SQL habilitada pelo Azure Arc e a habilitação/desativação do TDE será aplicada a todos os bancos de dados em execução em uma instância gerenciada.

Para obter mais informações sobre TDE, consulte Criptografia de dados transparente.

Ativar o recurso TDE faz o seguinte:

  • Todas as bases de dados existentes serão agora automaticamente encriptadas.
  • Todos os bancos de dados recém-criados serão automaticamente criptografados.

Nota

Como funcionalidade de pré-visualização, a tecnologia apresentada neste artigo está sujeita aos Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.

As atualizações mais recentes estão disponíveis nas notas de versão.

Pré-requisitos

Antes de prosseguir com este artigo, você deve ter uma Instância Gerenciada SQL habilitada pelo recurso Azure Arc criado e conectar-se a ela.

Limitações

As seguintes limitações se aplicam quando você ativa o TDE automático:

  • Apenas a camada de uso geral é suportada.
  • 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 SQL habilitada pelo Azure Arc com uma réplica, 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 SQL habilitada para Arc, o serviço de dados executa automaticamente as seguintes tarefas:

  1. Adiciona a chave mestra do banco de dados gerenciado pelo serviço no master banco de dados.
  2. Adiciona o protetor de certificado gerenciado pelo serviço.
  3. Adiciona as Chaves de Criptografia de Banco de Dados (DEK) associadas em todos os bancos de dados na instância gerenciada.
  4. Permite a criptografia em todos os bancos de dados na instância gerenciada.

Você pode definir a Instância Gerenciada SQL habilitada pelo Azure Arc TDE em um dos dois modos:

  • Serviço gerenciado
  • Gerenciado pelo cliente

No modo de gerenciamento de serviço, a TDE exige que a instância gerenciada use uma chave mestra de banco de dados gerenciada por serviço, bem como o certificado de servidor gerenciado por serviço. Essas credenciais são criadas automaticamente quando o TDE gerenciado pelo serviço é habilitado.

No modo gerenciado pelo cliente, a TDE usa uma chave mestra de banco de dados gerenciada por serviço e usa chaves fornecidas para o certificado do servidor. Para configurar o modo gerenciado pelo cliente:

  1. Crie um certificado.
  2. Armazene o certificado como um segredo no mesmo namespace do Kubernetes que a instância.

Ativar

A seção a seguir explica como habilitar o TDE no modo gerenciado por serviço.

Para habilitar o TDE no modo gerenciado de serviço, execute o seguinte comando:

az sql mi-arc update --tde-mode ServiceManaged

Desativar TDE na instância gerenciada

Quando a TDE está desabilitada na Instância Gerenciada SQL habilitada para Arc, o serviço de dados executa automaticamente as seguintes tarefas:

  1. Desabilita a criptografia em todos os bancos de dados na instância gerenciada.
  2. Descarta as DEKs associadas em todos os bancos de dados na instância gerenciada.
  3. Descarta o protetor de certificado gerenciado pelo serviço.
  4. Descarta a chave mestra do banco de dados gerenciado pelo serviço no master banco de dados.

Para desativar o 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 dentro do contêiner. Para armazenar credenciais em um volume persistente, especifique o caminho de montagem no contêiner. Por exemplo, var/opt/mssql/data. O exemplo a seguir faz backup de um certificado da instância gerenciada:

Nota

Se o comando for executado a partir do Windows, o kubectl cp comando poderá falhar ao utilizar caminhos absolutos do Windows. Use caminhos relativos ou os comandos especificados abaixo.

  1. Faça backup do certificado do 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>');
    
  2. Copie o certificado do contêiner para o sistema de arquivos.

    kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-certificate-path> > <local-certificate-path>
    

    Exemplo:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.crt > $HOME\sqlcerts\servercert.crt
    

  1. Copie a chave privada do contêiner para o sistema de arquivos.

     kubectl exec -n <namespace> -c arc-sqlmi <pod-name> -- cat <pod-private-key-path> > <local-private-key-path>
    

    Exemplo:

    kubectl exec -n arc-ns -c arc-sqlmi sql-0 -- cat /var/opt/mssql/data/servercert.key > $HOME\sqlcerts\servercert.key
    

  1. 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 acima, para restaurar as credenciais, copie-as para o contêiner e execute o T-SQL correspondente posteriormente.

Nota

Se o comando for executado a partir do Windows, o kubectl cp comando poderá falhar ao utilizar 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 o TDE, você precisa desabilitar o TDE na Instância Gerenciada SQL, restaurar o backup do banco de dados e habilitar o TDE novamente.

  1. Copie o certificado do sistema de arquivos para o contêiner.

    type <local-certificate-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-certificate-path>
    

    Exemplo:

    type $HOME\sqlcerts\servercert.crt | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.crt
    

  1. Copie a chave privada do seu sistema de arquivos para o contêiner.

    type <local-private-key-path> | kubectl exec -i -n <namespace> -c arc-sqlmi <pod-name> -- tee <pod-private-key-path>
    

    Exemplo:

    type $HOME\sqlcerts\servercert.key | kubectl exec -i -n arc-ns -c arc-sqlmi sql-0 -- tee /var/opt/mssql/data/servercert.key
    
  2. 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>' );
    
  3. 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"
    

Encriptação de Dados Transparente