Tutorial: Erste Schritte mit Always Encrypted mit Intel SGX-Enclaves in Azure SQL-Datenbank

Gilt für: Azure SQL-Datenbank

In diesem Tutorial werden Ihnen die erste Schritte mit Always Encrypted mit Secure Enclaves in Azure SQL-Datenbank vermittelt. Sie verwenden Intel SGX-Enclaves (Intel Software Guard Extensions). Es wird Folgendes gezeigt:

  • Erstellen einer Umgebung zum Testen und Auswerten von Always Encrypted mit Intel SGX-Enclaves
  • Direktes Verschlüsseln von Daten und Ausgeben umfangreicher vertraulicher Abfragen für verschlüsselte Spalten mithilfe von SQL Server Management Studio (SSMS)

Voraussetzungen

PowerShell-Anforderungen

Hinweis

Die in diesem Abschnitt aufgeführten Voraussetzungen gelten nur, wenn Sie PowerShell für einige der Schritte in diesem Tutorial verwenden möchten. Wenn Sie stattdessen das Azure-Portal verwenden möchten, können Sie diesen Abschnitt überspringen.

Das Az PowerShell-Modul Version 9.3.0 oder höher ist erforderlich. Ausführliche Informationen zum Installieren des Az-Moduls von PowerShell finden Sie unter Installieren des Azure Az PowerShell-Moduls. Führen Sie den folgenden Befehl in PowerShell aus, um die Version des Az PowerShell-Moduls zu ermitteln, die auf Ihrem Computer installiert ist.

Get-InstalledModule -Name Az

Schritt 1: Erstellen und Konfigurieren eines Servers und einer Datenbank der DC-Serie

In diesem Schritt erstellen Sie unter Verwendung von Hardware der DC-Serie einen neuen logischen Azure SQL-Datenbank-Server und eine neue Datenbank. Beides wird für Always Encrypted mit Secure Enclaves benötigt. Weitere Informationen finden Sie unter DC-Serie.

  1. Navigieren Sie zur Seite SQL-Bereitstellungsoption auswählen.

  2. Wenn Sie nicht schon im Azure-Portal angemeldet sind, melden Sie sich nach der entsprechenden Aufforderung an.

  3. Behalten Sie unter SQL-Datenbanken für Einzeldatenbank den festgelegten Wert Ressourcentyp bei, und wählen Sie Erstellen aus.

    Screenshot des Azure-Portals mit der Option für das Hinzufügen zu einer Azure SQL-Bereitstellung

  4. Wählen Sie auf der Registerkarte Grundeinstellungen des Formulars SQL-Datenbank erstellen unter Projektdetails das gewünschte Abonnement für Azure aus.

  5. Wählen Sie unter Ressourcengruppe die Option Neu erstellen aus, geben Sie einen Namen für Ihre Ressourcengruppe ein, und wählen Sie OK aus.

  6. Geben Sie als DatenbanknameContosoHR ein.

  7. Wählen Sie unter Server die Option Neu erstellen aus, und füllen Sie das Formular Neuer Server mit den folgenden Werten aus:

    • Servername: Geben Sie mysqlserver ein, und fügen Sie einige weitere Zeichen hinzu, um einen eindeutigen Wert zu erhalten. Wir können keinen exakten Servernamen zur Verwendung angeben, weil Servernamen für alle Server in Azure global eindeutig sein müssen (und nicht nur innerhalb eines Abonnements eindeutig sind). Geben Sie also beispielsweise mysqlserver135 ein. Dann werden Sie vom Portal informiert, ob dieser Server verfügbar ist.
    • Standort: Wählen Sie in der Dropdownliste einen Standort aus.

      Wichtig

      Sie müssen einen Standort (eine Azure-Region) auswählen, der sowohl die Hardware der DC-Serie als auch Microsoft Azure Attestation unterstützt. Die Liste der Regionen, die die DC-Serie unterstützen, finden Sie unter Verfügbarkeit der DC-Serie. Hier finden Sie die regionale Verfügbarkeit von Microsoft Azure Attestation.

    • Authentifizierungsmethode: Wählen Sie SQL-Authentifizierung verwenden aus.
    • Serveradministratoranmeldung: Geben Sie einen Administratoranmeldenamen ein, z. B. azureuser.
    • Kennwort: Geben Sie ein geeignetes Kennwort ein, und wiederholen Sie die Eingabe im Feld Kennwort bestätigen.
    • Klicken Sie auf OK.
  8. Behalten Sie für Möchten Sie einen Pool für elastische SQL-Datenbanken verwenden? den Wert Nein bei.

  9. Wählen Sie unter Compute und Speicher die Option Datenbank konfigurieren und dann Konfiguration ändern aus.

    Screenshot des Azure-Portals mit der Hardwarekonfiguration, unter der Sie die Datenbank konfigurieren

  10. Wählen Sie die Hardwarekonfiguration der DC-Serie und dann OK aus.

    Screenshot des Azure-Portals, der die Konfiguration einer Datenbank der DC-Serie zeigt

  11. Wählen Sie Übernehmen.

  12. Überprüfen Sie auf der Registerkarte Grundlagen, ob Compute und Speicher auf Universell, DC, 2 virtuelle Kerne, 32 GB Speicher festgelegt ist.

  13. Wählen Sie unter Redundanztyp für Sicherungsspeicher die Option Lokal redundanter Sicherungsspeicher aus.

  14. Klicken Sie auf Weiter: Netzwerk aus (im unteren Bereich der Seite).

    Screenshot des Azure-Portals, der die Konfiguration der Grundeinstellungen einer Datenbank der DC-Serie zeigt

  15. Wählen Sie auf der Registerkarte Netzwerk als Konnektivitätsmethode die Option Öffentlicher Endpunkt aus.

  16. Legen Sie bei Firewallregeln die Option Aktuelle Client-IP-Adresse hinzufügen auf Ja fest. Behalten Sie für Azure-Diensten und -Ressourcen den Zugriff auf diese Servergruppe gestatten den Wert Nein bei.

  17. Behalten Sie unter Verbindungsrichtlinie die Option Standard: Verwendet die Umleitungsrichtlinie für alle Clientverbindungen, die aus Azure stammen, und den Proxy für alle Clientverbindungen, die außerhalb von Azure stammen bei.

  18. Übernehmen Sie für Verschlüsselte Verbindungen die im Feld TLS-Mindestversion festgelegte Version TLS 1.2.

  19. Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.

    Screenshot der Seite „SQL-Datenbank erstellen“ mit der Registerkarte „Netzwerk“ im Azure-Portal

  20. Wählen Sie nach Überprüfung auf der Seite Überprüfen + erstellen die Option Erstellenaus.

Schritt 2: Konfigurieren eines Nachweisanbieters

In diesem Schritt erstellen und konfigurieren Sie einen Nachweisanbieter in Microsoft Azure Attestation. Dies ist erforderlich, um einen Nachweis für die Secure Enclave-Instanz zu erbringen, die von Ihrer Datenbank verwendet wird.

  1. Navigieren Sie zur Seite Nachweisanbieter erstellen.

  2. Geben Sie auf der Seite Nachweisanbieter erstellen Folgendes ein:

    • Abonnement: Wählen Sie dasselbe Abonnement aus, in dem Sie den logischen Azure SQL-Server erstellt haben.
    • Ressourcengruppe: Wählen Sie dieselbe Ressourcengruppe aus, in der Sie den logischen Azure SQL-Server erstellt haben.
    • Name: Geben Sie myattestprovider ein, und fügen Sie einige weitere Zeichen hinzu, um einen eindeutigen Wert zu erhalten. Wir können keinen genauen Nachweisanbieternamen angeben, der verwendet werden soll, da Namen global eindeutig sein müssen. Geben Sie also z. B. myattestprovider12345 ein. Dann werden Sie vom Portal informiert, ob dieser Server verfügbar ist.
    • Speicherort: Wählen Sie den Speicherort Ihres logischen Azure SQL-Servers aus.
    • Datei für Richtlinien-Signaturgeberzertifikate: Lassen Sie dieses Feld leer, da Sie eine nicht signierte Richtlinie konfigurieren.
  3. Wählen Sie nach dem Eingeben der erforderlichen Daten die Option Überprüfen und erstellen aus.

    Screenshot des Menüs „Nachweisanbieter erstellen“ im Azure-Portal

  4. Klicken Sie auf Erstellen.

  5. Nachdem der Nachweisanbieter erstellt wurde, wählen Sie Zu Ressource wechseln aus.

  6. Kopieren Sie auf der Registerkarte Übersicht für den Nachweisanbieter den Wert der Eigenschaft Nachweis-URI in die Zwischenablage und speichern Sie ihn in einer Datei. Dies ist die Nachweis-URL, die Sie in späteren Schritten benötigen.

    Screenshot der Nachweis-URL im Azure-Portal

  7. Wählen Sie links im Fenster im Ressourcenmenü oder im unteren Bereich die Option Richtlinie aus.

  8. Legen Sie Nachweistyp auf SGX-IntelSDK fest.

  9. Wählen Sie im oberen Menü die Option Konfigurieren aus.

    Screenshot der Konfiguration der Nachweisrichtlinie im Azure-Portal

  10. Legen Sie das Richtlinienformat auf Text fest. Lassen Sie Richtlinienoptionen auf Richtlinie eingeben festgelegt.

  11. Ersetzen Sie im Feld Richtlinientext die Standardrichtlinie durch die folgende Richtlinie. Informationen zur folgenden Richtlinie finden Sie unter Erstellen und Konfigurieren eines Nachweisanbieters.

version= 1.0;
authorizationrules 
{
       [ type=="x-ms-sgx-is-debuggable", value==false ]
        && [ type=="x-ms-sgx-product-id", value==4639 ]
        && [ type=="x-ms-sgx-svn", value>= 2 ]
        && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
    => permit();
};

  1. Wählen Sie Speichern aus.

    Screenshot der Bearbeitung einer Nachweisrichtlinie im Azure-Portal

  2. Wählen Sie im oberen Menü die Option Aktualisieren aus, um die konfigurierte Richtlinie anzuzeigen.

Schritt 3: Auffüllen Ihrer Datenbank

In diesem Schritt erstellen Sie eine Tabelle und füllen sie mit einigen Daten auf, die Sie später verschlüsseln und abfragen.

  1. Öffnen Sie SSMS, und stellen Sie eine Verbindung mit der Datenbank ContosoHR auf dem von Ihnen erstellten logischen Azure SQL-Server her, ohne Always Encrypted in der Datenbankverbindung zu aktivieren.

    1. Geben Sie im Dialogfeld Verbindung mit dem Server herstellen den vollqualifizierten Namen Ihres Servers (z. B. myserver135.database.windows.net) sowie den Benutzernamen und das Kennwort des Administrators ein, den bzw. das Sie beim Erstellen des Servers festgelegt haben.

    2. Wählen Sie Optionen>> und dann die Registerkarte Verbindungseigenschaften aus. Achten Sie darauf, dass Sie die Datenbank ContosoHR (und nicht die Standarddatenbank master) auswählen.

    3. Wählen Sie die Registerkarte Always Encrypted aus.

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

      Screenshot der Herstellung einer Verbindung mit einem Server mithilfe von SSMS ohne Aktivierung von Always Encrypted

    5. Wählen Sie Verbinden.

  2. Erstellen Sie eine neue Tabelle mit dem Namen Employees.

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

    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 4: 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. Geben Sie einen Namen für den neuen Spaltenhauptschlüssel ein: CMK1.
    3. Vergewissern Sie sich, dass die Option Enclave-Berechnungen zulassen ausgewählt ist. (Sie ist standardmäßig ausgewählt, wenn eine Secure Enclave für die Datenbank aktiviert ist. Sie muss aktiviert sein, da Ihre Datenbank die Hardwarekonfiguration der DC-Serie verwendet.)
    4. Stellen Sie sicher, dass Sie entweder Azure Key Vault (empfohlen) oder Windows-Zertifikatspeicher (Aktueller Benutzer oder Lokaler Computer) auswählen.
      • Wenn Sie „Azure Key Vault“ auswählen, melden Sie sich bei Azure an. Wählen Sie ein Azure-Abonnement mit dem gewünschten Schlüsseltresor und dann Ihren Schlüsseltresor aus. Wählen Sie Schlüssel generieren aus, um einen neuen Schlüssel zu erstellen.
      • Wenn Sie „Windows-Zertifikatspeicher“ auswählen, wählen Sie die Schaltfläche Zertifikat generieren aus, um ein neues Zertifikat zu erstellen. Screenshot der Auswahl von „Enclave-Berechnungen zulassen“ in SSMS beim Erstellen eines neuen Spaltenhauptschlüssels
    5. Klicken Sie auf OK.
  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 5: 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 stellen Sie eine Verbindung mit Ihrer Datenbank her. Always Encrypted muss dabei für die Datenbankverbindung aktiviert sein.

    1. Starten Sie eine neue SSMS-Instanz.

    2. Geben Sie im Dialogfeld Verbindung mit dem Server herstellen den vollqualifizierten Namen Ihres Servers (z. B. myserver135.database.windows.net) sowie den Benutzernamen und das Kennwort des Administrators ein, den bzw. das Sie beim Erstellen des Servers festgelegt haben.

    3. Wählen Sie Optionen>> und dann die Registerkarte Verbindungseigenschaften aus. Achten Sie darauf, dass Sie die Datenbank ContosoHR (und nicht die Standarddatenbank master) auswählen.

    4. Wählen Sie die Registerkarte Always Encrypted aus.

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

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

    7. Legen Sie Protokoll auf Microsoft Azure Attestation fest. (Dieser Schritt gilt ab SSMS 19.)

    8. Geben Sie die Enclave-Nachweis-URL an, die Sie mithilfe der Schritte unter Schritt 2: Konfigurieren eines Nachweisanbieters abgerufen haben. Sehen Sie sich hierzu folgenden Screenshot an:

      Screenshot des SSMS-Dialogfelds „Mit Server verbinden“ mit aktiviertem Nachweis auf der Registerkarte „Always Encrypted“

    9. Wählen Sie Verbinden.

    10. 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 Anweisungen ausführen:

    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 6: Ausführen umfangreicher Abfragen für verschlüsselte Spalten

Sie können 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 folgende 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. Probieren Sie dieselbe Abfrage erneut in der SSMS-Instanz aus, in der Always Encrypted nicht aktiviert ist. Ein Fehler sollte auftreten.

Nächste Schritte

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

Siehe auch