Tutorial: Introdução ao uso de Always Encrypted com enclaves seguros no SQL Server com atestado usando o HGS

Aplica-se a: SQL Server 2019 (15.x) e posterior – Somente Windows

Este tutorial é uma introdução ao Always Encrypted com enclaves seguros no SQL Server usando o Serviço Guardião de Host (HGS) para atestado de enclave. Ela mostrará a você:

  • Como criar um ambiente básico para testar e avaliar o Always Encrypted com enclaves seguros com atestado com HGS configurado para enclave.
  • Como criptografar dados in-loco e emitir consultas confidenciais avançadas em colunas criptografadas usando o SSMS (SQL Server Management Studio).

Se você quiser saber como configurar o Always Encrypted com enclaves seguros sem atestado, consulte Tutorial: Introdução ao uso do Always Encrypted com enclaves seguros no SQL Server.

Pré-requisitos

Para começar com o Always Encrypted com enclaves seguros, você precisa de pelo menos dois computadores (podem ser máquinas virtuais):

  • O computador do SQL Server para hospedar o SQL Server e o SSMS.
  • O computador do HGS para executar o Serviço Guardião de Host, que é necessário para o atestado de enclave.

Requisitos do computador com SQL Server

  • SQL Server 2019 (15.x) ou posterior.
  • Windows 10, versão 1809 ou posterior – edição Enterprise, Windows 11 ou posterior – edição Enterprise, Windows Server 2019 ou posterior – edição Datacenter. Outras edições do Windows 10/11 e do Windows Server não dão suporte a atestado com HGS.
  • Suporte de CPU para tecnologias de virtualização:
    • Intel VT-x com Tabelas de Página Estendida.
    • AMD-V com Indexação de Virtualização Rápida.
    • Se você estiver executando o SQL Server em uma VM:
      • No Azure, use um tamanho de VM de Geração 2 (recomendado) ou use um tamanho de VM de Geração 1 com virtualização aninhada habilitada. Verifique a documentação de tamanhos de VM individuais para determinar quais tamanhos de VM de Geração 1 dão suporte à virtualização aninhada.
      • No Hyper-V 2016 ou posterior (fora do Azure), verifique se a sua VM é de Geração 2 (recomendado) ou se é uma VM de Geração 1 com virtualização aninhada habilitada. Para saber mais informações, confira Devo criar uma máquina virtual de geração 1 ou 2 no Hyper-V? e Configurar virtualização aninhada.
      • No VMware vSphere 6.7 ou posterior, habilite o suporte à Segurança Baseada em Virtualização para a VM, conforme descrito na documentação da VMware.
      • Outros hipervisores e nuvens públicas podem dar suporte a recursos de virtualização aninhados que também permitem Always Encrypted com enclaves de VBS. Verifique a documentação da solução de virtualização para obter instruções sobre compatibilidade e configuração.
  • A versão mais recente do SSMS (SQL Server Management Studio). Como alternativa, é possível instalar o SSMS em outro computador.

Aviso

Em ambientes de produção, executar o SSMS ou outras ferramentas de gerenciamento de chaves no computador do SQL Server pode reduzir os benefícios de segurança do uso de Always Encrypted. Em geral, é recomendável executar essas ferramentas em um computador diferente. Para obter mais informações, consulte Considerações de Segurança para o Gerenciamento de Chaves.

Requisitos do computador de HGS

  • Windows Server 2019 edição Standard ou Datacenter
  • 2 CPUs
  • 8 GB de RAM
  • 100 GB de armazenamento

Observação

O computador do HGS não deve ser ingressado em um domínio antes de você começar.

Etapa 1: configurar o computador do HGS

Nesta etapa, você configurará o computador do HGS para executar o Serviço Guardião de Host que dá suporte ao atestado de chave do host.

  1. Entre no computador do HGS como um administrador (administrador local), abra um console do Windows PowerShell com privilégios elevados e, executando o seguinte comando, adicione a função de Serviço Guardião de Host:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. Após a reinicialização do computador do HGS, entre com sua conta do administrador novamente, abra um console do Windows PowerShell com privilégios elevados e execute os comandos a seguir para instalar o Serviço Guardião de Host e configurar o respectivo domínio. A senha especificada aqui se aplicará somente à senha do Modo de Reparo de Serviços de Diretório do Active Directory; a senha de logon da conta do administrador não será alterada. Você pode fornecer qualquer nome de domínio de sua preferência para -HgsDomainName.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Depois que o computador for reiniciado novamente, entre com sua conta do administrador (que agora também é um administrador de domínio). Abra um console elevado do Windows PowerShell e configure o atestado de chave de host para sua instância do HGS.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Localize o endereço IP do computador do HGS executando o comando a seguir. Salve esse endereço IP para as etapas posteriores.

    Get-NetIPAddress  
    

Observação

Como alternativa, se quiser se referir ao computador do HGS por um nome DNS, você pode configurar um encaminhador de seus servidores DNS corporativos para o novo controlador de domínio do HGS.

Etapa 2: configurar o computador do SQL Server como um host protegido

Nesta etapa, você configurará o computador do SQL Server como um host protegido registrado com o HGS usando um atestado de chave do host.

Aviso

O atestado de chave Host é considerado um modo de atestado mais fraco. Se possível, você deve usar o atestado de TPM para ambientes de produção. Para saber mais, confira Modos de atestado.

  1. Entre no computador do SQL Server como um administrador, abra um console do Windows PowerShell com privilégios elevados e recupere o nome do seu computador acessando a variável computername.

    $env:computername 
    
  2. Instale o recurso Host Protegido, que também instalará o Hyper-V (se ele ainda não estiver instalado).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Reinicie o computador do SQL Server quando for solicitado que você conclua a instalação do Hyper-V.

  4. Se o computador do SQL Server for uma máquina virtual, um computador físico que não dê suporte à Inicialização Segura da UEFI ou um computador físico não equipado com IOMMU, será preciso remover o requisito de SBV dos recursos de segurança da plataforma.

    1. Remova o requisito de inicialização segura e IOMMU executando o seguinte comando em seu computador SQL Server em um console do PowerShell com privilégios elevados:

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Reinicie o computador SQL Server novamente para que o VBS fique online com os requisitos reduzidos.

      Restart-Computer
      
  5. Entre no computador do SQL Server como um administrador novamente, abra um console do Windows PowerShell com privilégios elevados, gere uma chave host exclusiva e exporte a chave pública resultante para um arquivo.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Copie manualmente o arquivo de chave host gerado na etapa anterior para o computador do HGS. As instruções abaixo supõem que o nome do arquivo é hostkey.cer e que você o está copiando para sua área de trabalho no computador do HGS.

  7. No computador do HGS, abra um console do Windows PowerShell com privilégios elevados e registre a chave host do computador do SQL Server com o HGS:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. No computador do SQL Server, execute o seguinte comando em um console do Windows PowerShell com privilégios elevados para indicar ao computador do SQL Server o local em que atestar. Verifique se você especificou o endereço IP ou o nome DNS do seu computador do HGS nos dois locais.

    # use http, and not https
    Set-HgsClientConfiguration -AttestationServerUrl http://<IP address or DNS name>/Attestation -KeyProtectionServerUrl http://<IP address or DNS name>/KeyProtection/  
    

O resultado do comando acima deve mostrar que AttestationStatus = Passed.

Se você receber um erro HostUnreachable, significa que o computador SQL Server não pode se comunicar com o HGS. Verifique se você pode executar ping no computador do HGS.

Um UnauthorizedHost erro indica que a chave pública não foi registrada com o servidor HGS. Repita as etapas 5 e 6 para resolver o erro.

Se todo o resto falhar, execute Remove-HgsClientHostKey e repita as etapas de 4 a 7.

Etapa 3: habilitar o Always Encrypted com enclaves seguros no SQL Server

Nesta etapa, você habilitará a funcionalidade de Always Encrypted usando enclaves na sua instância do SQL Server.

  1. Usando o SSMS, conecte-se à instância do SQL Server como sysadmin sem Always Encrypted habilitado para a conexão de banco de dados.

    1. Inicie o SSMS.

    2. Na caixa de diálogo Conectar ao servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.

    3. Selecione Opções >> e escolha a guia Always Encrypted.

    4. Verifique se a caixa de seleção Habilitar o Always Encrypted (criptografia de coluna)não está selecionada.

      Captura de tela da opção de conexão SSMS para Always Encrypted desabilitada.

    5. Selecione Conectar.

  2. Abra uma nova janela de consulta e execute a instrução abaixo para definir o tipo de enclave seguro para VBS (Segurança Baseada em Virtualização).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Reinicie a instância do SQL Server para que as alterações anteriores entrem em vigor. Para reiniciar a instância no SSMS, clique nela com o botão direito do mouse no Pesquisador de Objetos e selecionando Reiniciar. Após a instância ser reiniciada, conecte-se a ela novamente.

  4. Confirme que o enclave seguro está carregado executando a consulta a seguir:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    A consulta deve retornar o resultado a seguir:

    name value value_in_use
    column encryption enclave type 1 1

Etapa 4: criar banco de dados de exemplo

Nesta etapa, você criará um banco de dados com alguns dados de exemplo, os quais você criptografará mais tarde.

  1. Usando a instância do SSMS da etapa anterior, execute a instrução abaixo em uma janela de consulta para criar um novo banco de dados denominado ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Crie uma nova tabela denominada Funcionários.

    USE [ContosoHR];
    GO
    
    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  3. Adicione alguns registros de funcionários à tabela Funcionários.

    USE [ContosoHR];
    GO
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Etapa 5: provisionar chaves habilitadas para enclave

Nesta etapa, você criará uma chave mestra de coluna e uma chave de criptografia de coluna que permitem computações de enclave.

  1. Usando a instância de SSMS da etapa anterior, no Pesquisador de Objetos, expanda o banco de dados e navegue até Segurança>Chaves Always Encrypted.

  2. Provisione uma nova chave mestra da coluna habilitada para enclave:

    1. Clique com o botão direito do mouse em Chaves Always Encrypted e selecione Nova chave mestra da coluna... .

    2. Selecione o nome da sua chave mestra da coluna: CMK1.

    3. Certifique-se de selecionar Repositório de certificados do Windows (usuário atual ou computador local) ou Azure Key Vault.

    4. Selecione Permitir computações de enclave.

    5. Se tiver selecionado o Azure Key Vault, entre no Azure e selecione seu cofre de chaves. Para obter mais informações sobre como criar um cofre de chaves para Always Encrypted, veja Gerenciar cofres de chaves do portal do Azure.

    6. Selecione o certificado ou a chave Valor da Chave do Azure se ele já existir ou clique no botão Gerar Certificado para criar um.

    7. Selecione OK.

      Captura de tela da seleção permitir cálculos de enclave no SSMS ao criar uma nova chave mestra de coluna.

  3. Crie uma nova chave de criptografia de coluna habilitada para enclave:

    1. Clique com o botão direito do mouse em Chaves Always Encrypted e selecione Nova chave de criptografia da coluna.
    2. Insira um nome para a nova chave de criptografia da coluna: CEK1.
    3. No menu suspenso Chave mestra da coluna, selecione a chave mestra da coluna criada nas etapas anteriores.
    4. Selecione OK.

Etapa 6: Criptografar algumas colunas em vigor

Nesta etapa, você criptografará os dados armazenados nas colunas SSN e Salário dentro do enclave do lado do servidor e testará uma consulta SELECT nos dados.

  1. Abra uma nova instância do SSMS e conecte-se à instância do SQL Server com Always Encrypted habilitado para a conexão de banco de dados.

    1. Inicie uma nova instância do SSMS.

    2. Na caixa de diálogo Conectar ao servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.

    3. Selecione Opções >> e escolha a guia Always Encrypted.

    4. Marque a caixa de seleção Habilitar Always Encrypted (criptografia de coluna).

    5. Selecione Habilitar enclaves seguros. (Esta etapa se aplica ao SSMS 19 ou posterior.)

    6. Defina o Protocolo como Serviço Guardião de Host. (Esta etapa se aplica ao SSMS 19 ou posterior.)

    7. Especifique sua URL de atestado de enclave (por exemplo, http:// hgs.bastion.local/Attestation).

      Captura de tela da guia Always Encrypted na conexão ao servidor com o atestado que usa o SSMS.

    8. Selecione Conectar.

    9. Se precisar habilitar a parametrização para consultas do Always Encrypted, selecione Habilitar.

  2. Usando a mesma SSMS da instância (com Always Encrypted habilitado), abra uma nova janela de consulta e criptografe as colunas SSN e Salário executando as consultas abaixo.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Observação

    Observe a instrução ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE para limpar o cache do plano de consulta para o banco de dados no script acima. Depois que você tiver alterado a tabela, será necessário limpar os planos para todos os lotes e procedimentos armazenados que acessam a tabela, para atualizar as informações de criptografia de parâmetros.

  3. Para verificar se agora as colunas SSN e Salário estão criptografadas, abra uma nova janela de consulta na instância do SSMS sem Always Encrypted habilitado para a conexão de banco de dados e execute a instrução abaixo. A janela de consulta deve retornar valores criptografados nas colunas SSN e Salário. Se você executar a mesma consulta usando a instância do SSMS com o Always Encrypted habilitado, você deve ver os dados descriptografados.

    SELECT * FROM [HR].[Employees];
    

Etapa 7: executar consultas avançadas em colunas criptografadas

Agora você pode executar consultas avançadas nas colunas criptografadas. Algum processamento de consulta será executado dentro de seu enclave do lado do servidor.

  1. Na instância do SSMS com Always Encrypted habilitado, verifique se a parametrização de Always Encrypted também está habilitada.

    1. Selecione Ferramentas no menu principal do SSMS.
    2. Selecione Opções... .
    3. Navegue para Execução da Consulta>SQL Server>Avançado.
    4. A opção Habilitar Parametrização do Always Encrypted precisa estar marcada.
    5. Selecione OK.
  2. Abra uma nova janela de consulta, cole e execute a consulta abaixo. A consulta deve retornar valores de texto sem formatação e linhas que atendem a critérios de pesquisa especificados.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Tente fazer a mesma consulta novamente na instância do SSMS que não tem o Always Encrypted habilitado e observe a falha que ocorre.

Próximas etapas

Depois de concluir este tutorial, você pode ir para um dos seguintes tutoriais:

Consulte também