O blog da AWS

Faça backup e restaure bancos de dados criptografados com dados transparentes em todas as contas no Amazon RDS para SQL Server

Por Alvaro Costa-Neto, Jeril Jose e Gopakumar Gopalakrishna Pillai

O Amazon Relational Database Service (Amazon RDS) para SQL Server é um serviço de banco de dados gerenciado pela AWS que simplifica a operação e o gerenciamento de bancos de dados Microsoft SQL Server. O Amazon RDS para SQL Server fornece valor ao lidar com o provisionamento, o gerenciamento e o monitoramento de bancos de dados do SQL Server. Embora essa agilidade operacional seja valiosa, a proteção e a segurança dos dados se tornam ainda mais críticas quando se considera os riscos da migração de bancos de dados para fora dos data centers físicos. O Amazon RDS permite que você empregue o recurso Transparent Data Encryption (TDE) do SQL Server, que protege seus dados em repouso e limita o acesso a usuários autorizados. No entanto, ele não criptografa dados em trânsito ou em uso.

O uso de várias contas da AWS é uma prática recomendada comum para separar ambientes logicamente. Ao gerenciar bancos de dados SQL Server habilitados para TDE em todas as contas da AWS, várias etapas importantes garantem a proteção dos dados. Esta postagem fornece as etapas para migrar bancos de dados habilitados para TDE entre instâncias do Amazon RDS para SQL Server em contas da AWS.

Pré-requisitos

Presumimos que você tenha conhecimento prévio do Amazon RDS para SQL Server e do TDE no SQL Server. Usamos o SQL Server 2019 Enterprise Edition nesta postagem.

Para acompanhar esta postagem, você precisa dos seguintes pré-requisitos:

  • Amazon RDS para SQL Server com o grupo de opções do TDE habilitado nas contas A e B da AWS e permissões apropriadas para interagir com recursos em sua conta da AWS
  • Acesso para trabalhar com a chave do AWS KMS
  • Buckets S3 na conta A e na conta B

Visão geral da solução

Essa solução requer fazer backup de um banco de dados habilitado para TDE no Amazon RDS para SQL Server na conta A da AWS e restaurá-lo em outra instância na conta B. O certificado TDE, criptografado com uma chave do AWS Key Management Service (AWS KMS), também precisa ser restaurado na instância de destino. O ciphertextda chave privada usada para fazer backup do certificado TDE no banco de dados de origem é descriptografado por uma chave KMS na conta A e recriptografado com uma chave KMS na conta B.

Para implementar a solução, conclua as seguintes etapas de alto nível na conta A:

  1. Se não existir, crie uma nova chave simétrica do AWS KMS.
  2. Faça backup do certificado TDE usando a chave do AWS KMS em um bucket do Amazon Simple Storage Service (Amazon S3).
  3. Faça backup do banco de dados do RDS for SQL Server no bucket do S3.
  4. Extraia o ciphertext-blob dos metadados S3 do arquivo de chave privada.
  5. Compartilhe a chave do AWS KMS.

Na conta B, conclua as seguintes etapas:

  1. Descriptografe o ciphertextda conta A e extraia a senha em texto simples.
  2. Crie uma nova chave simétrica do AWS KMS na conta B e criptografe a chave com a senha em texto simples.
  3. Antes de restaurar o banco de dados, o certificado TDE precisa ser restaurado na instância de destino na conta B.
  4. Restaure o banco de dados e criptografe a chave do AWS KMS para o Amazon RDS para SQL Server na conta B.

O diagrama a seguir ilustra a arquitetura da solução para migrar bancos de dados SQL Server habilitados para TDE entre contas.

Faça backup do certificado TDE e do banco de dados RDS para SQL Server da conta A em um bucket S3

Faça backup do certificado TDE na conta A usando a stored procedure rds_backup_tde_certificate na instância do RDS usando uma chave do AWS KMS. Você pode executar o seguinte código de exemplo no Amazon RDS para SQL Server na conta A.

Abaixo está um exemplo de declarações a serem executadas na conta A.

Primeiro, consultamos a visualização do sistema sys.certificates para obter o nome do certificado TDE:

USE [master]
GO
SELECT * FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%'
GO

Em seguida, fazemos backup do certificado Amazon RDS TDE usando uma chave KMS:

EXECUTE msdb.dbo.rds_b ackup_tde_certificate
    @certificate_name='RDSTDECertificate20230323T215533',
    @certificate_file_s3_arn='arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/mssql-inst02.cer’,
    @private_key_file_s3_arn=’arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/mssql-inst02.pvk',
    @kms_password_key_arn='arn:aws:kms:us-east-1:<ACCOUNTA-ID>:key/mrk-<Key ID>',
    @overwrite_s3_files=1;

Por fim, fazemos backup nativo do banco de dados criptografado no Amazon S3:

exec msdb.dbo.rds_backup_database
    @source_db_name='tpcc',
    @s3_arn_to_backup_to='arn:aws:s3:::<BUCKET-NAME-ACCOUNTA>/tpcc-native-backup.bak',    
     @overwrite_s3_backup_file=1,
     @type='FULL',
     @number_of_files=4; 

Para obter informações adicionais, consulte Suporte para criptografia de dados transparente no SQL Server.

Extraia o ciphertext-blob dos metadados S3 do arquivo de chave privada

Conclua as seguintes etapas:

  1. Navegue até o bucket do S3 a partir da etapa anterior e copie o ciphertext-blob dos metadados do arquivo de chave privada. Isso pode ser encontrado na tag x-amz-meta-rds-tde-pwd.
  2. Compartilhe a chave KMS (usada para fazer backup do certificado TDE) com o usuário raiz ou qualquer outro usuário ou função na conta B que executará as operações criptográficas.

Veja a seguir um exemplo de uma política do IAM usando o usuário root:

{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": [
        "arn:aws:iam::444455556666:root"
        ]
    },
    "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
    ],
    "Resource": “<ARN-FOR-KMS-KEY>”
}

Veja a seguir um exemplo de uma política do IAM usando uma função:

{
    "Sid": "Allow an external account to use this KMS key",
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/ExampleRole"
    },
    "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
    ],
    "Resource": “<ARN-FOR-KMS-KEY>”
}

3. Copie os arquivos de backup do certificado TDE (*.cer) e da chave privada (*.pvk) do bucket S3 da conta A para um bucket S3 na conta B.

Descriptografe o ciphertext da conta A e extraia a senha em texto simples

Descriptografe o ciphertext recebido da conta A usando o ID da chave do AWS KMS que você usou para fazer backup do certificado TDE. Veja a seguir um exemplo de comando da AWS Command Line Interface (AWS CLI) para descriptografar o ciphertexte obter a senha em texto simples:

AWS kms decrypt —key-id  —ciphertext-blob   —output text —query Plaintext —region 

Para obter mais informações sobre decodificação, consulte Descriptografar.

Crie uma nova chave do AWS KMS na conta B e criptografe a chave com uma senha de texto simples

A próxima etapa é criar uma nova chave simétrica do AWS KMS na conta B e criptografar a senha de texto simples que foi descriptografada na etapa anterior usando a chave do AWS KMS na conta B. Use as credenciais que têm permissões na chave do AWS KMS. O comando a seguir fornece o ciphertext para essa senha em texto simples que descriptografamos anteriormente:

aws kms encrypt —key-id <Provide KMS KeyID from Account-B> —plaintext "The output from the decrypt step" —output text —region <AWS Region>

Para obter mais informações, consulte Criação de CMK simétrica

Em seguida, navegamos até o bucket do S3 na conta B, onde o certificado e a chave privada são mantidos. Selecionamos o arquivo de chave privada (.pvk), navegamos até as ações do objeto e editamos os metadados. Atualize o valor do ciphertext sob o tipo definido pelo usuário e marque x-amz-meta-rds-tde-pwd.

Restaure o banco de dados e criptografe a chave do AWS KMS para o Amazon RDS para SQL Server na conta B

Antes de restaurar o banco de dados, certifique-se de que a instância do RDS para SQL Server na conta B tenha um grupo de opções com TDE e backup e restauração nativos habilitados.

Restaure o certificado TDE atualizado no Amazon RDS para SQL Server na conta B usando a chave AWS KMS recém-criada usando o seguinte código de exemplo:

EXECUTE msdb.dbo.rds_restore_tde_certificate
    @certificate_name='UserTDECertificate_FromAcct1',
    @certificate_file_s3_arn='arn:aws:s3:::<BUCKET-NAME-ACCOUNTB>/mssql-inst02.cer',
    @private_key_file_s3_arn='arn:aws:s3::: <BUCKET-NAME-ACCOUNTB>/mssql-inst02.pvk',
    @kms_password_key_arn='arn:aws:kms:us-east-1:<ACCOUNTB-ID>:key/mrk-<Key ID>'; 

Verifique se o certificado do usuário está carregado com o seguinte código:

SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();

Depois que o certificado TDE for restaurado e verificado com sucesso no Amazon RDS para SQL Server, podemos continuar restaurando o backup do banco de dados. Veja a seguir um exemplo para restaurar o backup do backup habilitado para TDE a partir do bucket do S3 na conta B.

exec msdb.dbo.rds_ restore_database
    @ restore_db_name='tpcc',
    @s3_arn_to_restore_from='arn:aws:s3:::<BUCKET-NAME-ACCOUNTB>/tpcc',
    @with_norecovery=0,
    @type='FULL';

Limpe

Para remover os recursos da AWS criados durante o teste, conclua as seguintes etapas:

  1. Faça login no AWS Management Console.
  2. Escolha a região em que residem as instâncias do RDS para SQL Server.
  3. No console do Amazon RDS, escolha Bancos de dados no painel de navegação.
  4. Selecione a instância do RDS que foi criada.
  5. No menu Ações, escolha Excluir.
  6. No console do Amazon S3, selecione o bucket que foi criado.
  7. No menu Ações, escolha Excluir.
  8. No console do AWS KMS, selecione a chave KMS que você criou.
  9. Escolha Agendar exclusão da chave, insira um período entre 7 e 30 dias e escolha Agendar exclusão.

Conclusão

A criptografia de dados transparente é um mecanismo de criptografia embutido comumente usado no SQL Server para proteger dados. Esta postagem apresentou uma solução para restaurar um banco de dados habilitado para TDE de uma instância do RDS para SQL Server para outra instância residente em uma conta diferente.

Experimente esta solução e deixe comentários ou perguntas na seção de comentários. Fique ligado para ver mais postagens que abordam soluções adicionais de migração do SQL Server.

Este blog em português é uma tradução do blog original em inglês.

 

Autores

Alvaro Costa-Neto é arquiteto de soluções especialista em banco de dados da AWS, onde ajuda clientes a projetar e implementar soluções de banco de dados na nuvem. Ele é apaixonado por tecnologias de banco de dados e trabalha com elas há mais de 19 anos, principalmente com o Microsoft SQL Server. Ele mora em Clermont, Flórida, com sua esposa e dois filhos, que compartilham seu amor pela aviação e pelas viagens. Quando não está trabalhando, ele gosta de fazer churrascos com sua família e amigos e explorar novos lugares.

 

Gopakumar Gopalakrishna Pillai é engenheiro de banco de dados na Amazon Web Services. Ele trabalhou em várias tecnologias de banco de dados e forneceu soluções para vários problemas de clientes em seus 16 anos de jornada de banco de dados até agora. Ele está se concentrando em fornecer soluções de banco de dados ideais para clientes do RDS SQL Server e aproveita sua experiência para ajudar os clientes a criar aplicativos sem servidor. Nas horas vagas, ele adora explorar novos lugares.

 

Jeril Jose é consultor especialista em banco de dados com mais de 14 anos de experiência no Microsoft SQL Server e em outras tecnologias de banco de dados. Ele ajuda os clientes a arquitetar, migrar e otimizar suas soluções de banco de dados para a AWS. Antes de ingressar na AWS, ele apoiou a produção e a implementação de bancos de dados essenciais nos segmentos financeiro e de varejo.

 

 

Tradutores e Revisores

Luiz Rampanelli é um Solutions Architect no time da AWS Latam. Possui mais de 10 anos de experiência com workloads Microsoft em nuvem e ambientes híbridos. Atua com desenho de soluções seguindo as melhores práticas para que os clientes possam aproveitar ao máximo os benefícios da nuvem da AWS.
Alvaro Costa-Neto é arquiteto de soluções especialista em banco de dados da AWS, onde ajuda clientes a projetar e implementar soluções de banco de dados na nuvem. Ele é apaixonado por tecnologias de banco de dados e trabalha com elas há mais de 19 anos, principalmente com o Microsoft SQL Server. Ele mora em Clermont, Flórida, com sua esposa e dois filhos, que compartilham seu amor pela aviação e pelas viagens. Quando não está trabalhando, ele gosta de fazer churrascos com sua família e amigos e explorar novos lugares.