Självstudie: Komma igång med Always Encrypted med säkra enklaver i SQL Server med attestering med HGS

gäller för: SQL Server 2019 (15.x) och senare – endast Windows

I den här självstudien lär du dig hur du kommer igång med Always Encrypted med säkra enklaver i SQL Server med hjälp av Host Guardian Service (HGS) för enklavattestering. Den visar dig:

  • Så här skapar du en grundläggande miljö för testning och utvärdering av Always Encrypted med säkra enklaver med HGS konfigurerat för enklavattestering.
  • Så här krypterar du data på plats och utfärdar omfattande konfidentiella frågor mot krypterade kolumner med hjälp av SQL Server Management Studio (SSMS).

Om du vill lära dig hur du konfigurerar Always Encrypted med säkra enklaver utan attestering kan du läsa Självstudie: Komma igång med Always Encrypted med säkra enklaver i SQL Server.

Förutsättningar

För att komma igång med Always Encrypted med säkra enklaver behöver du minst två datorer (de kan vara virtuella datorer):

  • SQL Server-datorn som ska vara värd för SQL Server och SSMS.
  • HGS-datorn för att köra Host Guardian Service, som behövs för enklavattestering.

Datorkrav för SQL Server

  • SQL Server 2019 (15.x) eller senare.
  • Windows 10, version 1809 eller senare – Enterprise Edition, Windows 11 eller senare – Enterprise Edition, Windows Server 2019 eller senare – Datacenter edition. Andra utgåvor av Windows 10/11 och Windows Server stöder inte attestering med HGS.
  • CPU-stöd för virtualiseringstekniker:
    • Intel VT-x med utökade sidtabeller.
    • AMD-V med snabb virtualiseringsindexering.
    • Om du kör SQL Server på en virtuell dator:
      • I Azure använder du en vm-storlek för generation 2 (rekommenderas) eller använder en vm-storlek av generation 1 med kapslad virtualisering aktiverad. Kontrollera dokumentationen om enskilda VM-storlekar för att avgöra vilka vm-storlekar i generation 1 som stöder kapslad virtualisering.
      • På Hyper-V 2016 eller senare (utanför Azure) kontrollerar du att den virtuella datorn är en virtuell dator av generation 2 (rekommenderas) eller att det är en virtuell dator av generation 1 med kapslad virtualisering aktiverad. Mer information finns i Ska jag skapa en virtuell dator av generation 1 eller 2 i Hyper-V? och Konfigurera kapslad virtualisering.
      • På VMware vSphere 6.7 eller senare aktiverar du stöd för virtualiseringsbaserad säkerhet för den virtuella datorn enligt beskrivningen i VMware-dokumentationen.
      • Andra hypervisor-program och offentliga moln kan ha stöd för kapslade virtualiseringsfunktioner som även aktiverar Always Encrypted med VBS-enklaver. I dokumentationen för virtualiseringslösningen finns kompatibilitets- och konfigurationsinstruktioner.
  • Den senaste versionen av SQL Server Management Studio (SSMS). Alternativt kan du installera SSMS på en annan dator.

Varning

I produktionsmiljöer kan körning av SSMS eller andra viktiga hanteringsverktyg på SQL Server-datorn minska säkerhetsfördelarna med att använda Always Encrypted. I allmänhet rekommenderas att du kör sådana verktyg på en annan dator. Mer information finns i Säkerhetsöverväganden för nyckelhantering.

HGS-datorkrav

  • Windows Server 2019 Standard eller Datacenter edition
  • 2 processorer
  • 8 GB RAM-minne
  • 100 GB lagringsutrymme

Anmärkning

HGS-datorn bör inte vara ansluten till en domän innan du börjar.

Steg 1: Konfigurera HGS-datorn

I det här steget konfigurerar du HGS-datorn så att värdskyddstjänsten stöder värdnyckelattestering.

  1. Logga in på HGS-datorn som administratör (lokal administratör), öppna en upphöjd Windows PowerShell-konsol och lägg till rollen Värdskyddstjänst genom att köra följande kommando:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. När HGS-datorn har startats om loggar du in med ditt administratörskonto igen, öppnar en upphöjd Windows PowerShell-konsol och kör följande kommandon för att installera Tjänsten Värdskydd och konfigurera dess domän. Lösenordet som du anger här gäller endast för lösenordet för reparationsläget för Directory Services för Active Directory. det ändrar inte administratörskontots inloggningslösenord. Du kan ange valfritt domännamn för -HgsDomainName.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. När datorn har startats om igen loggar du in med ditt administratörskonto (som nu också är domänadministratör). Öppna en upphöjd Windows PowerShell-konsol och konfigurera värdnyckelattestering för din HGS-instans.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Hitta IP-adressen för HGS-datorn genom att köra följande kommando. Spara den här IP-adressen för senare steg.

    Get-NetIPAddress  
    

Anmärkning

Om du vill referera till din HGS-dator med ett DNS-namn kan du också konfigurera en vidarebefordrare från företagets DNS-servrar till den nya HGS-domänkontrollanten.

Steg 2: Konfigurera SQL Server-datorn som en skyddad värd

I det här steget konfigurerar du SQL Server-datorn som en skyddad värd som registrerats med HGS med värdnyckelattestering.

Varning

Värdnyckelverifiering anses vara ett svagare verifieringsläge. Om möjligt bör du använda TPM-attestering för produktionsmiljöer. Mer information finns i Attesteringslägen.

  1. Logga in på SQL Server-datorn som administratör, öppna en upphöjd Windows PowerShell-konsol och hämta namnet på datorn genom att komma åt variabeln datornamn.

    $env:computername 
    
  2. Installera funktionen Skyddad värd, som även installerar Hyper-V (om den inte redan är installerad).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Starta om SQL Server-datorn när du uppmanas att slutföra installationen av Hyper-V.

  4. Om DIN SQL Server-dator är en virtuell dator, en fysisk dator som inte stöder säker UEFI-start eller en fysisk dator som inte är utrustad med en IOMMU, måste du ta bort VBS-kravet för plattformssäkerhetsfunktioner.

    1. Ta bort kravet på säker start och IOMMU genom att köra följande kommando på SQL Server-datorn i en upphöjd PowerShell-konsol:

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Starta om SQL Server-datorn igen för att få VBS att komma online med de lägre kraven.

      Restart-Computer
      
  5. Logga in på SQL Server-datorn som administratör igen, öppna en upphöjd Windows PowerShell-konsol, generera en unik värdnyckel och exportera den resulterande offentliga nyckeln till en fil.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Kopiera värdnyckelfilen manuellt, som genererades i föregående steg, till HGS-datorn. Anvisningarna nedan förutsätter att filnamnet är hostkey.cer och att du kopierar det till skrivbordet på HGS-datorn.

  7. Öppna en upphöjd Windows PowerShell-konsol på HGS-datorn och registrera värdnyckeln för SQL Server-datorn med HGS:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. På SQL Server-datorn kör du följande kommando i en upphöjd Windows PowerShell-konsol för att tala om för SQL Server-datorn var du ska intyga. Kontrollera att du anger IP-adressen eller DNS-namnet på din HGS-dator på båda adressplatserna.

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

Resultatet av kommandot ovan bör visa att AttestationStatus = Godkänd.

Om du får ett HostUnreachable fel innebär det att SQL Server-datorn inte kan kommunicera med HGS. Kontrollera att du kan pinga HGS-datorn.

Ett UnauthorizedHost fel anger att den offentliga nyckeln inte har registrerats med HGS-servern. Upprepa steg 5 och 6 för att lösa felet.

Om allt annat misslyckas, kör du Remove-HgsClientHostKey och upprepa steg 4–7.

Steg 3: Aktivera Always Encrypted med säkra enklaver i SQL Server

I det här steget aktiverar du funktionerna i Always Encrypted med enklaver i SQL Server-instansen.

  1. Använd SSMS och anslut till din SQL Server-instans som sysadmin utan att Always Encrypted är aktiverat för databasanslutningen.

    1. Starta SSMS.

    2. I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.

    3. Välj Alternativ >> och välj fliken Alltid krypterad .

    4. Kontrollera att kryssrutan Aktivera Always Encrypted (kolumnkryptering) inte är markerad .

      Skärmbild av SSMS-anslutningsalternativet för Always Encrypted inaktiverat.

    5. Välj Anslut.

  2. Öppna ett nytt frågefönster och kör instruktionen nedan för att ange den säkra enklavens typ till virtualiseringsbaserad säkerhet (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Starta om SQL Server-instansen för att den tidigare ändringen ska börja gälla. Du kan starta om instansen i SSMS genom att högerklicka på den i Object Explorer och välja Starta om. När instansen har startats om återansluter du till den.

  4. Bekräfta att den säkra enklaven nu har laddats genom att köra följande fråga:

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

    Frågan ska returnera följande resultat:

    name värde bruksvärde
    krypteringsenklavtyp för kolumn 1 1

Steg 4: Skapa en exempeldatabas

I det här steget skapar du en databas med exempeldata som du krypterar senare.

  1. Använd SSMS-instansen från föregående steg och kör instruktionen nedan i ett frågefönster för att skapa en ny databas med namnet ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Skapa en ny tabell med namnet Anställda.

    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. Lägg till några personalposter i tabellen Anställda.

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

Steg 5: Etablera enklaveraktiverade nycklar

I det här steget skapar du en kolumnhuvudnyckel och en kolumnkrypteringsnyckel som tillåter enklaverberäkningar.

  1. Med hjälp av SSMS-instansen från föregående steg i Object Explorerexpanderar du databasen och navigerar till Security>Always Encrypted Keys.

  2. Etablera en ny huvudnyckel för enklaveraktiverad kolumn:

    1. Högerklicka på Always Encrypted Keys och välj Ny kolumnhuvudnyckel....

    2. Välj kolumnhuvudnyckelnamnet: CMK1.

    3. Kontrollera att du väljer Antingen Windows Certificate Store (aktuell användare eller lokal dator) eller Azure Key Vault.

    4. Välj Tillåt enklaverberäkningar.

    5. Om du har valt Azure Key Vault loggar du in på Azure och väljer ditt nyckelvalv. Mer information om hur du skapar ett nyckelvalv för Always Encrypted finns i Hantera dina nyckelvalv från Azure-portalen.

    6. Välj certifikatet eller Azure Key Value-nyckeln om den redan finns eller välj knappen Generera certifikat för att skapa ett nytt.

    7. Välj OK.

      Skärmbild av valet Tillåt enklaverberäkningar i SSMS när du skapar en ny kolumnhuvudnyckel.

  3. Skapa en ny enklavaktiverad kolumnkrypteringsnyckel:

    1. Högerklicka på Always Encrypted Keys och välj ny kolumnkrypteringsnyckel.
    2. Ange ett namn för den nya kolumnkrypteringsnyckeln: CEK1.
    3. I listrutan Kolumnhuvudnyckel väljer du den kolumnhuvudnyckel som du skapade i föregående steg.
    4. Välj OK.

Steg 6: Kryptera vissa kolumner på plats

I det här steget krypterar du data som lagras i kolumnerna SSN och Salary i enklaven på serversidan och testar sedan en SELECT-fråga på data.

  1. Öppna en ny SSMS-instans och anslut till SQL Server-instansen med Always Encrypted aktiverat för databasanslutningen.

    1. Starta en ny instans av SSMS.

    2. I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.

    3. Välj Alternativ >> och välj fliken Alltid krypterad .

    4. Markera kryssrutan Aktivera Always Encrypted (kolumnkryptering).

    5. Välj Aktivera säkra enklaver. (Det här steget gäller för SSMS 19 eller senare.)

    6. Ange Protokoll till Värdskyddstjänst. (Det här steget gäller för SSMS 19 eller senare.)

    7. Ange URL för enklavattestering (till exempel http://hgs.bastion.local/Attestation).

      Skärmbild av fliken Anslut till servern Always Encrypted med attestering med hjälp av SSMS.

    8. Välj Anslut.

    9. Om du uppmanas att aktivera parameterisering för Always Encrypted-frågor väljer du Aktivera.

  2. Med samma SSMS-instans (med Always Encrypted aktiverat) öppnar du ett nytt frågefönster och krypterar kolumnerna SSN och Salary genom att köra frågorna nedan.

    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;
    

    Anmärkning

    Observera instruktionen ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE för att rensa cacheminnet för frågeplanen för databasen i skriptet ovan. När du har ändrat tabellen måste du rensa planerna för alla batchar och lagrade procedurer som har åtkomst till tabellen för att uppdatera krypteringsinformation för parametrar.

  3. Om du vill kontrollera att kolumnerna SSN och Salary nu är krypterade öppnar du ett nytt frågefönster i SSMS-instansen utan Always Encrypted aktiverat för databasanslutningen och kör instruktionen nedan. Frågefönstret ska returnera krypterade värden i kolumnerna SSN och Salary . Om du kör samma fråga med SSMS-instansen med Always Encrypted aktiverat bör du se dekrypterade data.

    SELECT * FROM [HR].[Employees];
    

Steg 7: Kör omfattande frågor mot krypterade kolumner

Nu kan du köra omfattande frågor mot de krypterade kolumnerna. En del frågebearbetning utförs i din säkra miljö i serversidan.

  1. I SSMS-instansen med Always Encrypted aktiverat kontrollerar du att parameterisering för Always Encrypted också är aktiverad.

    1. Välj Verktyg på huvudmenyn i SSMS.
    2. Välj alternativ....
    3. Gå till Frågekörning>SQL Server>Avancerad.
    4. Kontrollera att Aktivera parameterisering för Always Encrypted är markerat.
    5. Välj OK.
  2. Öppna ett nytt frågefönster, klistra in och kör frågan nedan. Frågan ska returnera oformaterade värden och rader som uppfyller de angivna sökvillkoren.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Försök med samma fråga igen i SSMS-instansen som inte har Always Encrypted aktiverat och notera felet som inträffar.

Nästa steg

När du har slutfört den här självstudien kan du fortsätta med någon av följande självstudier:

Se även