Gerenciamento extensível de chaves usando o Azure Key Vault (SQL Server)
O Conector do SQL Server para Microsoft Azure Key Vault permite que a criptografia do SQL Server aproveite o serviço do Azure Key Vault como um provedor de do EKM (Gerenciamento extensível de chaves) do para proteger suas chaves de criptografia.
Incluído neste tópico:
Etapa 3: Configurar o SQL Server para usar um provedor EKM para o Key Vault
Exemplo A: Criptografia de Dados Transparente usando uma chave assimétrica do Cofre de Chaves
exemplo B: Criptografando backups usando uma chave assimétrica do key vault
Exemplo C: Criptografia de Nível de Coluna usando uma Chave Assimétrica do Cofre de Chaves
Usos de EKM
Uma organização pode usar a criptografia do SQL Server para proteger dados confidenciais. A criptografia do SQL Server inclui TDE (Transparent Data Encryption), CLE (Column Level Encryption) e Backup Encryption. Em todos esses casos, os dados são criptografados usando uma chave de criptografia de dados simétrica. A chave de criptografia de dados simétrica é protegida ainda mais criptografando-a com uma hierarquia de chaves armazenadas no SQL Server. Como alternativa, a arquitetura do provedor 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 provedor criptográfico externo. O uso da arquitetura do provedor EKM adiciona uma camada adicional de segurança e permite que as organizações separem o gerenciamento de chaves e dados.
O Conector do SQL Server para Azure Key Vault permite que o SQL Server utilize o serviço de cofre de chaves escalonável, de alto desempenho e 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 do SQL Server em Máquinas Virtuais do Microsoft Azure e para servidores locais. O serviço do cofre de chaves também fornece a opção de usar HSMs (Módulos de Segurança de Hardware) controlados e monitorados rigorosamente para um nível mais alto de proteção para chaves de criptografia assimétricas. Para obter mais informações sobre o Azure Key Vault, consulte .
A imagem a seguir resume o fluxo de trabalho do EKM usando o cofre de chaves. Os números da etapa de processo na imagem não são destinados a corresponder aos números da etapa de configuração que seguem a imagem.
Etapa 1: Configurar o 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 do SQL Server para 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 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 o SQL Server a usar a chave. Para se familiarizar com a revisão do serviço do cofre de chaves, consulte Introdução ao Azure Key Vaulte a referência de cmdlets do PowerShell para o Azure Key Vault.
Importante
Se você tiver várias assinaturas do Azure, deverá usar a assinatura que contém o SQL Server.
Criar um cofre: Criar um cofre usando as instruções na seção Criar um cofre de chaves de Introdução ao Azure Key Vault. Registre o nome do cofre. Este tópico usa ContosoKeyVault como o nome do cofre de chaves.
Gerar uma chave assimétrica no cofre: a chave assimétrica no cofre de chaves é usada para proteger as chaves de criptografia do SQL Server. Somente a parte pública da chave assimétrica sai do cofre, a parte privada nunca é exportada pelo cofre. Todas as operações criptográficas que usam a chave assimétrica são delegadas ao Azure Key Vault e são protegidas pela segurança do cofre de chaves.
Há várias maneiras de gerar uma chave assimétrica e armazená-la no cofre. Você pode gerar uma chave externamente e importá-la para o cofre como um arquivo .pfx. Ou crie a chave diretamente no cofre usando as APIs do cofre de chaves.
O Conector do 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 que você usa para a chave.
Importante
A importação da chave assimétrica é altamente recomendada para cenários de produção porque permite que o administrador deposite a chave em custódia em um sistema de custódia de chaves. Se a chave assimétrica for criada no cofre, ela não poderá ser depositada em custódia porque a chave privada nunca poderá sair do cofre. As chaves usadas para proteger dados críticos devem ser mantidas em custódia. A perda de uma chave assimétrica resultará em dados permanentemente irrecuperáveis.
Importante
O cofre de chaves dá suporte a várias versões da chave com o mesmo nome. As chaves a serem usadas pelo Conector do SQL Server não devem ser versionadas ou rotacionadas. Se o administrador quiser rolar a chave usada para criptografia do 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 para o cofre de chaves ou criar uma chave no cofre de chaves (não recomendado para um ambiente de produção), consulte o Adicionar uma chave ou segredo à seção do cofre de chaves no Introdução ao Azure Key Vault.
Obter principais de serviço do Azure Active Directory para uso com o SQL Server: Quando a organização se inscreve em um serviço de nuvem da Microsoft, ela obtém um Azure Active Directory. Crie Princípios de Serviço no Azure Active Directory para o SQL Server usar (para se autenticar no Azure Active Directory) ao acessar o cofre de chaves.
Um administrador do SQL Server precisará de uma entidade de serviço para acessar o repositório ao configurar o SQL Server para usar a criptografia.
Outro Principal de Serviço será necessário para o Mecanismo de Banco de Dados do SQL Server acessar o cofre para decifrar as chaves usadas na criptografia do 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 no Azure Active Directory seção Introdução ao Azure Key Vault. O processo de registro retorna um ID do Aplicativo (também conhecido como ID do CLIENTE ) e uma Chave de Autenticação (também conhecido como Segredo ) para cada Service Principal do Azure Active Directory . Quando usado na instrução
CREATE CREDENTIAL
, o hífen deve ser removido do CLIENT ID . Registre-os para uso nos scripts abaixo:da Entidade de Serviço do para um logon do sysadmin: CLIENTID_sysadmin_login e SECRET_sysadmin_login
de Entidade de Serviço para o Mecanismo de Banco de Dados do SQL Server: CLIENTID_DBEngine e SECRET_DBEngine.
conceder permissão para que as Entidades de Serviço acessem o Key Vault: as entidades de CLIENTID_sysadmin_login e CLIENTID_DBEngineService exigem que as obtenham, lista, wrapKeye permissões de unwrapKey no cofre de chaves. Se você pretende criar chaves por meio do SQL Server, também precisará conceder ao criar permissão no cofre de chaves.
Importante
Os usuários devem ter pelo menos as operações de wrapKey e de unwrapKey para o cofre de chaves.
Para obter mais informações sobre como conceder permissões ao cofre, consulte a seção Autorizar o aplicativo a usar a chave ou o segredo em Introdução ao Azure Key Vault.
Links para a documentação do Azure Key Vault
Referência cmdlets do PowerShell Azure Key Vault
Etapa 2: Instalar o Conector do SQL Server
O Conector do SQL Server é baixado e instalado pelo administrador do servidor SQL. O Conector do SQL Server está disponível para download do Microsoft Download Center. Pesquise Conector do SQL Server para o Microsoft Azure Key Vault, revise os detalhes, os requisitos do sistema e as instruções de instalação, e escolha baixar o conector e iniciar a instalação usando Executar. Revise a licença, aceite-a e continue.
Por padrão, o conector é instalado em C:\Program Files\SQL Server Connector for Microsoft Azure Key Vault. Esse local pode ser alterado durante a instalação. (Se alterado, ajuste os scripts abaixo.)
Ao concluir a instalação, os seguintes são instalados no computador:
Microsoft.AzureKeyVaultService.EKM.dll: essa é a DLL do provedor de EKM criptográfica que precisa ser registrada no SQL Server usando a instrução CREATE CRYPTOGRAPHIC PROVIDER.
Conector do SQL Server do Azure Key Vault: Este é um serviço do Windows que permite ao provedor de EKM criptográfico se comunicar com o Key Vault.
A instalação do SQL Server Connector também permite que você baixe, opcionalmente, 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 todo esse processo, é necessário ter a permissão CONTROL SERVER ou estar associado à função de servidor fixa sysadmin. Ações específicas exigem as seguintes permissões:
Para criar um provedor de criptografia, exige a permissão CONTROL SERVER ou ser membro da função fixa de servidor sysadmin.
Para alterar uma opção de configuração e executar a instrução RECONFIGURE, você deve receber a permissão de nível de servidor ALTER SETTINGS. A permissão ALTER SETTINGS é mantida implicitamente pelas funções de servidor fixas sysadmin e serveradmin.
Para criar uma credencial, é necessário ter a permissão ALTER ANY CREDENTIAL.
Para adicionar uma credencial a um logon, requer a permissão ALTER ANY LOGIN.
Para criar uma chave assimétrica, requer a permissão CREATE ASYMMETRIC KEY.
Para configurar o SQL Server para usar um provedor criptográfico
Configure o Mecanismo de Banco de Dados para usar o 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
Configure uma credencial do SQL Server para um logon de administrador do SQL Server para usar o cofre de chaves para configurar e gerenciar cenários de criptografia do SQL Server.
Importante
O argumento IDENTITY de
CREATE CREDENTIAL
requer o nome do cofre de chaves. O argumento SECRET deCREATE CREDENTIAL
requer que o ID do Cliente <> (sem hifens) e o Identificador Secreto <> sejam passados juntos sem um espaço entre eles.No exemplo a seguir, o de ID do Cliente (
00001111-aaaa-2222-bbbb-3333cccc4444
) é despojado dos hifens e inserido como a cadeia de caracteres00001111AAAA2222BBBB3333CCCC4444
e o Secreto é representado pela cadeia de caracteres SECRET_sysadmin_login.USE master; CREATE CREDENTIAL sysadmin_ekm_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_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 argumentos
CREATE CREDENTIAL
e remover programaticamente os hifens da ID do cliente, consulte CREATE CREDENTIAL (Transact-SQL).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 do SQL Server. Se você não importou uma chave anteriormente, crie uma chave assimétrica no cofre de chaves para teste usando o script a seguir. Execute o script usando um 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';
Dica
Os usuários que recebem o erro Não é possível exportar a chave pública do provedor. Código de erro do provedor: 2053. devem verificar suas permissões de obter, lista, wrapKeye permissões de unwrapKey no cofre de chaves.
Para obter mais informações, consulte o seguinte:
Exemplos
Exemplo A: Criptografia Transparente de Dados usando uma chave assimétrica do Cofre de Chaves
Depois de 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 chaves. Use a chave de criptografia do banco de dados para criptografar um banco de dados com TDE.
Para criptografar um banco de dados, é necessária a permissão CONTROL no banco de dados.
Para habilitar o TDE usando o EKM e o Key Vault
Crie uma credencial do SQL Server para que o Mecanismo de Banco de Dados a utilize ao acessar o EKM no cofre de chaves durante o carregamento do banco de dados.
Importante
O argumento IDENTITY de
CREATE CREDENTIAL
requer o nome do cofre de chaves. O argumento SECRET deCREATE CREDENTIAL
requer que o <ID do Cliente> (sem hifens) e <Secreto> sejam passados juntos, sem um espaço entre eles.No exemplo a seguir, o ID de Cliente (
00001111-aaaa-2222-bbbb-3333cccc4444
) é removido os hifens e inserido como a string00001111AAAA2222BBBB3333CCCC4444
, e o Secret é representado pela string SECRET_DBEngine.USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoKeyVault', SECRET = '00001111AAAA2222BBBB3333CCCC4444SECRET_DBEngine' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov ;
Crie um logon do 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 chaves, 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
Crie a DEK (chave de criptografia de banco de dados) que será usada para TDE. O DEK pode ser criado usando qualquer algoritmo ou comprimento de chave com suporte do SQL Server. O DEK será protegido pela chave assimétrica no cofre de chaves criptográficas.
Este exemplo usa a chave assimétrica CONTOSO_KEY armazenada no cofre de chaves, 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:
Exemplo B: Criptografando 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 de uma chave de criptografia de dados protegida pela chave assimétrica no cofre de chaves.
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 chaves. 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 chaves, que foi importada ou criada anteriormente, conforme descrito na etapa 3 , seção 3 acima. Para usar essa chave assimétrica no banco de dados ContosoDatabase
, execute a instrução CREATE ASYMMETRIC KEY novamente para fornecer ao banco de dados ContosoDatabase
uma referência à 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
CRIAR PROVEDOR CRIPTOGRÁFICO (Transact-SQL)CRIAR CREDENCIAL (Transact-SQL)CRIAR CHAVE ASSIMÉTRICA (Transact-SQL)CRIAR CHAVE SIMÉTRICA (Transact-SQL)Gerenciamento de Chaves Extensível (EKM)Habilitar TDE usando EKMCriptografia de BackupCriar um Backup Criptografado