Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in SQL Server mit Nachweis per HGS

Gilt für: SQL Server 2019 (15.x) und höher – nur Windows

In diesem Lernprogramm erfahren Sie, wie Sie mit Always Encrypted mit sicheren Enklaven in SQL Server mit Host Guardian Service (HGS) für den Enklavennachweis beginnen. Es wird Folgendes gezeigt:

  • Erstellen einer grundlegenden Umgebung zum Testen und Auswerten von Always Encrypted mit sicheren Enklaven mit HGS, die für den Enklavennachweis konfiguriert sind.
  • Direktes Verschlüsseln von Daten und Ausgeben umfangreicher vertraulicher Abfragen für verschlüsselte Spalten mithilfe von SQL Server Management Studio (SSMS)

Wenn Sie erfahren möchten, wie Sie Always Encrypted mit sicheren Enklaven ohne Nachweis einrichten, lesen Sie Lernprogramm: Erste Schritte mit always Encrypted with secure enklaves in SQL Server.

Voraussetzungen

Für die ersten Schritte mit Always Encrypted mit Secure Enclaves benötigen Sie mindestens zwei Computer (dies können virtuelle Computer sein):

  • SQL Server-Computer als Host für SQL Server und SSMS
  • HGS-Computer zum Ausführen des Host-Überwachungsdiensts, der für den Enclave-Nachweis erforderlich ist

SQL Server-Computeranforderungen

  • SQL Server 2019 (15.x) oder höher.
  • Windows 10, Version 1809 oder höher – Enterprise Edition, Windows 11 oder höher – Enterprise Edition, Windows Server 2019 oder höher – Datacenter Edition. Andere Editionen von Windows 10/11 und Windows Server unterstützen keinen HGS-Nachweis.
  • CPU-Unterstützung für Virtualisierungstechnologien:
    • Intel VT-x mit erweiterten Seitentabellen
    • AMD-V mit schneller Virtualisierungsindizierung
    • Wenn Sie SQL Server in einer VM ausführen:
      • Verwenden Sie in Azure eine VM-Größe der Generation 2 (empfohlen) oder eine VM-Größe der Generation 1 mit aktivierter geschachtelter Virtualisierung. Der Dokumentation zu den einzelnen VM-Größen können Sie entnehmen, welche VM-Größen der Generation 1 die geschachtelte Virtualisierung unterstützen.
      • Stellen Sie auf Hyper-V 2016 oder höher (außerhalb von Azure) sicher, dass Ihre VM eine VM der Generation 2 ist (empfohlen) oder dass es sich um eine VM der Generation 1 handelt, auf der geschachtelte Virtualisierung aktiviert ist. Weitere Informationen finden Sie unter Soll ich in Hyper-V einen virtuellen Computer der 1. oder der 2. Generation erstellen? und unter Konfigurieren der geschachtelten Virtualisierung.
      • Aktivieren Sie bei VMware vSphere 6.7 oder höher die Unterstützung für virtualisierungsbasierte Sicherheit für den virtuellen Computer, wie in der VMware-Dokumentation beschrieben.
      • Andere Hypervisoren und öffentliche Clouds unterstützen möglicherweise Funktionen für eine geschachtelte Virtualisierung, die auch die Nutzung von Always Encrypted mit VSB-Enclaves ermöglichen. Informationen zur Kompatibilität und Konfigurationsanweisungen finden Sie in der Dokumentation zu Ihrer Virtualisierungslösung.
  • Die aktuelle Version von SQL Server Management Studio (SSMS). Alternativ können Sie SSMS auf einem anderen Computer installieren.

Warnung

In Produktionsumgebungen kann die Ausführung von SSMS oder anderen Schlüsselverwaltungstools auf dem SQL Server-Computer die Sicherheitsvorteile der Verwendung von Always Encrypted verringern. Im Allgemeinen wird empfohlen, Tools dieser Art auf einem anderen Computer auszuführen. Weitere Informationen finden Sie im Abschnitt Security Considerations for Key Management(Überlegungen zur Sicherheit für die Schlüsselverwaltung).

HGS-Computeranforderungen

  • Windows Server 2019 Standard oder Datacenter Edition
  • 2 CPUs
  • 8 GB RAM
  • 100 GB Speicher

Hinweis

Der HGS-Computer sollte nicht mit einer Domäne verknüpft werden, bevor Sie beginnen.

Schritt 1: Konfigurieren des HGS-Computers

In diesem Schritt konfigurieren Sie den HGS-Computer zum Ausführen des Host-Überwachungsdiensts, der den Hostschlüsselnachweis unterstützt.

  1. Melden Sie sich beim HGS-Computer als Administrator (lokaler Administrator) an, öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, und fügen Sie die Rolle für den Host-Überwachungsdienst hinzu, indem Sie den folgenden Befehl ausführen:

    Install-WindowsFeature -Name HostGuardianServiceRole -IncludeManagementTools -Restart
    
  2. Nachdem der HGS-Computer neu gestartet wurde, melden Sie sich erneut mit Ihrem Administratorkonto an, öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, und führen Sie die folgenden Befehle aus, um den Host Guardian Service zu installieren und seine Domäne zu konfigurieren. Das hier von Ihnen angegebene Kennwort gilt nur für das Kennwort des Reparaturmodus für Verzeichnisdienste für Active Directory. Das Anmeldekennwort Ihres Administratorkontos wird dadurch nicht geändert. Sie können einen Domänennamen Ihrer Wahl für „-HgsDomainName“ angeben.

    $adminPassword = ConvertTo-SecureString -AsPlainText '<password>' -Force
    Install-HgsServer -HgsDomainName 'bastion.local' -SafeModeAdministratorPassword $adminPassword -Restart
    
  3. Nachdem der Computer erneut gestartet wurde, melden Sie sich mit Ihrem Administratorkonto an (das ist jetzt auch ein Domänenadministrator). Öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, und konfigurieren Sie den Hostschlüsselnachweis für Ihre HGS-Instanz.

    Initialize-HgsAttestation -HgsServiceName 'hgs' -TrustHostKey  
    
  4. Führen Sie den folgenden Befehl aus, um die IP-Adresse des HGS-Computers zu suchen. Speichern Sie diese IP-Adresse für spätere Schritte.

    Get-NetIPAddress  
    

Hinweis

Wenn Sie auf Ihren HGS-Computer mit einem DNS-Namen verweisen möchten, können Sie eine Weiterleitung von den DNS-Servern Ihres Unternehmens an den neuen HGS-Domänencontroller einrichten.

Schritt 2: Konfigurieren des SQL Server-Computers als überwachter Host

In diesem Schritt konfigurieren Sie den SQL Server-Computer als überwachten Host, der beim Host-Überwachungsdienst mit Hostschlüsselnachweis registriert ist.

Warnung

Der Hostschlüsselnachweis wird als schwächerer Nachweismodus betrachtet. Für Produktionsumgebungen sollten Sie nach Möglichkeit den TPM-Nachweis verwenden. Weitere Informationen finden Sie unter Nachweismodi.

  1. Melden Sie sich beim SQL Server-Computer als Administrator an. Öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, und rufen Sie den Namen Ihres Computers durch Zugreifen auf die Variable „computername“ ab.

    $env:computername 
    
  2. Installieren Sie das Feature für überwachte Hosts, mit dem auch Hyper-V installiert wird (sofern nicht bereits erfolgt).

    Enable-WindowsOptionalFeature -Online -FeatureName HostGuardian -All
    
  3. Starten Sie den SQL Server-Computer bei Aufforderung erneut, um die Installation von Hyper-V abzuschließen.

  4. Wenn Ihr SQL Server-Computer eine VM oder ein physischer Computer ist, der keinen sicheren UEFI-Start unterstützt oder nicht mit IOMMU ausgestattet ist, müssen Sie die VBS-Anforderung für die Plattformsicherheitsfeatures entfernen.

    1. Entfernen Sie die Anforderung für den sicheren Start und IOMMU, indem Sie den folgenden Befehl auf Ihrem SQL Server-Computer in einer PowerShell-Konsolenanwendung mit erhöhten Rechten ausführen:

      Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
      
    2. Starten Sie den SQL Server-Computer neu, damit VBS mit den niedrigeren Anforderungen online geht.

      Restart-Computer
      
  5. Melden Sie sich erneut beim SQL Server-Computer als Administrator an, öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, generieren Sie einen eindeutigen Hostschlüssel, und exportieren Sie den resultierenden öffentlichen Schlüssel in eine Datei.

    Set-HgsClientHostKey 
    Get-HgsClientHostKey -Path $HOME\Desktop\hostkey.cer
    
  6. Kopieren Sie manuell die Hostschlüsseldatei, die im vorherigen Schritt generiert wurde, auf den HGS-Computer. Bei den folgenden Anweisungen wird davon ausgegangen, dass der Dateiname hostkey.cer lautet und Sie diese Datei auf Ihren Desktop auf dem HGS-Computer kopieren.

  7. Öffnen Sie auf dem HGS-Computer eine Windows PowerShell-Konsole mit erhöhten Rechten, und registrieren Sie den Hostschlüssel Ihres SQL Server-Computers beim Host-Überwachungsdienst:

    Add-HgsAttestationHostKey -Name <your SQL Server computer name> -Path $HOME\Desktop\hostkey.cer
    
  8. Führen Sie auf dem SQL Server-Computer den folgenden Befehl in einer Windows PowerShell-Konsole mit erhöhten Rechten aus, um dem SQL Server-Computer den Ort für den Nachweis anzugeben. Vergewissern Sie sich, dass Sie die IP-Adresse oder den DNS-Namen des HSG-Computers an beiden Adressstellen angeben.

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

Das Ergebnis des oben gezeigten Befehls sollte „AttestationStatus = Passed“ lauten.

Wenn ein HostUnreachable Fehler auftritt, bedeutet dies, dass Ihr SQL Server-Computer nicht mit HGS kommunizieren kann. Stellen Sie sicher, dass Sie den HGS Computer pingen können.

Ein UnauthorizedHost Fehler gibt an, dass der öffentliche Schlüssel nicht beim HGS-Server registriert wurde. Wiederholen Sie die Schritte 5 und 6, um den Fehler zu beheben.

Wenn alles andere fehlschlägt, führen Sie Remove-HgsClientHostKey die Schritte 4-7 aus, und wiederholen Sie sie.

Schritt 3: Aktivieren von Always Encrypted mit Secure Enclaves in SQL Server

In diesem Schritt aktivieren Sie die Funktionen von Always Encrypted mithilfe von Enclaves in Ihrer SQL Server-Instanz.

  1. Verbinden Sie sich per SSMS als „sysadmin“ mit Ihrer SQL Server-Instanz, ohne dass Always Encrypted für die Datenverbindung aktiviert ist.

    1. Starten Sie SSMS.

    2. Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.

    3. Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.

    4. Stellen Sie sicher, dass das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung)nicht ausgewählt ist.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Wählen Sie Verbinden aus.

  2. Öffnen Sie ein neues Abfragefenster, und führen Sie die folgende Anweisung aus, um den sicheren Enklaventyp auf virtualisierungsbasierte Sicherheit (VBS) festzulegen.

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Starten Sie Ihre SQL Server-Instanz neu, damit die vorherige Änderung übernommen wird. Sie können die Instanz in SSMS neu starten, indem Sie im Objekt-Explorer mit der rechten Maustaste darauf klicken und „Neustart“ auswählen. Stellen Sie nach dem Neustart der Instanz eine neue Verbindung her.

  4. Vergewissern Sie sich, dass die Secure Enclave geladen ist, indem Sie die folgende Abfrage ausführen:

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

    Die Abfrage sollte folgendes Ergebnis haben:

    name value value_in_use
    column encryption enclave type 1 1

Schritt 4: Erstellen einer Beispieldatenbank

In diesem Schritt erstellen Sie eine Datenbank mit einigen Beispieldaten, die Sie später verschlüsseln.

  1. Führen Sie unter Verwendung der SSMS-Instanz aus dem vorherigen Schritt die folgende Anweisung in einem Abfragefenster aus, um eine neue Datenbank mit dem Namen ContosoHR zu erstellen.

    CREATE DATABASE [ContosoHR];
    
  2. Erstellen Sie eine neue Tabelle mit dem Namen Employees.

    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. Fügen Sie der Tabelle Employees einige Mitarbeiterdatensätze hinzu.

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

Schritt 5: Bereitstellen Enclave-fähiger Schlüssel

In diesem Schritt erstellen Sie einen Spaltenhauptschlüssel und einen Spaltenverschlüsselungsschlüssel, die Enclave-Berechnungen zulassen.

  1. Erweitern Sie Ihre Datenbank im Objekt-Explorer mit der SSMS-Instanz aus dem vorherigen Schritt, und navigieren Sie zu Sicherheit>Always Encrypted-Schlüssel.

  2. Stellen Sie einen neuen Enclave-fähigen Spaltenhauptschlüssel bereit:

    1. Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenhauptschlüssel aus.

    2. Wählen Sie den Namen des Spaltenhauptschlüssels aus: CMK1.

    3. Stellen Sie sicher, dass Sie entweder Windows-Zertifikatspeicher (Aktueller Benutzer oder lokaler Computer) oder Azure Key Vault auswählen.

    4. Wählen Sie Enclave-Berechnungen zulassen.

    5. Wenn Sie Azure Key Vault ausgewählt haben, melden Sie sich bei Azure an, und wählen Sie Ihren Schlüsseltresor. Weitere Informationen zum Erstellen eines Schlüsseltresors für Always Encrypted finden Sie unter Verwalten Ihrer Schlüsseltresore im Azure-Portal.

    6. Wählen Sie Ihr Zertifikat oder Ihren Azure-Schlüsselwertschlüssel aus, wenn bereits vorhanden, oder klicken Sie auf die Schaltfläche Zertifikat generieren, um ein neues zu erstellen.

    7. Klicken Sie auf OK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Erstellen Sie einen neuen Enclave-fähigen Spaltenverschlüsselungsschlüssel:

    1. Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenverschlüsselungsschlüssel.
    2. Geben Sie einen Namen für den neuen Spaltenverschlüsselungsschlüssel ein: CEK1.
    3. Wählen Sie in der Dropdownliste Spaltenhauptschlüssel den in den vorherigen Schritten erstellten Spaltenhauptschlüssel.
    4. Klicken Sie auf OK.

Schritt 6: Direktes Verschlüsseln einiger Spalten

In diesem Schritt verschlüsseln Sie die in den Spalten SSN und Salary gespeicherten Daten in der serverseitigen Enclave und testen dann eine SELECT-Abfrage der Daten.

  1. Öffnen Sie eine neue SSMS-Instanz, und verbinden Sie sich mit Ihrer SQL Server-Instanz, wenn Always Encrypted für die Datenverbindung aktiviert ist.

    1. Starten Sie eine neue SSMS-Instanz.

    2. Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.

    3. Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.

    4. Aktivieren Sie das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung).

    5. Wählen Sie Secure Enclaves aktivieren aus. (Dieser Schritt gilt ab SSMS 19.)

    6. Legen Sie das Protokoll auf host Guardian Service fest. (Dieser Schritt gilt ab SSMS 19.)

    7. Geben Sie Ihre Enklavennachweis-URL an (z. B. http:// hgs.bastion.local/Attestation).

      Screenshot of the connect to server Always Encrypted tab with attestation using SSMS.

    8. Wählen Sie Verbinden aus.

    9. Wenn Sie aufgefordert werden, die Parametrisierung für Always Encrypted zu aktivieren, wählen Sie Aktivieren aus.

  2. Öffnen Sie mit derselben SSMS-Instanz (Always Encrypted ist aktiviert) ein neues Abfragefenster, und verschlüsseln Sie die Spalten SSN und Salary, indem Sie die folgenden Abfragen ausführen.

    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;
    

    Hinweis

    Achten Sie auf die ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE-Anweisung, die den Abfrageplancache für die Datenbank im obigen Skript löscht. Nachdem Sie die Tabelle bearbeitet haben, müssen Sie die Pläne für alle Batches und gespeicherten Prozeduren leeren, die Zugriff auf die Tabelle haben, um die Informationen für die Parameterverschlüsselung zu aktualisieren.

  3. Um zu überprüfen, ob die Spalten SSN und Salary nun verschlüsselt sind, öffnen Sie ein neues Abfragefenster in der SSMS-Instanz, ohne dass Always Encrypted für die Datenbankverbindung aktiviert ist, und führen Sie die folgende Anweisung aus. Das Abfragefenster sollte verschlüsselte Werte in den Spalten SSN und Salary zurückgeben. Wenn Sie die gleiche Abfrage mit der SSMS-Instanz ausführen, bei der Always Encrypted aktiviert ist, sollten die Daten entschlüsselt angezeigt werden.

    SELECT * FROM [HR].[Employees];
    

Schritt 7: Ausführen umfangreicher Abfragen für verschlüsselte Spalten

Sie können nun umfangreiche Abfragen für verschlüsselte Spalten ausführen. Ein Teil der Abfrageverarbeitung wird in der serverseitigen Enclave ausgeführt.

  1. Stellen Sie in der SSMS-Instanz mit aktiviertem Always Encrypted sicher, dass auch die Parametrisierung für Always Encrypted aktiviert ist.

    1. Wählen Sie im Hauptmenü von SSMS Tools aus.
    2. Wählen Sie Optionen... aus.
    3. Navigieren Sie zu Abfrageausführung>SQL Server>Erweitert.
    4. Stellen Sie sicher, dass Parametrisierung für Always Encrypted aktivieren aktiviert ist.
    5. Klicken Sie auf OK.
  2. Öffnen Sie ein neues Abfragefenster, fügen Sie die folgenden Abfrage ein, und führen Sie sie anschließend aus. Die Abfrage sollte Klartextwerte und Zeilen zurückgeben, die den angegebenen Suchkriterien entsprechen.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Versuchen Sie dieselbe Abfrage noch mal in der SSMS-Instanz, in der Always Encrypted nicht aktiviert ist, und notieren Sie den auftretenden Fehler.

Nächste Schritte

Nachdem Sie dieses Tutorial abgeschlossen haben, können Sie mit einem der folgenden Tutorials fortfahren:

Siehe auch