Partilhar via


Tutorial: Começar a usar o Always Encrypted com enclaves seguros no SQL Server com atestação usando HGS

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores no Windows

Este tutorial ensina-te como começar com o Always Encrypted com enclaves seguros no SQL Server usando o Host Guardian Service (HGS) para atestação de enclave. Irá mostrar-lhe:

  • Como criar um ambiente básico para testar e avaliar o Always Encrypted com enclaves seguros com HGS configurado para atestação de enclaves.
  • Como criptografar dados no próprio local e realizar consultas avançadas e confidenciais em colunas criptografadas usando o SQL Server Management Studio (SSMS).

Se quiser aprender a configurar o Always Encrypted com enclaves seguros sem atestar, veja o Tutorial: Como começar a usar o Always Encrypted com enclaves seguros no SQL Server.

Pré-requisitos

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

  • A máquina SQL Server para alojar SQL Server e SSMS.
  • O computador HGS é projetado para executar o Host Guardian Service, que é necessário para a atestação do enclave.

Requisitos do computador 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 suportam atestação com HGS.
  • Suporte de CPU para tecnologias de virtualização:
    • Intel VT-x com Tabelas de Páginas Estendidas.
    • AMD-V com Indexação Rápida de Virtualização.
    • Se estiveres a correr SQL Server numa VM:
      • No Azure, use um tamanho de VM de Geração 2 (recomendado) ou tamanho de VM de Geração 1 com a virtualização aninhada ativada. Consulte a documentação de tamanhos individuais de VMs para determinar quais os tamanhos de VM da Geração 1 que suportam virtualização aninhada.
      • Em Hyper-V de 2016 ou posterior (fora do Azure), certifique-se de que a sua VM é de Geração 2 (recomendada) ou que é uma VM de Geração 1 com virtualização aninhada ativada. Para mais informações, veja Devo criar uma máquina virtual de geração 1 ou 2 em Hyper-V? e Configurar a virtualização aninhada.
      • No VMware vSphere 6.7 ou posterior, ative o suporte de Segurança Baseada em Virtualização para a VM conforme descrito na documentação do VMware.
      • Outros hipervisores e nuvens públicas podem suportar capacidades de virtualização aninhada que permitem Always Encrypted com VBS Enclaves. Verifique a documentação da sua solução de virtualização para compatibilidade e instruções de configuração.
  • A versão mais recente do SQL Server Management Studio (SSMS). Como alternativa, pode instalar o SSMS noutra máquina.

Advertência

Em ambientes de produção, executar SSMS ou outras ferramentas de gestão de chaves no computador SQL Server pode reduzir os benefícios de segurança de usar o Always Encrypted. Em geral, recomenda-se executar essas ferramentas numa máquina diferente. Para mais informações, consulte Considerações de Segurança para a Gestão de Chaves.

Requisitos do computador HGS

  • Windows Server 2019 Edição Standard ou Datacenter
  • 2 processadores
  • 8 GB de RAM
  • Armazenamento de 100 GB

Observação

O computador HGS não deve estar ligado a um domínio antes de começar.

Passo 1: Configurar o computador HGS

Neste passo, irá configurar o computador HGS para executar o Host Guardian Service que suporta a atestação de chaves de host.

  1. Inicie sessão no computador HGS como administrador (administrador local), abra uma consola PowerShell elevada do Windows e adicione o papel Host Guardian Service executando o seguinte comando:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. Depois de o computador HGS reiniciar, inicie sessão novamente com a sua conta de administrador, abra uma consola PowerShell elevada do Windows e execute os seguintes comandos para instalar o Host Guardian Service e configurar o seu domínio. A palavra-passe que especificar aqui só se aplicará à palavra-passe do Modo de Reparação de Serviços de Diretório para o Active Directory; Não altera a palavra-passe de login da sua conta de administrador. Você pode fornecer qualquer nome de domínio de sua escolha para -HgsDomainName.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Depois de o computador reiniciar, inicia sessão com a tua conta de administrador (que agora também é um Administrador de Domínio). Abra uma consola PowerShell elevada do Windows e configure a atestação da chave de anfitrião para a sua instância HGS.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Encontre o endereço IP do computador HGS executando o seguinte comando. Guarde este endereço IP para passos posteriores.

    Get-NetIPAddress  
    

Observação

Alternativamente, se quiser referenciar o seu computador HGS por um nome DNS, pode configurar um encaminhador dos seus servidores DNS corporativos para o novo controlador de domínio HGS.

Passo 2: Configure o computador SQL Server como um host protegido

Neste passo, vais configurar o computador SQL Server como um host protegido registado no HGS usando atestação de chave de host.

Advertência

A atestação de chave host é considerada um modo de atestação mais fraco. Se possível, deve usar a atestação TPM para ambientes de produção. Para mais informações, veja Modos de Atestado.

  1. Inicie sessão no seu computador SQL Server como administrador, abra uma consola PowerShell elevada do Windows e recupere o nome do seu computador acedendo à variável nome do computador.

    $env:computername 
    
  2. Instala a funcionalidade Anfitrião Protegido, que também instala Hyper-V (caso ainda não esteja instalada).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Reinicie o seu computador SQL Server quando solicitado para concluir a instalação do Hyper-V.

  4. Se o seu computador SQL Server for uma máquina virtual, uma máquina física que não suporta UEFI Secure Boot ou uma máquina física sem IOMMU, deve remover o requisito de VBS para funcionalidades de segurança da plataforma.

    1. Elimine a exigência de Secure Boot e IOMMU executando o seguinte comando no seu computador SQL Server numa consola PowerShell elevada:

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

      Restart-Computer
      
  5. Iniciar sessão novamente no computador SQL Server como administrador, abrir uma consola PowerShell elevada do Windows, gerar uma chave de host única e exportar a chave pública resultante para um ficheiro.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Copie manualmente o ficheiro da chave host, gerado na etapa anterior, para a máquina HGS. As instruções abaixo assumem que o nome do ficheiro é hostkey.cer e que está a copiá-lo para o seu ambiente de trabalho na máquina HGS.

  7. No computador HGS, abra uma consola PowerShell elevada do Windows e registre a chave de anfitrião do seu computador SQL Server com o HGS:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. No computador SQL Server, execute o seguinte comando numa consola elevada do Windows PowerShell, para indicar ao computador SQL Server onde atestar. Certifique-se de especificar o endereço IP ou o nome DNS do seu computador HGS em ambas as localizações de endereço.

    # 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 = Aprovado.

Se receberes um HostUnreachable erro, significa que o teu computador SQL Server não consegue comunicar com o HGS. Certifica-te de que consegues fazer ping ao computador HGS.

Um UnauthorizedHost erro indica que a chave pública não estava registada no servidor HGS. Repita os passos 5 e 6 para resolver o erro.

Se tudo o resto falhar, corre Remove-HgsClientHostKey e repete os passos 4-7.

Passo 3: Ativar a funcionalidade Always Encrypted com enclaves seguros no SQL Server

Neste passo, irá ativar a funcionalidade do Always Encrypted usando enclaves na sua instância do SQL Server.

  1. Usando o SSMS, conecta-te à instância do SQL Server como sysadmin sem o Always Encrypted ativado para a conexão ao banco de dados.

    1. Inicia o SSMS.

    2. No diálogo Ligar ao Servidor , especifique o nome do seu servidor, selecione um método de autenticação e especifique as suas credenciais.

    3. Selecione Opções >> e selecione a Separador Sempre Encriptado.

    4. Verifique se a caixa de seleção Ativar sempre criptografado (criptografia de coluna)não está marcada.

      Captura de ecrã da opção de ligação SSMS para Sempre Encriptado desativada.

    5. Selecione Conectar.

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

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Reinicie a sua instância do SQL Server para que a alteração anterior tenha efeito. Podes reiniciar a instância no SSMS clicando com o botão direito no Explorador de Objetos e selecionando Reiniciar. Quando a instância reiniciar, volta a ligar-se a ela.

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

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

    A consulta deve devolver o seguinte resultado:

    nome valor valor_em_uso
    tipo de enclave de encriptação de coluna 1 1

Passo 4: Criar uma base de dados de exemplo

Neste passo, irá criar uma base de dados com alguns dados de exemplo, que irá encriptar mais tarde.

  1. Usando a instância SSMS do passo anterior, execute a instrução abaixo numa janela de consulta para criar uma nova base de dados, chamada ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Crie uma nova tabela, chamada Colaboradores.

    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 registos de colaboradores à tabela de Colaboradores .

    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);
    

Passo 5: Provisionar chaves compatíveis com enclave

Nesta etapa, você criará uma chave mestra de coluna e uma chave de criptografia de coluna que permitem cálculos de enclave.

  1. Usando a instância do SSMS da etapa anterior, em Explorador de Objetos, expanda a sua base de dados e navegue até Segurança>Chaves Sempre Criptografadas.

  2. Configure uma nova chave mestra de coluna com suporte para enclave.

    1. Clique com o botão direito do mouse Chaves Sempre Criptografadas e selecione Nova Chave Mestra de Coluna....

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

    3. Certifica-te de que escolhes ou Windows Certificate Store (Utilizador Atual ou Máquina Local) ou Azure Key Vault.

    4. Selecione Permitir cálculos de enclave.

    5. Se selecionaste Azure Key Vault, inicia sessão no Azure e seleciona o teu cofre de chaves. Para mais informações sobre como criar um cofre de chaves para o Always Encrypted, consulte Gerir os seus cofres de chaves a partir do portal Azure.

    6. Selecione o seu certificado ou a chave Azure Key Value se já existir, ou selecione o botão Gerar Certificado para criar uma nova.

    7. Selecione OK.

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

  3. Crie uma nova chave de criptografia de coluna com suporte para enclave

    1. Clique com o botão direito do rato em Chaves Sempre Encriptadas e selecione Nova Chave de Encriptação de Coluna .
    2. Insira um nome para a nova chave de encriptação da coluna: CEK1.
    3. No menu suspenso da chave mestra da coluna , selecione a chave mestra da coluna que criou nos passos anteriores.
    4. Selecione OK.

Passo 6: Encripte algumas colunas no local

Neste passo, irá encriptar os dados armazenados nas colunas SSN e Salário dentro do enclave do lado do servidor, e depois testar uma consulta SELECT sobre os dados.

  1. Abra uma nova instância do SSMS e ligue-se à sua instância do SQL Server com Always Encrypted ativado para a ligação à base de dados.

    1. Inicie uma nova instância do SSMS.

    2. No diálogo Ligar ao Servidor , especifique o nome do seu servidor, selecione um método de autenticação e especifique as suas credenciais.

    3. Selecione Opções >> e selecione a Separador Sempre Encriptado.

    4. Marque a caixa de seleção Ativar Sempre Criptografado (criptografia de coluna).

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

    6. Defina o protocolo para Host Guardian Service. (Esta etapa se aplica ao SSMS 19 ou posterior.)

    7. Especifique o URL de atestação do enclave (por exemplo, http:// hgs.bastion.local/Attestation).

      Captura de ecrã do separador

    8. Selecione Conectar.

    9. Se lhe for pedido para ativar a Parametrização para consultas Sempre Encriptadas, selecione Ativar.

  2. Usando a mesma instância SSMS (com Sempre Encriptado ativado), abra uma nova janela de consulta e encripte 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 a cache de planos de execução da base de dados no script acima. Depois de alterar a tabela, precisa de eliminar os planos de todos os batches e procedimentos armazenados que acedam à tabela, para atualizar a informação de encriptação dos parâmetros.

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

    SELECT * FROM [HR].[Employees];
    

Passo 7: Execute consultas avançadas contra colunas encriptadas

Agora, pode executar consultas detalhadas contra as colunas encriptadas. Algum processamento de consulta será realizado dentro do seu enclave do lado do servidor.

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

    1. Selecione Ferramentas no menu principal do SSMS.
    2. Selecione Opções....
    3. Navegue até Execução de Consulta>SQL Server>Avançado.
    4. Certifique-se de que a opção Habilitar Parametrização para Always Encrypted está 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 atendam aos 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. Tenta a mesma consulta novamente na instância SSMS que não tem o Always Encrypted ativado, e nota a falha que ocorre.

Próximos passos

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

Consulte também