Rodar chaves assimétricas para TDE usando o Azure Key Vault no SQL Server

Aplica-se a: SQL Server

Este artigo mostra como efetuar manualmente a rotação da chave assimétrica utilizada pelo Encriptação de Dados Transparente (TDE) com o Extensible Key Management (EKM) e o Azure Key Vault.

Use este procedimento depois de configurar o TDE com o Azure Key Vault. Para instruções iniciais de configuração, consulte Configurar Encriptação de Dados Transparente com Azure Key Vault for SQL Server.

Importante

O SQL Server não faz automaticamente a rotação da chave assimétrica usada para TDE. A rotação é uma operação manual.

A rotação do protetor lógico do TDE é uma operação online e normalmente conclui-se rapidamente, porque o SQL Server reencripta apenas a chave de encriptação da base de dados (DEK), e não toda a base de dados.

Não apague versões anteriores de chaves após a rotação. Versões anteriores podem ainda ser necessárias para restaurar backups antigos, registos de transações ou outros artefactos de recuperação.

Prerequisites

  • Completar a configuração inicial do EKM e TDE.
  • Verifique se o SQL Server consegue atualmente aceder ao cofre de chaves.
  • Certifique-se de que tem permissões para criar credenciais, logins e chaves assimétricas no SQL Server.
  • Certifique-se de que o seu modelo de autenticação continua válido:
    • Princípio de serviço: o registo da aplicação e o segredo do cliente são válidos.
    • Identidade gerida: a identidade gerida do SQL Server continua ativada e tem as permissões de chave necessárias.

Girar a chave

Escolha o seu modelo de autenticação e siga os passos correspondentes.

  1. No Azure Key Vault ou no Managed HSM, rode a chave:

    • Criar uma nova versão do mesmo nome de chave, ou
    • Crie um novo nome de chave.
  2. No SQL Server, cria uma credencial para a operação de rotação, se necessário.

    CREATE CREDENTIAL <new_credential_name>
       WITH IDENTITY = <key_vault_name_or_uri_without_https>,
       SECRET = '<client_id_without_hyphens><client_secret>'
       FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM;
    
  3. Adicione a credencial ao princípio de configuração que cria a próxima chave assimétrica.

    ALTER LOGIN [<domain>\<login>]
       ADD CREDENTIAL [<new_credential_name>];
    
  4. Crie a nova chave assimétrica do SQL Server a partir do Azure Key Vault.

    Note

    Para rotação manual, o SQL Server suporta tanto um nome de chave sem versão como uma referência de chave versionada:

    • Sem versão: usar <key_name> para permitir que o SQL Server use a versão de chave mais alta disponível no Azure Key Vault.
    • Versionado: usar <key_name>/<version> para fixar operações de encriptação a uma versão específica da chave.

    Não precisa de criar um nome de chave AKV diferente para efetuar a rotação. Roda as chaves criando uma nova versão da chave e depois criando uma nova chave assimétrica do SQL Server que faça referência à forma sem versão ou versionada.

    Use um nome de chave sem versão ou uma versão específica da chave:

    CREATE ASYMMETRIC KEY <new_ekm_key_name>
       FROM PROVIDER [AzureKeyVault_EKM]
       WITH PROVIDER_KEY_NAME = '<key_name_or_key_name/version>',
       CREATION_DISPOSITION = OPEN_EXISTING;
    
  5. Crie um novo login a partir da nova chave assimétrica.

    CREATE LOGIN <new_login_name>
       FROM ASYMMETRIC KEY <new_ekm_key_name>;
    
  6. Mude o mapeamento das credenciais do login de configuração para o novo login assimétrico.

    ALTER LOGIN [<domain>\<login>]
       DROP CREDENTIAL [<new_credential_name>];
    
    ALTER LOGIN <new_login_name>
       ADD CREDENTIAL [<new_credential_name>];
    
  7. Reencripte a chave de encriptação da base de dados (DEK) usando a nova chave assimétrica.

    USE [<database_name>];
    GO
    ALTER DATABASE ENCRYPTION KEY
       ENCRYPTION BY SERVER ASYMMETRIC KEY <new_ekm_key_name>;
    

Verificar rotação

  1. Verifique os metadados de encriptação para a base de dados.

    SELECT encryptor_type,
           encryption_state_desc,
           encryptor_thumbprint
    FROM sys.dm_database_encryption_keys
    WHERE database_id = DB_ID('<database_name>');
    
  2. Verifique a impressão digital assimétrica da chave do SQL Server.

    SELECT name,
           algorithm_desc,
           thumbprint
    FROM sys.asymmetric_keys
    WHERE name = '<new_ekm_key_name>';
    
  3. Confirma que as impressões digitais coincidem.