Compartilhar via


Gerenciamento extensível de chaves usando o Azure Key Vault (SQL Server)

O Conector do SQL Server para Microsoft Azure Key Vault permite que SQL Server criptografia aproveitem o serviço Key Vault do Azure como um provedor EKM (Gerenciamento Extensível de Chaves) para proteger suas chaves de criptografia.

Incluso neste tópico:

Usos de EKM

Uma organização pode usar SQL Server criptografia para proteger dados confidenciais. SQL Server criptografia inclui TDE (Transparent Data Encryption), CLE (Criptografia em Nível de Coluna) e Criptografia de Backup. 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 é ainda mais protegida ao criptografar com uma hierarquia de chaves armazenadas em SQL Server. Como alternativa, a arquitetura do provedor EKM permite que SQL Server protejam as chaves de criptografia de dados usando uma chave assimétrica armazenada fora de SQL Server em um provedor criptográfico externo. Usar a arquitetura de provedor EKM acrescenta uma camada adicional de segurança e permite que as organizações separem o gerenciamento de chaves e dados.

O conector SQL Server para a Key Vault do Azure permite que SQL Server aproveitem o serviço escalonável, de alto desempenho e de cofre de chaves altamente disponível como um provedor EKM para proteção de chave de criptografia. O serviço do cofre de chaves pode ser usado com instalações SQL Server no Microsoft Azure Máquinas Virtuais e para servidores locais. O serviço de chave de cofre também fornece a opção de usar rigidamente módulos de segurança de hardware (HSM) monitorados e controlados para um nível mais alto de proteção para as chaves de criptografia assimétrica. Para obter mais informações sobre o cofre de chaves, consulte Cofre de Chaves do Azure.

A imagem a seguir resume o fluxo do processo de EKM usando o cofre da chave. Os números de etapa do processo na imagem não devem corresponder aos números de etapa de instalação que seguem a imagem.

SQL Server EKM usando o EKM Key Vault do Azure

Etapa 1: Configuração do Key Vault para uso pelo SQL Server

Use as etapas a seguir para configurar um cofre de chaves para uso com o Mecanismo de Banco de Dados SQL Server para proteção de chave de criptografia. Um cofre já pode estar em uso para a organização. Quando um cofre não existe, o Administrador do Azure em sua organização designado para gerenciar chaves de criptografia pode criar um cofre, gerar uma chave assimétrica no cofre e autorizar SQL Server a usar a chave. Familiarize-se com o serviço de cofre de chave consultando Introdução ao Azure Key Vaulte a referência de Cmdlets do PowerShell do Azure Key Vault .

Importante

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

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

  2. Gere uma chave assimétrica no cofre: A chave assimétrica no cofre de chaves é usada para proteger SQL Server chaves de criptografia. Somente a parte pública da chave assimétrica nunca deixa o cofre, a parte particular nunca é exportada pelo cofre. Todas as operações de criptografia usando a chave assimétrica são delegadas ao Azure Key Vault e são protegidas pela segurança de chave de cofre.

    Há várias maneiras de gerar uma chave assimétrica e armazená-la no cofre. Externamente, você pode gerar uma chave e importá-la para o cofre como um arquivo .pfx. Ou criar a chave diretamente no cofre usando as APIs do cofre da chave.

    O conector SQL Server requer que as chaves assimétricas sejam RSA de 2048 bits e o nome da chave só pode usar os caracteres "a-z", "A-Z", "0-9" e "-". Neste documento, o nome da chave assimétrica é conhecido como ContosoMasterKey. Substitua isso pelo nome exclusivo usado para a chave.

    Importante

    Importar a chave assimétrica é altamente recomendável para cenários de produção, pois ela permite que o administrador garanta a chave em um sistema de caução de chaves. Se a chave assimétrica for criada no cofre, ela não pode ser mantida em garantia porque a chave privada nunca pode deixar o cofre. As chaves usadas para proteger dados críticos devem ser mantidas em garantia. A perda de uma chave assimétrica resultará em dados irrecuperáveis permanentemente.

    Importante

    O cofre da chave dá suporte a várias versões da mesma chave nomeada. As chaves a serem usadas pelo SQL Server Connector não devem ser lançadas em versão ou roladas. Se o administrador quiser rolar a chave usada para criptografia SQL Server, uma nova chave com um nome diferente deverá ser criada no cofre e usada para criptografar o DEK.

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

  3. Obtenha as Entidades de Serviço do Active Directory do Azure para uso com o SQL Server: Quando a empresa se inscreve para um serviço de nuvem da Microsoft, ela recebe um Active Directory do Azure. Crie entidades de serviço no Azure Active Directory para SQL Server usar (para se autenticar no Azure Active Directory) ao acessar o cofre de chaves.

    • Uma Entidade de Serviço será necessária por um administrador de SQL Server para acessar o cofre ao configurar SQL Server para usar a criptografia.

    • Outra Entidade de Serviço será necessária pelo Mecanismo de Banco de Dados SQL Server para acessar o cofre para desembrulhar as chaves usadas na 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 em Introdução ao Azure Key Vault. O processo de registro retorna uma ID do aplicativo (também conhecida como uma ID DO CLIENTE) e uma Chave de autenticação (também conhecida como um Segredo) para cada Entidade de serviçodo Active Directory do Azure. Quando usado na CREATE CREDENTIAL instrução , o hífen deve ser removido da ID do CLIENTE. Registre isso para uso 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 SQL Server: CLIENTID_DBEngine e SECRET_DBEngine.

  4. Conceder permissão para que as Entidades de Serviço acessem o Key Vault: as entidades de CLIENTID_sysadmin_login e CLIENTID_DBEngineService exigem as permissões get, list, wrapKey e unwrapKey no cofre de chaves. Se você pretende criar chaves por meio de SQL Server também precisará conceder a permissão de criação no cofre de chaves.

    Importante

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

    Para obter mais informações sobre como conceder permissões para o cofre, consulte a seção Autorizar o uso pelo aplicativo da chave ou segredo em Introdução ao Azure Key Vault.

    Links para a documentação do Azure Key Vault

Etapa 2: Instalação do SQL Server Connector

O conector SQL Server é baixado e instalado pelo administrador do computador SQL Server. O conector SQL Server está disponível como download no Centro de Download da Microsoft. Procure SQL Server Connector para Microsoft Azure Key Vault, examine os detalhes, requisitos de sistema e instruções de instalação e escolha baixar o conector e iniciar a instalação usando Executar. Examine e aceite a licença e continue.

Por padrão, o conector é instalado em C:\Arquivos de Programas\Conector do SQL Server para Microsoft Azure Key Vault. Esse local pode ser alterado durante a instalação. (Se alterado, ajuste os scripts a seguir).

Ao concluir a instalação, os seguintes itens são instalados no computador:

  • Microsoft.AzureKeyVaultService.EKM.dll: essa é a DLL do provedor de EKM criptográfica que precisa ser registrada com SQL Server usando a instrução CREATE CRYPTOGRAPHIC PROVIDER.

  • Azure Key Vault SQL Server Connector: Isso é 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 que você baixe opcionalmente os scripts de exemplo para criptografia do SQL Server.

Etapa 3: Configurar o SQL Server para usar um provedor EKM para o Key Vault

Permissões

Para concluir esse processo todo é necessária a permissão CONTROL SERVER ou associação na função de servidor fixa sysadmin . Ações específicas requerem as seguintes permissões:

  • Para criar um provedor criptográfico, é necessária a permissão CONTROL SERVER ou associação na função de servidor fixa 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 ALTER SETTINGS é implicitamente mantida pelas funções de servidor fixas sysadmin e serveradmin .

  • Para criar uma credencial, é necessária a permissão ALTER ANY CREDENTIAL.

  • Para adicionar uma credencial para um logon, é necessária a permissão ALTER ANY LOGIN.

  • Para criar uma chave assimétrica, é necessária a permissão CREATE ASYMMETRIC KEY.

Configuração do SQL Server para usar um provedor criptográfico

  1. Configure o Mecanismo de Banco de Dados para usar o EKM e registre (crie) o provedor criptográfico com 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 de SQL Server para um logon de administrador SQL Server para usar o cofre de chaves para configurar e gerenciar cenários de criptografia SQL Server.

    Importante

    O argumento IDENTITY de requer o nome do cofre de CREATE CREDENTIAL chaves. O argumento SECRET de CREATE CREDENTIAL requer que a ID> do< cliente (sem hifens) e <o Segredo> sejam passados juntos sem um espaço entre eles.

    No exemplo a seguir, a ID do Cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) é removida dos hifens e inserida como a cadeia de EF5C8E094D2A4A769998D93440D8115D caracteres 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 como usar variáveis para os CREATE CREDENTIAL argumentos 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 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 produção (porque a chave não pode ser exportada), é possível criar uma chave assimétrica diretamente no cofre de SQL Server. Se uma chave não foi importada anteriormente, crie uma chave assimétrica no cofre de chave para teste usando o script a seguir. Execute o script usando um logon fornecido com a credencial sysadmin_ekm_cred .

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

Dica

Usuários que recebem o erro Não é possível exportar a chave pública do provedor. Código de erro do provedor: 2053. deve marcar suas permissões get, list, wrapKey e unwrapKey no cofre de chaves.

Para saber mais, consulte o seguinte:

Exemplos

Exemplo A: Criptografia transparente de dados usando uma chave assimétrica do Key Vault

Depois de concluir as etapas acima, crie uma credencial e um logon, crie uma chave de criptografia do 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 permissão CONTROL no banco de dados.

Habilitar TDE usando EKM e a chave de cofre
  1. Crie uma credencial do SQL Server para o mecanismo de banco de dados usar quando acessar o EKM do cofre de chaves durante o carregamento de banco de dados.

    Importante

    O argumento IDENTITY de CREATE CREDENTIAL requer o nome do cofre de chaves. O argumento SECRET de CREATE CREDENTIAL requer que a ID> do< cliente (sem hifens) e <o Segredo> sejam passados juntos sem um espaço entre eles.

    No exemplo a seguir, a ID do cliente (EF5C8E09-4D2A-4A76-9998-D93440D8115D) não tem hifens e foi inserida como a cadeia de caracteres EF5C8E094D2A4A769998D93440D8115D , e Secret é 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 SQL Server a ser usado pelo Mecanismo de Banco de Dados para 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, como 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. Crie a chave de criptografia do banco de dados (DEK) que será usada para a TDE. A DEK pode ser criada usando qualquer algoritmo com suporte do SQL Server ou o comprimento da chave. A DEK estará 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, como 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 saber mais, consulte o seguinte:

Exemplo B: Criptografia de backups usando uma chave assimétrica do Key Vault

Há suporte para backups criptografados a partir do SQL Server 2014. O exemplo a seguir cria e restaura um backup criptografado e 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 de exemplo.

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

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

Exemplo C: Criptografia de nível de coluna usando uma chave assimétrica do Key Vault

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 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, como descrito na Etapa 3, seção 3 acima. Para usar essa chave assimétrica no banco de dados ContosoDatabase , você deve executar 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

CREATE CRYPTOGRAPHIC PROVIDER (Transact-SQL)CREATE CREDENTIAL (Transact-SQL)CREATE ASYMMETRIC KEY (Transact-SQL)CREATE SYMMETRIC KEY (Transact-SQL)Extensible Key Management (EKM)Enable TDE using EKMBackup EncryptionCreate an Encrypted Backup