Suporte para criptografia de dados transparente no SQL Server - Amazon Relational Database Service

Suporte para criptografia de dados transparente no SQL Server

O Amazon RDS suporta o uso de Criptografia de Dados Transparente (TDE) para criptografar dados armazenados em suas instâncias de banco de dados executando o Microsoft SQL Server. O TDE criptografa os dados automaticamente antes de gravá-los no armazenamento e os descriptografa automaticamente quando os são lidos.

O Amazon RDS oferece suporte a TDE para as seguintes versões e edições do SQL Server:

  • SQL Server 2019 Standard e Enterprise Edition

  • SQL Server 2017 Enterprise Edition

  • SQL Server 2016 Enterprise Edition

  • SQL Server 2014 Enterprise Edition

A criptografia de dados transparente para o SQL Server permite o gerenciamento de chaves de criptografia usando uma arquitetura de chave de duas camadas. Um certificado, que é gerado a partir da chave mestre do banco de dados, é usado para proteger as chaves de criptografia de dados. A chave de criptografia do banco de dados executa a criptografia e a decodificação reais dos dados no banco de dados do usuário. O Amazon RDS faz backup e gerencia a chave primária do banco de dados e o certificado TDE.

A criptografia de dados transparente é usada em cenários em que você precisa criptografar dados confidenciais. Por exemplo, você pode querer fornecer arquivos de dados e backups a terceiros ou abordar problemas de conformidade regulatórios relacionados à segurança. Não é possível criptografar os bancos de dados do sistema para o SQL Server, como os bancos de dados model ou master.

Uma discussão detalhada sobre a Transparent Data Encryption não está no escopo deste guia, mas você deve entender os pontos fortes e fracos de segurança de cada algoritmo e chave de criptografia. Para obter informações sobre a criptografia de dados transparente para o SQL Server, consulte o tópico sobre a Transparent Data Encryption (TDE) no site da Microsoft.

Ativar o TDE para o RDS para SQL Server

Para ativar a Transparent Data Encryption para uma instância de banco de dados do RDS para SQL Server, especifique a opção TDE em um grupo de opções do RDS associado a essa instância de banco de dados.

  1. Determine se a instância de banco de dados já está associada a um grupo de opções que tenha a opção TDE. Para visualizar o grupo de opções ao qual uma instância de banco de dados está associada, use o console do RDS, o comando describe-db-instance da AWS CLI ou a operação DescribeDBInstances da API.

  2. Se a instância de banco de dados não estiver associada a um grupo de opções que tenha o TDE ativado, você terá duas opções. Você pode criar um grupo de opções e adicionar a opção TDE ou pode modificar o grupo de opções associado para adicioná-lo.

    nota

    No console do RDS, a opção é chamada TRANSPARENT_DATA_ENCRYPTION. Na AWS CLI e na API do RDS, ele é chamado TDE.

    Para obter informações sobre como criar ou modificar um grupo de opções, consulte Trabalhar com grupos de opções. Para obter informações sobre como adicionar uma opção a um grupo de opções, consulte Adicionar uma opção a um grupo de opções.

  3. Associe a instância de banco de dados ao grupo de opções com a opção TDE. Para obter informações sobre como associar uma instância de banco de dados a um grupo de opções, consulte Modificar uma instância de banco de dados do Amazon RDS.

Considerações de grupos de opções

A opção TDE é uma opção persistente. Não é possível removê-lo de um grupo de opções, a menos que todas as instâncias e backups de banco de dados não estejam mais associados ao grupo de opções. Quando você adiciona a opção TDE a um grupo de opções, o grupo de opções só pode ser associado a instâncias de banco de dados que usam TDE. Para mais informações sobre opções persistentes em um grupo de opções, consulte Visão geral de grupos de opções.

Como a opção TDE é uma opção persistente, você pode ter um conflito entre o grupo de opções e uma instância de banco de dados associada. Pode haver um conflito nas seguintes situações:

  • O grupo de opções atual tem a opção TDE, e você o substitui por um grupo de opções sem a opção TDE.

  • Faça uma restauração a partir de um snapshot de banco de dados para uma nova instância de banco de dados sem um grupo de opções que contenha a opção TDE. Para obter mais informações sobre esse cenário, consulte Considerações de grupos de opções.

Considerações de performance do SQL Server

O uso da Transparent Data Encryption pode afetar a performance de uma instância de banco de dados do SQL Server.

O performance de bancos de dados descriptografados também pode ser degradado se os bancos de dados estiverem em uma instância de banco de dados que tenha pelo menos um banco de dados criptografado. Como resultado, recomendamos que você mantenha bancos de dados criptografados e descriptografados em instâncias de banco de dados separadas.

Criptografar dados no RDS para SQL Server

Quando a opção TDE é adicionada a um grupo de opções, o Amazon RDS gera um certificado que é usado no processo de criptografia. Você pode então usar o certificado para executar instruções de SQL que criptografam dados em um banco de dados na instância do banco de dados.

O exemplo a seguir usa o certificado criado pelo RDS chamado RDSTDECertificateName para criptografar um banco de dados chamado myDatabase.

---------- Turning on TDE ------------- -- Find an RDS TDE certificate to use USE [master] GO SELECT name FROM sys.certificates WHERE name LIKE 'RDSTDECertificate%' GO USE [myDatabase] GO -- Create a database encryption key (DEK) using one of the certificates from the previous step CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE [RDSTDECertificateName] GO -- Turn on encryption for the database ALTER DATABASE [myDatabase] SET ENCRYPTION ON GO -- Verify that the database is encrypted USE [master] GO SELECT name FROM sys.databases WHERE is_encrypted = 1 GO SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO

O tempo necessário para criptografar um banco de dados do SQL Server usando o TDE depende de vários fatores. Eles incluem o tamanho da instância de banco de dados, se a instância usa o armazenamento de IOPS provisionadas, o volume de dados e outros fatores.

Fazer backup e restaurar certificados TDE no RDS para SQL Server

O RDS para SQL Server fornece procedimentos armazenados para backup, restauração e eliminação de certificados TDE. O RDS para SQL Server também fornece uma função para visualizar certificados TDE de usuário restaurados.

Os certificados TDE do usuário são usados para restaurar bancos de dados para o RDS para SQL Server que estão on-premises e têm o TDE ativado. Esses certificados têm o prefixo UserTDECertificate_. Depois de restaurar bancos de dados e antes de disponibilizá-los para uso, o RDS modifica os bancos de dados que têm o TDE ativado para usar certificados TDE gerados pelo RDS. Esses certificados têm o prefixo RDSTDECertificate.

Certificados TDE do usuário permanecem na instância de banco de dados do RDS para SQL Server, a menos que você os descarte usando os procedimentos armazenados rds_drop_tde_certificate. Para mais informações, consulte Descartar certificados TDE restaurados.

Você pode usar um certificado TDE de usuário para restaurar outros bancos de dados da instância de banco de dados de origem. Os bancos de dados a serem restaurados devem usar o mesmo certificado TDE e ter o TDE ativado. Você não precisa importar (restaurar) o mesmo certificado novamente.

Pré-requisitos

Para fazer backup ou restaurar certificados TDE no RDS para SQL Server, realize as tarefas a seguir. As três primeiras são descritos em Configurar o backup e a restauração nativos.

  1. Crie buckets do Amazon S3 para armazenar arquivos para backup e restauração.

    Recomendamos que você use buckets separados para backups de banco de dados e backups de certificados TDE.

  2. Crie um perfil do IAM para fazer backup e restaurar arquivos.

    O perfil do IAM deve ser um usuário e um administrador da AWS KMS key.

    Além das permissões necessárias para backup e restauração nativos do SQL Server, o perfil do IAM também precisa as seguintes permissões:

    • s3:GetBucketACL, s3:GetBucketLocation e s3:ListBucket no recurso de bucket do S3

    • s3:ListAllMyBuckets no recurso *

  3. Adicionar a opção SQLSERVER_BACKUP_RESTORE a um grupo de opções em sua instância de banco de dados.

    Além da opção TRANSPARENT_DATA_ENCRYPTION (TDE).

  4. Verifique se você tem uma chave do KMS de criptografia simétrica. Você tem as seguintes opções:

    • Se você tiver uma chave do KMS em sua conta, poderá usá-la. Nenhuma outra ação é necessária.

    • Se você não tiver uma chave do KMS de criptografia simétrica em sua conta, crie uma seguindo as instruções em Criar chaves, no Guia do desenvolvedor do AWS Key Management Service.

Limitações

O uso de procedimentos armazenados para fazer backup e restaurar certificados TDE tem as seguintes limitações:

  • As duas opções SQLSERVER_BACKUP_RESTORE e TRANSPARENT_DATA_ENCRYPTION (TDE) devem ser adicionadas ao grupo de opções associado à sua instância de banco de dados.

  • O backup e a restauração de certificados TDE não são compatíveis com instâncias de banco de dados multi-AZ.

  • O cancelamento de tarefas de backup e restauração de certificados TDE não é compatível.

  • Não é possível usar um certificado TDE de usuário para criptografia TDE de nenhum outro banco de dados em sua instância de banco de dados do RDS para SQL Server. Você pode usá-lo para restaurar somente outros bancos de dados da instância de banco de dados de origem que tem o TDE ativado e que usam o mesmo certificado TDE.

  • Você pode descartar apenas certificados TDE do usuário.

  • O número máximo de certificados TDE do usuário compatível com o RDS é dez. Se o número exceder dez, descarte os certificados TDE não utilizados e tente novamente.

  • O nome do certificado não pode estar em branco nem ser nulo.

  • Ao restaurar um certificado, o nome dele não pode incluir a palavra-chave RDSTDECERTIFICATE e deve iniciar com o prefixo UserTDECertificate_.

  • O parâmetro @certificate_name pode incluir apenas os seguintes caracteres: a-z, 0-9, @, $, # e sublinhado (_).

  • A extensão do arquivo @certificate_file_s3_arn deve ser .cer (não diferencia maiúsculas de minúsculas).

  • A extensão do arquivo para @private_key_file_s3_arn deve ser .pvk (não diferencia maiúsculas de minúsculas).

  • Os metadados do S3 do arquivo de chave privada devem incluir a tag x-amz-meta-rds-tde-pwd. Para mais informações, consulte Fazer backup e restaurar certificados TDE para bancos de dados on-premises.

Fazer backup de um certificado TDE

Para fazer backup de certificados TDE, use o procedimento armazenado rds_backup_tde_certificate. Ele tem a sintaxe a seguir.

EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='UserTDECertificate_certificate_name | RDSTDECertificatetimestamp', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id', [@overwrite_s3_files=0|1];

Os seguintes parâmetros são obrigatórios:

  • @certificate_name: o nome do certificado TDE do qual fazer backup.

  • @certificate_file_s3_arn: o nome do recurso da Amazon (ARN) de destino do arquivo de backup do certificado no Amazon S3.

  • @private_key_file_s3_arn: o ARN do S3 de destino do arquivo de chave privada que protege o certificado TDE.

  • @kms_password_key_arn: o ARN da chave do KMS simétrica usada para criptografar a senha da chave privada.

O parâmetro a seguir é opcional:

  • @overwrite_s3_files: indica se os arquivos de chave privada e certificados existentes devem ser substituídos no S3:

    • 0: não substitui os arquivos existentes. Esse valor é o padrão.

      Definir @overwrite_s3_files como 0 retornará um erro se já existir um arquivo.

    • 1 – substitui um arquivo existente que tenha o nome especificado, ainda que ele não seja um arquivo de backup.

exemplo Fazer backup de um certificado TDE
EXECUTE msdb.dbo.rds_backup_tde_certificate @certificate_name='RDSTDECertificate20211115T185333', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE', @overwrite_s3_files=1;

Restaurar um certificado TDE

Use o procedimento armazenado rds_restore_tde_certificate para restaurar (importar) certificados TDE do usuário. Ele tem a sintaxe a seguir.

EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_certificate_name', @certificate_file_s3_arn='arn:aws:s3:::bucket_name/certificate_file_name.cer', @private_key_file_s3_arn='arn:aws:s3:::bucket_name/key_file_name.pvk', @kms_password_key_arn='arn:aws:kms:region:account-id:key/key-id';

Os seguintes parâmetros são obrigatórios:

  • @certificate_name: o nome do certificado TDE a ser restaurado. O nome deve iniciar com o prefixo UserTDECertificate_.

  • @certificate_file_s3_arn: o ARN do S3 do arquivo de backup usado para restaurar o certificado TDE.

  • @private_key_file_s3_arn: o ARN do S3 do arquivo de backup da chave privada do certificado TDE a ser restaurado.

  • @kms_password_key_arn: o ARN da chave do KMS simétrica usada para criptografar a senha da chave privada.

exemplo Restaurar um certificado TDE
EXECUTE msdb.dbo.rds_restore_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate', @certificate_file_s3_arn='arn:aws:s3:::TDE_certs/mycertfile.cer', @private_key_file_s3_arn='arn:aws:s3:::TDE_certs/mykeyfile.pvk', @kms_password_key_arn='arn:aws:kms:us-west-2:123456789012:key/AKIAIOSFODNN7EXAMPLE';

Visualizar certificados TDE restaurados

Use a função rds_fn_list_user_tde_certificates para visualizar certificados TDE do usuário restaurados (importados). Ele tem a sintaxe a seguir.

SELECT * FROM msdb.dbo.rds_fn_list_user_tde_certificates();

A saída será semelhante à seguinte. Nem todas as colunas são exibidas aqui.

name certificate_id principal_id pvt_key_encryption_type_desc issuer_name cert_serial_number thumbprint subject start_date expiry_date pvt_key_last_backup_date
UserTDECertificate_tde_cert 343 1 ENCRYPTED_BY_MASTER_KEY AnyCompany Shipping 79 3e 57 a3 69 fd 1d 9e 47 2c 32 67 1d 9c ca af 0x6BB218B34110388680B FE1BA2D86C695096485B5 AnyCompany Shipping 2022-04-05 19:49:45.0000000 2023-04-05 19:49:45.0000000 NULL

Descartar certificados TDE restaurados

Para descartar certificados TDE do usuário restaurados (importados) que você não está usando, utilize o procedimento armazenado rds_drop_tde_certificate. Ele tem a sintaxe a seguir.

EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_certificate_name';

O seguinte parâmetro é obrigatório:

  • @certificate_name: o nome do certificado TDE a ser descartado.

Você só pode descartar certificados TDE restaurados (importados). Você não pode descartar certificados criados pelo RDS.

exemplo Descartar um certificado TDE
EXECUTE msdb.dbo.rds_drop_tde_certificate @certificate_name='UserTDECertificate_myTDEcertificate';

Fazer backup e restaurar certificados TDE para bancos de dados on-premises

Você pode fazer backup de certificados TDE para bancos de dados on-premises e depois restaurá-los para o RDS para SQL Server. Você também pode restaurar um certificado TDE do RDS para SQL Server para uma instância de banco de dados on-premises.

O procedimento a seguir faz backup de um certificado TDE e uma chave privada. A chave privada é criptografada usando uma chave de dados gerada a partir de sua chave do KMS de criptografia simétrica.

Para fazer backup de um certificado TDE on-premises
  1. Gere a chave de dados usando o comando generate-data-key da AWS CLI.

    aws kms generate-data-key \ --key-id my_KMS_key_ID \ --key-spec AES_256

    A saída será semelhante à seguinte.

    { "CiphertextBlob": "AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==", "Plaintext": "U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=", "KeyId": "arn:aws:kms:us-west-2:123456789012:key/1234abcd-00ee-99ff-88dd-aa11bb22cc33" }

    Use a saída de texto simples na próxima etapa como a senha da chave privada.

  2. Faça backup do seu certificado TDE, conforme mostrado no exemplo a seguir.

    BACKUP CERTIFICATE myOnPremTDEcertificate TO FILE = 'D:\tde-cert-backup.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\cert-backup-key.pvk', ENCRYPTION BY PASSWORD = 'U/fpGtmzGCYBi8A2+0/9qcRQRK2zmG/aOn939ZnKi/0=');
  3. Salve o arquivo de backup do certificado no bucket de certificados do Amazon S3.

  4. Salve o arquivo de backup de chave privada no bucket de certificados do S3, com a seguinte tag nos metadados do arquivo:

    • Chave: x-amz-meta-rds-tde-pwd

    • Valor: o valor CiphertextBlob da geração da chave de dados, como no exemplo a seguir.

      AQIDAHimL2NEoAlOY6Bn7LJfnxi/OZe9kTQo/XQXduug1rmerwGiL7g5ux4av9GfZLxYTDATAAAAfjB8BgkqhkiG9w0B BwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMyCxLMi7GRZgKqD65AgEQgDtjvZLJo2cQ31Vetngzm2ybHDc3d2vI74SRUzZ 2RezQy3sAS6ZHrCjfnfn0c65bFdhsXxjSMnudIY7AKw==

O procedimento a seguir restaura um certificado TDE do RDS para SQL Server para uma instância de banco de dados on-premises. Copie e restaure o certificado TDE na instância de banco de dados de destino usando o backup de certificado, o arquivo de chave privada correspondente e a chave de dados. O certificado restaurado é criptografado pela chave mestra do banco de dados do novo servidor.

Como restaurar um certificado TDE
  1. Copie o arquivo de backup do certificado TDE e o arquivo de chave privada do Amazon S3 para a instância de destino.

  2. Use sua chave do KMS para descriptografar o texto de criptografia de saída para recuperar o texto simples da chave de dados. O texto de criptografia está localizado nos metadados do S3 do arquivo de backup de chave privada.

    aws kms decrypt \ --key-id my_KMS_key_ID \ --ciphertext-blob fileb://exampleCiphertextFile | base64 -d \ --output text \ --query Plaintext

    Use a saída de texto simples na próxima etapa como a senha da chave privada.

  3. Use o comando SQL a seguir para restaurar seu certificado TDE.

    CREATE CERTIFICATE myOnPremTDEcertificate FROM FILE='D:\tde-cert-backup.cer' WITH PRIVATE KEY (FILE = N'D:\tde-cert-key.pvk', DECRYPTION BY PASSWORD = 'plain_text_output');

Para obter mais informações sobre descriptografia do KMS, consulte descriptografar na seção do KMS da Referência de comando AWS CLI.

Depois que o certificado TDE for restaurado na instância de banco de dados de destino, você poderá restaurar bancos de dados criptografados com esse certificado.

nota

Você pode usar o mesmo certificado TDE para criptografar vários bancos de dados do SQL Server na instância de banco de dados de origem. Para migrar vários bancos de dados para uma instância de destino, copie o certificado TDE associado a eles na instância de destino apenas uma vez.

Desativar o TDE para o RDS para SQL Server

Para desativar o TDE em uma instância de banco de dados do RDS para SQL Server, primeiro, verifique se não há objetos criptografados na instância de banco de dados. Para fazer isso, descriptografe os objetos ou descarte-os. Se houver algum objeto criptografado na instância de banco de dados, você não poderá desativar o TDE para a instância de banco de dados. Ao usar o console para remover a opção TDE de um grupo de opções, o console indica que ele está processando. Além disso, um evento de erro será criado se o grupo de opções estiver associado a uma instância de banco de dados criptografada ou a um DB snapshot.

O exemplo a seguir remove a criptografia de TDE de um banco de dados chamado customerDatabase.

------------- Removing TDE ---------------- USE [customerDatabase] GO -- Turn off encryption of the database ALTER DATABASE [customerDatabase] SET ENCRYPTION OFF GO -- Wait until the encryption state of the database becomes 1. The state is 5 (Decryption in progress) for a while SELECT db_name(database_id) as DatabaseName, * FROM sys.dm_database_encryption_keys GO -- Drop the DEK used for encryption DROP DATABASE ENCRYPTION KEY GO -- Alter to SIMPLE Recovery mode so that your encrypted log gets truncated USE [master] GO ALTER DATABASE [customerDatabase] SET RECOVERY SIMPLE GO

Quando todos os objetos forem descriptografados, você terá duas opções:

  1. Você poderá modificar a instância de banco de dados para ser associada a um grupo de opções sem a opção TDE.

  2. Você pode remover a opção TDE do grupo de opções.