Gerenciamento extensível de chaves usando o Cofre da Chave do Azure (SQL Server)

O Conector do SQL Server do Cofre da Chave do Microsoft Azure permite SQL Server que a criptografia aproveite o serviço Cofre da Chave do Azure como um Gerenciamento extensível de chaves (EKM) provedor para proteger suas chaves de criptografia.

Incluído neste tópico:

  • Usos do EKM

  • Etapa 1: Configurando o Cofre da Chave para uso do SQL Server

  • Etapa 2: Instalando o Conector do SQL Server

  • Etapa 3: Configurar o SQL Server para usar um provedor EKM para o Cofre da Chave

  • Exemplo A: Criptografia de dados transparente usando uma chave assimétrica do Cofre da Chave

  • Exemplo B: Criptografar backups usando uma chave assimétrica do Cofre da Chave

  • Exemplo C: Criptografia de nível de coluna usando uma chave assimétrica do Cofre da Chave

Usos do EKM

Uma organização pode usar a criptografia SQL Server para proteger dados sensíveis. SQL Server A criptografia inclui Criptografia de Dados Transparente (TDE), Criptografia de Nível de Coluna (CLE) e Backup Encryption. Em todos esses casos, os dados são criptografados usando uma chave de criptografia simétrica de dados. A chave de criptografia simétrica de dados é protegida por criptografá-lo com uma hierarquia de chaves armazenadas em SQL Server. Como alternativa, o fornecedor de arquitetura EKM permite que o SQL Server proteja as chaves de criptografia de dados usando uma chave assimétrica armazenada fora do SQL Server em um fornecedor externo de criptografia. Usar a arquitetura do provedor EKM adiciona uma camada a mais de segurança e permite que as organizações separem a gestão de chaves e de dados.

O Conector do SQL Server do Cofre da Chave do Azure permite que o SQL Server aproveite o serviço escalável, de alto desempenho e altamente disponível do cofre de chave como um provedor de EKM para a proteção da chave de criptografia. O serviço de cofre de chave pode ser usado com instalações SQL Server nas Máquinas Virtuais do Microsoft Azure e em servidores locais. O serviço de cofre de chave também fornece a opção de usar Hardware Security Modules (HSMs) rigidamente controlados e monitorados para obter um nível de proteção mais elevado para as chaves de criptografia assimétrica. Para mais informações sobre o cofre de chave, consulte Cofre da Chave do Azure.

Início

A imagem a seguir resume o fluxo do processo de EKM usando o cofre de chave. Os números das etapas do processo na imagem não são destinados a coincidir com os números da etapa de configuração que seguem na imagem.

EKM do SQL Server usando o Cofre de chave do Azure

Etapa 1: Configurar o Cofre da Chave para o uso do SQL Server

Use as seguintes etapas para configurar um cofre de chave para uso com o Mecanismo de Banco de Dados do SQL Server para a proteção de chave de criptografia. Um cofre pode já estar em uso para a organização. Quando um cofre não existe, o Administrador Azure na sua organização, que é designado a gerenciar as chaves de criptografia, pode criar um cofre, gerar uma chave assimétrica no cofre e, em seguida, autorizar SQL Server a usar a chave. Para se familiarizar com a revisão de serviço do cofre de chave, consulte Introdução ao Cofre da Chave do Azure, e a referência Cmdlets do Cofre da Chave do Azure do PowerShell.

Observação importanteImportante

Se tiver várias assinaturas do Azure, você deve usar a assinatura que contém SQL Server.

  1. Criar um cofre: Criar um cofre usando as instruções na seção Criar um cofre da chave de Introdução ao Cofre da Chave do Azure. Gravar o nome do cofre. Este tópico usa ContosoKeyVault como o nome do cofre de chave.

  2. Gerar uma chave assimétrica no cofre: A chave assimétrica no cofre de chave é usada para proteger SQL Server chaves de criptografia. Apenas a parte pública da chave assimétrica sempre deixa o cofre, a parte privada nunca é exportada pelo cofre. Todas as operações criptográficas usando a chave assimétrica são delegadas ao Cofre da Chave do Azure, e são protegidas pela segurança do cofre de chave.

    Há várias maneiras de gerar uma chave assimétrica e armazená-la no cofre. Você pode gerar uma chave externamente e importar a chave para o cofre como um arquivo .pfx. Ou criar a chave diretamente no cofre usando as APIs de cofre de chave.

    O Conector do SQL Server requer que as chaves assimétricas sejam de 2048 bits RSA, e o nome da chave pode utilizar somente os caracteres "a-z", "A-Z", "0-9" e "-". Neste documento, o nome da chave assimétrica é referido como ContosoMasterKey. Substituir pelo nome exclusivo que você usa para a chave.

    Observação sobre segurançaObservação sobre segurança

    É altamente recomendado importar a chave assimétrica para cenários de produção, pois isso permite que o administrador calce a chave em um sistema de caução de chave. Se a chave assimétrica for criada no cofre, ela não poderá ser calçada porque a chave privada nunca pode deixar o cofre. As chaves usadas para proteger dados críticos devem ser calçadas. A perda de uma chave assimétrica resultará em dados permanentemente irrecuperáveis.

    Observação sobre segurançaObservação sobre segurança

    O cofre de chave dá suporte a diversas versões da chave com o mesmo nome. As chaves a serem usadas pelo Conector do SQL Server não devem ser versionadas ou roladas. Se o administrador quiser rolar a chave usada para criptografia SQL Server, uma nova chave com um nome diferente deve ser criada no cofre e usada para criptografar a DEK.

    Para mais informações sobre como importar uma chave para o cofre de chave ou para criar uma chave no cofre de chave (não recomendado para um ambiente de produção), consulte a seção Adicionar uma chave ou segredo ao cofre de chave na Introdução ao Cofre da Chave do Azure.

    Observação importanteImportante

    Os usuários devem ter, pelo menos, as operações wrapKey e unwrapKey para o cofre de chave.

  3. Obtenha os Principais Serviços do Active Directory do Azure para usar com o SQL Server: Quando a organização se inscreve em um serviço de nuvem da Microsoft, ela se torna um Active Directory do Azure. Crie as Entidades de serviço no Active Directory do Azure SQL Server para usar (para autenticar-se para o Active Directory do Azure) ao acessar o cofre de chave.

    • Será necessária uma Entidade de serviço por administrador SQL Server para acessar o cofre durante a configuração SQL Server para usar a criptografia.

    • Será necessária outra Entidade de serviço para o Mecanismo de Banco de Dados do SQL Server acessar o cofre para chaves não encapsuladas usadas em criptografia SQL Server.

    Para obter mais informações sobre como registrar um aplicativo e gerar uma entidade de serviço, consulte a seção Registrar um aplicativo com o Active Directory do Azure na Introdução ao Cofre da Chave do Azure. O processo de registro retorna uma ID de aplicativo (também conhecida como ID DO CLIENTE) e uma Chave de autenticação (também conhecida como Segredo) para cada Entidade de serviço do Active Directory do Azure. Quando usado na instrução CREATE CREDENTIAL, o hífen deve ser removido da CLIENT ID. Grave isso para usar nos scripts abaixo:

    • Entidade de serviço para um logon sysadmin: CLIENTID_sysadmin_login e SECRET_sysadmin_login

    • Entidade de serviço para o Mecanismo de Banco de Dados do SQL Server: CLIENTID_DBEngine e SECRET_DBEngine.

  4. Conceder permissão para as Entidades de serviço acessarem o cofre de chave: As Entidades de serviço CLIENTID_DBEngine e CLIENTID_sysadmin_login requerem as permissões get, list, wrapKey e unwrapKey no cofre de chave. Se você pretende criar chaves por meio do SQL Server você também precisa conceder a permissão criar no cofre de chave.

    Para obter mais informações sobre como conceder permissões para o cofre, consulte a seção Autorizar o aplicativo para usar a chave ou segredo em Introdução ao Cofre da Chave do Azure.

    Links para documentação do Cofre da Chave do Azure

Início

Etapa 2: Instalar o Conector do SQL Server

O Conector do SQL Server é baixado e instalado pelo administrador do computador SQL Server. O Conector do SQL Server está disponível para download no Centro de Download da Microsoft. Pesquise Conector do SQL Server do Cofre da Chave do Microsoft Azure, analise os detalhes, requisitos do sistema e instruções de instalação e opte por baixar o conector e iniciar a instalação usando Executar. Leia a licença, aceite-a e continue.

Por padrão, o conector está instalado no C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault. Este local pode ser alterado durante a instalação. (Caso tenham sido alterados, ajuste os scripts abaixo.)

Ao completar a instalação, é instalado o seguinte no computador:

  • Microsoft.AzureKeyVaultService.EKM.dll: Esta é o provedor DLL de criptografia EKM que precisa ser registrado com SQL Server usando a instrução CREATE CRYPTOGRAPHIC PROVIDER.

  • Conector do SQL Server do Cofre da Chave do Azure: Este é um serviço Windows que permite que o provedor EKM criptográfico se comunique com o cofre de chave.

A instalação do Conector do SQL Server também permite, opcionalmente, os scripts de exemplo de download para a criptografia SQL Server.

Início

Etapa 3: Configurar o SQL Server para usar um provedor EKM para o Cofre da Chave

Permissões

Concluir todo este processo requer a permissão CONTROL SERVER ou a associação na função de servidor fixo sysadmin. As ações específicas requerem as seguintes permissões:

  • Criar um provedor criptográfico requer a permissão CONTROL SERVER ou a associação na função de servidor fixo sysadmin.

  • Para alterar uma opção de configuração e executar a instrução RECONFIGURE, você deve ter a permissão em nível de servidor ALTER SETTINGS. A permissão de ALTER SETTINGS é implicitamente mantida pelas funções de servidor fixas sysadmin e serveradmin.

  • Criar uma credencial requer a permissão ALTER ANY CREDENTIAL.

  • Adicionar uma credencial a um logon requer a permissão ALTER ANY LOGIN.

  • Criar uma chave assimétrica requer a permissão CREATE ASYMMETRIC KEY.

Ícone de seta usado com o link Voltar ao Início[Top]

Para configurar o SQL Server para usar um provedor de criptografia

  1. Configure o Mecanismo de Banco de Dados para usar EKM e registre (crie) o provedor de criptografia com o SQL Server.

    -- Enable advanced options.
    USE master;
    GO
    
    sp_configure 'show advanced options', 1 ;
    GO
    RECONFIGURE ;
    GO
    -- Enable EKM provider
    sp_configure 'EKM provider enabled', 1 ;
    GO
    RECONFIGURE ;
    GO
    
    -- Create a cryptographic provider, using the SQL Server Connector
    -- which is an EKM provider for the Azure Key Vault. This example uses 
    -- the name AzureKeyVault_EKM_Prov.
    
    CREATE CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov 
    FROM FILE = 'C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault\Microsoft.AzureKeyVaultService.EKM.dll';
    GO 
    
  2. Configure uma credencial SQL Server para um logon de administrador SQL Server para usar o cofre de chave, a fim de configurar e gerenciar cenários de criptografia SQL Server.

    Observação importanteImportante

    O argumento IDENTITY do CREATE CREDENTIAL requer o nome do cofre de chave. O argumento SECRET do CREATE CREDENTIAL requer que a <ID do Cliente> (sem hifens) e o <Segredo> sejam passados em conjunto, sem um espaço entre eles.

    No exemplo a seguir, a ID do cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) está sem os hifens e foi inserida como a cadeia de caracteres EF5C8E094D2A4A769998D93440D8115D e o Segredo é representado pela cadeia de caracteres SECRET_sysadmin_login.

    USE master;
    CREATE CREDENTIAL sysadmin_ekm_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_sysadmin_login' 
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
    -- Add the credential to the SQL Server administrators domain login 
    ALTER LOGIN [<domain>/<login>]
    ADD CREDENTIAL sysadmin_ekm_cred;
    

    Para obter um exemplo de uso de variáveis para os argumentos CREATE CREDENTIAL e remover programaticamente os hifens da ID do cliente, consulte CREATE CREDENTIAL (Transact-SQL).

  3. Se você importou uma chave assimétrica, conforme descrito anteriormente na etapa 1, seção 3, abra a chave, fornecendo o nome da sua chave no exemplo a seguir.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
    CREATION_DISPOSITION = OPEN_EXISTING;
    

    Embora não seja recomendado para a produção (porque a chave não pode ser exportada), é possível criar uma chave assimétrica diretamente no cofre de SQL Server. Se você não tiver importado uma chave anteriormente, então, crie uma chave assimétrica no cofre de chave para o teste usando o seguinte script. Execute o script, por meio do logon provisionado com a credencial sysadmin_ekm_cred.

    CREATE ASYMMETRIC KEY CONTOSO_KEY 
    FROM PROVIDER [AzureKeyVault_EKM_Prov]
    WITH ALGORITHM = RSA_2048,
    PROVIDER_KEY_NAME = 'ContosoMasterKey';
    

Para obter mais informações, consulte o seguinte:

Ícone de seta usado com o link Voltar ao Início[Top]

Exemplos

Exemplo A: Criptografia de dados transparente usando uma chave assimétrica do Cofre da Chave

Após concluir as etapas acima, crie uma credencial e um logon, crie uma chave de criptografia de banco de dados protegida pela chave assimétrica no cofre de chave. Use a chave de criptografia do banco de dados para criptografar um banco de dados com TDE.

Criptografar um banco de dados requer a permissão CONTROL no banco de dados.

Para habilitar o TDE usando EKM e o Cofre da Chave

  1. Crie uma credencial SQL Server para o Mecanismo de Banco de Dados usar ao acessar o EKM do cofre de chave durante o carregamento do banco de dados.

    Observação importanteImportante

    O argumento IDENTITY do CREATE CREDENTIAL requer o nome do cofre de chave. O argumento SECRET do CREATE CREDENTIAL requer que a <ID do Cliente> (sem hifens) e o <Segredo> sejam passados em conjunto, sem um espaço entre eles.

    No exemplo a seguir, a ID do cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) está sem os hifens e inserida como uma cadeia de caracteres EF5C8E094D2A4A769998D93440D8115D e o Segredo é representado pela cadeia de caracteres SECRET_DBEngine.

    USE master;
    CREATE CREDENTIAL Azure_EKM_TDE_cred 
        WITH IDENTITY = 'ContosoKeyVault', 
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DSECRET_DBEngine' 
        FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
    
  2. Crie um logon de SQL Server para ser usado pelo Mecanismo de Banco de Dados por TDE e adicione a credencial a ele. Este exemplo usa a chave assimétrica CONTOSO_KEY armazenada no cofre de chave, que foi importada ou criada anteriormente para o banco de dados mestre, conforme descrito na Etapa 3, Seção 3 acima.

    USE master;
    -- Create a SQL Server login associated with the asymmetric key 
    -- for the Database engine to use when it loads a database 
    -- encrypted by TDE.
    CREATE LOGIN TDE_Login 
    FROM ASYMMETRIC KEY CONTOSO_KEY;
    GO 
    
    -- Alter the TDE Login to add the credential for use by the 
    -- Database Engine to access the key vault
    ALTER LOGIN TDE_Login 
    ADD CREDENTIAL Azure_EKM_TDE_cred ;
    GO
    
  3. Criar a DEK (chave de criptografia de banco de dados) que será utilizada para a TDE. A DEK pode ser criada usando qualquer algoritmo com suporte do SQL Server ou o comprimento da chave. A DEK será protegida pela chave assimétrica no cofre de chave.

    Este exemplo usa a chave assimétrica CONTOSO_KEY armazenada no cofre de chave, que foi importada ou criada anteriormente, conforme descrito na Etapa 3, Seção 3 acima.

    USE ContosoDatabase;
    GO
    
    
    
    
    
    
    
    CREATE DATABASE ENCRYPTION KEY 
    WITH ALGORITHM = AES_128 
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE ContosoDatabase 
    SET ENCRYPTION ON ;
    GO
    

    Para obter mais informações, consulte o seguinte:

Início

Exemplo B: Criptografar backups usando uma chave assimétrica do Cofre da Chave

Os backups criptografados são compatíveis com . O exemplo a seguir cria e restaura um backup criptografado de uma chave de criptografia de dados protegida pela chave assimétrica no cofre de chave.

USE master;
BACKUP DATABASE [DATABASE_TO_BACKUP]
TO DISK = N'[PATH TO BACKUP FILE]' 
WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, 
ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY]);
GO

Código de restauração da amostra.

RESTORE DATABASE [DATABASE_TO_BACKUP]
FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE;
GO

Para obter mais informações sobre as opções de backup, consulte BACKUP (Transact-SQL).

Exemplo C: Criptografia de nível de coluna usando uma chave assimétrica do Cofre da Chave

O exemplo a seguir cria uma chave simétrica protegida pela chave assimétrica no cofre de chave. Em seguida, a chave simétrica é usada para criptografar os dados no banco de dados.

Este exemplo usa a chave assimétrica CONTOSO_KEY armazenada no cofre de chave, que foi importada ou criada anteriormente, conforme descrito na Etapa 3, Seção 3 acima. Para utilizar esta chave assimétrica no banco de dados ContosoDatabase, você deve usar a instrução CREATE ASYMMETRIC KEY novamente, para fornecer ao banco de dados ContosoDatabase uma referência para a chave.

USE [ContosoDatabase];
GO

-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY 
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoMasterKey',
CREATION_DISPOSITION = OPEN_EXISTING;

-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server 
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault

CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
    WITH ALGORITHM=AES_256
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

DECLARE @DATA VARBINARY(MAX);

--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY 
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY;

--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY(KEY_GUID('DATA_ENCRYPTION_KEY'), CONVERT(VARBINARY,'Plain text data to encrypt'));

-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));

--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;

Consulte também

Referência

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)

CREATE CREDENTIAL (Transact-SQL)

CREATE ASYMMETRIC KEY (Transact-SQL)

CREATE SYMMETRIC KEY (Transact-SQL)

Conceitos

Gerenciamento extensível de chaves (EKM)

Habilitar a TDE usando EKM

Outros recursos

Backup Encryption

Create an Encrypted Backup