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
- Ein aktives Azure-Abonnement. Falls Sie nicht über ein Abonnement verfügen, können Sie ein kostenloses Konto erstellen. Sie müssen Mitglied der Rolle „Mitwirkender“ oder „Besitzer“ sein, damit das Abonnement Ressourcen erstellen und eine Nachweisrichtlinie konfigurieren kann.
- Optional, aber zum Speichern Ihres Spaltenhauptschlüssels für Always Encrypted empfohlen: ein Schlüsseltresor in Azure Key Vault. Informationen zum Erstellen eines Schlüsseltresors finden Sie unter Schnellstart: Erstellen eines Schlüsseltresors über das Azure-Portal.
- Wenn für Ihren Schlüsseltresor das Berechtigungsmodell mit Zugriffsrichtlinien gilt, stellen Sie sicher, dass Sie im Schlüsseltresor über die folgenden Berechtigungen verfügen:
get
,list
,create
,unwrap key
,wrap key
,verify
,sign
. Weitere Informationen finden Sie unter Zuweisen einer Key Vault-Zugriffsrichtlinie. - Wenn Sie das Berechtigungsmodell mit rollenbasierter Zugriffssteuerung (Role-Based Access Control, RBAC) von Azure verwenden, stellen Sie sicher, dass Sie Mitglied der Rolle Key Vault-Kryptografiebeauftragter für Ihren Schlüsseltresor sind. Weitere Informationen finden Sie unter Gewähren des Zugriffs auf Key Vault-Schlüssel, -Zertifikate und -Geheimnisse mit der rollenbasierten Zugriffssteuerung in Azure.
- Wenn für Ihren Schlüsseltresor das Berechtigungsmodell mit Zugriffsrichtlinien gilt, stellen Sie sicher, dass Sie im Schlüsseltresor über die folgenden Berechtigungen verfügen:
- Die aktuelle Version von SQL Server Management Studio (SSMS).
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.
Navigieren Sie zur Seite SQL-Bereitstellungsoption auswählen.
Wenn Sie nicht schon im Azure-Portal angemeldet sind, melden Sie sich nach der entsprechenden Aufforderung an.
Behalten Sie unter SQL-Datenbanken für Einzeldatenbank den festgelegten Wert Ressourcentyp bei, und wählen Sie Erstellen aus.
Wählen Sie auf der Registerkarte Grundeinstellungen des Formulars SQL-Datenbank erstellen unter Projektdetails das gewünschte Abonnement für Azure aus.
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.
Geben Sie als DatenbanknameContosoHR ein.
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.
Behalten Sie für Möchten Sie einen Pool für elastische SQL-Datenbanken verwenden? den Wert Nein bei.
Wählen Sie unter Compute und Speicher die Option Datenbank konfigurieren und dann Konfiguration ändern aus.
Wählen Sie die Hardwarekonfiguration der DC-Serie und dann OK aus.
Wählen Sie Übernehmen.
Überprüfen Sie auf der Registerkarte Grundlagen, ob Compute und Speicher auf Universell, DC, 2 virtuelle Kerne, 32 GB Speicher festgelegt ist.
Wählen Sie unter Redundanztyp für Sicherungsspeicher die Option Lokal redundanter Sicherungsspeicher aus.
Klicken Sie auf Weiter: Netzwerk aus (im unteren Bereich der Seite).
Wählen Sie auf der Registerkarte Netzwerk als Konnektivitätsmethode die Option Öffentlicher Endpunkt aus.
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.
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.
Übernehmen Sie für Verschlüsselte Verbindungen die im Feld TLS-Mindestversion festgelegte Version TLS 1.2.
Wählen Sie am unteren Rand der Seite die Option Bewerten + erstellen aus.
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.
Navigieren Sie zur Seite Nachweisanbieter erstellen.
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.
Wählen Sie nach dem Eingeben der erforderlichen Daten die Option Überprüfen und erstellen aus.
Klicken Sie auf Erstellen.
Nachdem der Nachweisanbieter erstellt wurde, wählen Sie Zu Ressource wechseln aus.
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.
Wählen Sie links im Fenster im Ressourcenmenü oder im unteren Bereich die Option Richtlinie aus.
Legen Sie Nachweistyp auf SGX-IntelSDK fest.
Wählen Sie im oberen Menü die Option Konfigurieren aus.
Legen Sie das Richtlinienformat auf Text fest. Lassen Sie Richtlinienoptionen auf Richtlinie eingeben festgelegt.
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();
};
Wählen Sie Speichern aus.
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.
Ö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.
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.
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.Wählen Sie die Registerkarte Always Encrypted aus.
Stellen Sie sicher, dass das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung)nicht ausgewählt ist.
Wählen Sie Verbinden.
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
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.
Erweitern Sie Ihre Datenbank im Objekt-Explorer mit der SSMS-Instanz aus dem vorherigen Schritt, und navigieren Sie zu Sicherheit>Always Encrypted-Schlüssel.
Stellen Sie einen neuen Enclave-fähigen Spaltenhauptschlüssel bereit:
- Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenhauptschlüssel aus.
- Geben Sie einen Namen für den neuen Spaltenhauptschlüssel ein: CMK1.
- 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.)
- 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.
- Klicken Sie auf OK.
Erstellen Sie einen neuen Enclave-fähigen Spaltenverschlüsselungsschlüssel:
- Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenverschlüsselungsschlüssel.
- Geben Sie einen Namen für den neuen Spaltenverschlüsselungsschlüssel ein: CEK1.
- Wählen Sie in der Dropdownliste Spaltenhauptschlüssel den in den vorherigen Schritten erstellten Spaltenhauptschlüssel.
- 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.
Ö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.
Starten Sie eine neue SSMS-Instanz.
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.
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.Wählen Sie die Registerkarte Always Encrypted aus.
Aktivieren Sie das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung).
Wählen Sie Secure Enclaves aktivieren aus. (Dieser Schritt gilt ab SSMS 19.)
Legen Sie Protokoll auf Microsoft Azure Attestation fest. (Dieser Schritt gilt ab SSMS 19.)
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:
Wählen Sie Verbinden.
Wenn Sie aufgefordert werden, die Parametrisierung für Always Encrypted zu aktivieren, wählen Sie Aktivieren aus.
Ö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.
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.
Stellen Sie in der SSMS-Instanz mit aktiviertem Always Encrypted sicher, dass auch die Parametrisierung für Always Encrypted aktiviert ist.
- Wählen Sie im Hauptmenü von SSMS Tools aus.
- Wählen Sie Optionen... aus.
- Navigieren Sie zu Abfrageausführung>SQL Server>Erweitert.
- Stellen Sie sicher, dass Parametrisierung für Always Encrypted aktivieren aktiviert ist.
- Klicken Sie auf OK.
Ö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;
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:
- Tutorial: Entwickeln einer .NET-Anwendung mithilfe von Always Encrypted mit Secure Enclaves
- Tutorial: Entwickeln einer .NET Framework-Anwendung mithilfe von Always Encrypted mit Secure Enclaves
- Tutorial: Erstellen und Verwenden von Indizes für Enclave-fähige Spalten mit zufälliger Verschlüsselung