Erläuterungen zur End-to-End-Verschlüsselung in Snowflake

Unter diesem Thema werden Konzepte im Zusammenhang mit der in Snowflake bereitgestellten End-to-End-Verschlüsselung vorgestellt.

Unter diesem Thema:

Übersicht

Die End-to-End-Verschlüsselung (E2EE) ist eine Methode zur Datensicherung, die verhindert, dass Dritte die Daten im Ruhezustand oder bei der Übertragung zu und von Snowflake lesen können, und insgesamt die Angriffsfläche minimiert.

In der Abbildung ist das E2EE-System von Snowflake dargestellt:

E2EE in Snowflake

Das E2EE-System beinhaltet die folgenden Komponenten:

  • Snowflake-Kunde in einem Firmennetzwerk

  • Ein vom Kunden bereitgestellter oder von Snowflake für das Staging von Datendateien.

  • Snowflake wird je nach Cloudplattform in einer sicheren virtuellen privaten Cloud (VPC) oder einem virtuellen Netzwerk (VNet) ausgeführt.

Snowflake unterstützt sowohl interne (von Snowflake bereitgestellte) als auch externe (von Kunden bereitgestellte) Stagingbereiche für Datendateien. Snowflake bietet interne Stagingbereiche, in die Sie Ihre Datendateien hochladen und gruppieren können, bevor Sie die Daten in Tabellen laden (Abbildung B).

Vom Kunden bereitgestellte Stagingbereiche sind Container oder Verzeichnisse in einem unterstützten Cloudspeicherdienst (z. B. Amazon S3), die Sie steuern und verwalten (Abbildung A). Vom Kunden bereitgestellte Stagingbereiche sind eine interessante Option für Kunden, die bereits Daten bei einem Cloudspeicherdienst speichern, die sie in Snowflake kopieren möchten.

Die Abbildung in diesem Abschnitt zeigt den Workflow von E2EE in Snowflake:

  1. Ein Benutzer lädt eine oder mehrere Datendateien in einen Stagingbereich hoch.

    Wenn es sich bei dem Stagingbereich um einen externen Stagingbereich handelt (Abbildung A), kann der Benutzer die Datendateien optional mit einer clientseitigen Verschlüsselungsmethode verschlüsseln. Weitere Informationen dazu finden Sie unter Clientseitige Verschlüsselung. Wir empfehlen die clientseitige Verschlüsselung für Datendateien, die in externen Stagingbereichen bereitgestellt werden. Wenn die Daten jedoch nicht verschlüsselt sind, verschlüsselt Snowflake die Daten sofort beim Laden in eine Tabelle.

    Wenn es sich um einen internen (d. h. Snowflake) Stagingbereich (Abbildung B) handelt, werden die Datendateien nicht nur verschlüsselt, nachdem sie in den internen Stagingbereich geladen wurden, sondern sie werden bereits vor der Übertragung in den Stagingbereich automatisch vom Snowflake-Client auf dem lokalen Computer des Benutzers verschlüsselt.

  2. Der Benutzer lädt die Daten aus dem Stagingbereich in eine Tabelle.

    Die Daten werden in das proprietäre Dateiformat von Snowflake umgewandelt und in einem Cloudspeichercontainer gespeichert. In Snowflake sind alle ruhenden Daten immer verschlüsselt und werden bei der Übertragung mit TLS verschlüsselt. Snowflake entschlüsselt auch Daten, wenn Daten in einer Tabelle umgewandelt werden oder sich in Bearbeitung befinden, und Snowflake verschlüsselt die Daten erneut, wenn die Umwandlungen und Bearbeitungen abgeschlossen sind.

  3. Der Benutzer kann die Abfrageergebnisse in einen externen oder internen Stagingbereich entladen.

    Die Ergebnisse werden optional mit clientseitiger Verschlüsselung verschlüsselt, wenn sie in eine vom Kunden verwalteten Stagingbereich entladen werden, und sie werden automatisch verschlüsselt, wenn sie in einen von Snowflake bereitgestellten Stagingbereich entladen werden.

  4. Der Benutzer lädt Datendateien aus dem Stagingbereich herunter und entschlüsselt die Daten auf der Clientseite.

Clientseitige Verschlüsselung

Client-seitige Verschlüsselung bedeutet, dass ein Client die Daten verschlüsselt, bevor er sie in den Stagingbereich eines Cloudspeichers kopiert. Die clientseitige Verschlüsselung bietet ein sicheres System zur Verwaltung von Daten im Cloudspeicher.

Die clientseitige Verschlüsselung erfolgt nach einem bestimmten Protokoll, das vom Cloudspeicherdienst definiert wird. Dieses Protokoll wird mit Service-SDK und Tools von Drittanbietern implementiert.

Die folgende Abbildung fasst die clientseitige Verschlüsselung zusammen:

Uploading data to cloud storage using client-side encryption

Das Protokoll für die clientseitige Verschlüsselung funktioniert wie folgt:

  1. Der Kunde erstellt einen geheimen Hauptschlüssel, der mit Snowflake geteilt wird.

  2. Der Client (bereitgestellt vom Cloudspeicherdienst) generiert einen zufälligen Verschlüsselungsschlüssel und verschlüsselt die Datei, bevor er sie in den Cloudspeicher hochlädt. Der zufällige Schlüssel wiederum wird mit dem Hauptschlüssel des Kunden verschlüsselt.

  3. Sowohl die verschlüsselte Datei als auch der verschlüsselte Zufallsschlüssel werden in den Cloudspeicherservice hochgeladen. Der verschlüsselte Zufallsschlüssel wird zusammen mit den Metadaten der Datei gespeichert.

Beim Herunterladen von Daten lädt der Client sowohl die verschlüsselte Datei als auch den verschlüsselten Zufallsschlüssel herunter. Der Client entschlüsselt den verschlüsselten Zufallsschlüssel mit dem Hauptschlüssel des Kunden.

Als Nächstes entschlüsselt der Client die verschlüsselte Datei mit dem nun entschlüsselten Zufallsschlüssel. Diese Ver- und Entschlüsselungen erfolgen auf der Clientseite.

Zu keinem Zeitpunkt sieht der Cloudspeicherdienst oder ein anderer Dritter (z. B. ein ISP) die Daten unverschlüsselt. Kunden können clientseitig verschlüsselte Daten mit jedem Client oder Tool hochladen, der/das die clientseitige Verschlüsselung unterstützt.

Erfassen von clientseitig verschlüsselten Daten in Snowflake

Snowflake unterstützt das Protokoll zur clientseitigen Verschlüsselung mit clientseitigem Hauptschlüssel beim Lesen oder Schreiben von Daten zwischen dem Stagingbereich eines Cloudspeicherdienstes und Snowflake, wie in der folgenden Abbildung gezeigt:

Ingesting client-Side encrypted data into Snowflake

Um clientseitig verschlüsselte Daten aus einem vom Kunden bereitgestellten Stagingbereich zu laden, erstellen Sie mit CREATE STAGE ein benanntes Stagingobjekt mit einem zusätzlichen MASTER_KEY-Befehl, und laden Sie dann Daten aus dem Stagingbereich in Ihre Snowflake-Tabellen. Der Parameter MASTER_KEY erfordert einen 128-Bit- oder 256-Bit-AES-Schlüssel (Advanced Encryption Standard), der in Base64 codiert ist.

Ein benanntes Stagingobjekt speichert Einstellungen zu einem Stagingbereich und bietet eine komfortable Möglichkeit, Daten zwischen Snowflake und einem spezifizierten Container im Cloudspeicher zu laden oder zu entladen. Im folgenden SQL-Ausschnitt wird in Snowflake ein beispielhaftes Amazon S3-Stagingobjekt erstellt, das die clientseitige Verschlüsselung unterstützt:

-- create encrypted stage
create stage encrypted_customer_stage
url='s3://customer-bucket/data/'
credentials=(AWS_KEY_ID='ABCDEFGH' AWS_SECRET_KEY='12345678')
encryption=(MASTER_KEY='eSxX...=');
Copy

Der in diesem SQL-Befehl angegebene gekürzte Hauptschlüssel ist die Base64-kodierte Zeichenfolge des geheimen Hauptschlüssels des Kunden. Wie alle anderen Anmeldeinformationen wird auch dieser Hauptschlüssel über Transport Layer Security (HTTPS) an Snowflake übertragen und verschlüsselt im Metadatenspeicher gespeichert. Nur die kundeneigenen und die abfrageverarbeitenden Komponenten von Snowflake kommen mit dem Hauptschlüssel in Berührung.

Ein Vorteil von benannten Stagingobjekten besteht darin, dass sie anderen Benutzern innerhalb eines Snowflake-Kontos zugewiesen werden können, ohne dass diesen Benutzern Zugriffsanmeldeinformationen oder clientseitige Verschlüsselungsschlüssel mitgeteilt werden. Benutzer mit den entsprechenden Zugriffssteuerungsrechten verweisen beim Laden oder Entladen von Daten einfach auf das benannte Stagingobjekt.

Die folgenden SQL-Befehle erstellen eine Tabelle mit dem Namen users und kopieren Daten aus dem verschlüsselten Stagingbereich in die users-Tabelle:

-- create table and ingest data from stage
CREATE TABLE users (id bigint, name varchar(500), purchases int);
COPY INTO users FROM @encrypted_customer_stage/users;
Copy

Die Daten sind nun bereit für die Analyse mit Snowflake.

Sie können auch Daten in den Stagingbereich entladen. Der folgende SQL-Befehl erstellt eine most_purchases-Tabelle und füllt diese mit den Ergebnissen einer Abfrage, die die Top-10-Benutzer mit den meisten Käufen ermittelt, und entlädt die Tabellendaten dann in den Stagingbereich:

-- find top 10 users by purchases, unload into stage
CREATE TABLE most_purchases as select * FROM users ORDER BY purchases desc LIMIT 10;
COPY INTO @encrypted_customer_stage/most_purchases FROM most_purchases;
Copy

Snowflake verschlüsselt die in den Stagingbereich des Kunden kopierten Datendateien mit dem im Stagingobjekt gespeicherten Hauptschlüssel. Snowflake hält sich an das clientseitige Verschlüsselungsprotokoll für den Cloudspeicherservice. Ein Kunde kann die verschlüsselten Datendateien mit jedem Client oder Tool herunterladen, der/das die clientseitige Verschlüsselung unterstützt.

Nächste Themen: