Comprendre le chiffrement de bout en bout dans Snowflake

Cette rubrique présente les concepts liés au chiffrement de bout en bout dans Snowflake.

Dans ce chapitre :

Vue d’ensemble

Le chiffrement de bout en bout (E2EE) est une méthode de sécurisation des données qui empêche des tiers de lire les données au repos ou en transit vers et depuis Snowflake et qui réduit les risques d’attaque.

La figure illustre le système E2EE dans Snowflake :

E2EE in Snowflake

Le système E2EE comprend les composants suivants :

  • Le client Snowflake dans un réseau d’entreprise.

  • Une zone de préparation des fichiers de données fournie par le client ou par Snowflake.

  • Snowflake s’exécute dans un cloud privé virtuel (VPC) ou un réseau virtuel (VNet) sécurisé, selon la plateforme Cloud.

Snowflake prend en charge les zones de préparation internes (Snowflake) et externes (fournies par les clients) des fichiers de données. Snowflake fournit des zones de préparation internes où vous pouvez charger et regrouper vos fichiers de données avant de charger les données dans des tables (image B).

Les zones de préparation fournies par le client sont des conteneurs ou des répertoires dans un service de stockage dans le Cloud pris en charge (par exemple, Amazon S3) que vous contrôlez et gérez (image A). Les zones de préparation fournies par le client sont une option intéressante pour les clients qui possèdent déjà des données stockées sur un service de stockage Cloud et qu’ils souhaitent copier vers Snowflake.

Le débit de E2EE dans Snowflake est le suivant conformément à la figure dans cette section :

  1. Un utilisateur télécharge un ou plusieurs fichiers de données vers une zone de préparation.

    Si la zone de préparation est une zone de préparation externe (image A), l’utilisateur peut chiffrer les fichiers de données en utilisant le chiffrement côté client (voir Chiffrement côté client pour plus d’informations). Nous recommandons le chiffrement côté client pour les fichiers de données situés dans des zones de préparation externes. Mais si les données ne sont pas chiffrées, Snowflake chiffre immédiatement les données lorsqu’elles sont chargées vers une table.

    Si la zone est une zone de préparation interne (c.-à-d. Snowflake) (image B), les fichiers de données sont automatiquement chiffrés par le client Snowflake sur la machine locale de l’utilisateur avant d’être transmis vers la zone de préparation interne, en plus d’être chiffrés après leur chargement dans la zone de préparation.

  2. L’utilisateur charge les données depuis la zone de préparation vers une table.

    Les données sont transformées dans le format de fichier propriétaire de Snowflake et stockées dans un conteneur de stockage Cloud. Dans Snowflake, toutes les données au repos sont chiffrées en permanence et, en transit, elles sont chiffrées avec TLS. Snowflake déchiffre également les données lorsqu’elles sont transformées ou traitées dans une table, puis chiffre de nouveau ces données lorsque les transformations et les opérations sont terminées.

  3. L’utilisateur peut décharger les résultats de la requête dans une zone de préparation externe ou interne.

    Les résultats sont chiffrés en option à l’aide du chiffrement côté client lorsqu’ils sont déchargés vers une zone de préparation gérée par le client, et sont automatiquement chiffrés lorsqu’ils sont déchargés dans une zone de préparation fournie par Snowflake.

  4. L’utilisateur télécharge les fichiers de données de la zone de préparation, et décrypte les données du côté client.

Chiffrement côté client

Le chiffrement côté client signifie qu’un client chiffre les données avant de les copier dans une zone de mise en zone de préparation de stockage dans le Cloud. Le chiffrement côté client fournit un système sécurisé pour la gestion des données dans le stockage Cloud.

Le chiffrement côté client suit un protocole spécifique défini par le service de stockage Cloud. Le service SDK et les outils tiers implémentent ce protocole.

L’image suivante résume le chiffrement côté client :

Uploading data to cloud storage using client-side encryption

Le protocole de chiffrement côté client fonctionne comme suit :

  1. Le client crée une clé maître secrète, qui est partagée avec Snowflake.

  2. Le client, qui est fourni par le service de stockage Cloud, génère une clé de chiffrement aléatoire et chiffre le fichier avant de le télécharger vers le stockage Cloud. La clé de chiffrement aléatoire, à son tour, est chiffrée avec la clé maîtresse du client.

  3. Le fichier chiffré et la clé aléatoire chiffrée sont téléchargés vers le service de stockage Cloud. La clé aléatoire chiffrée est stockée avec les métadonnées du fichier.

Lors du téléchargement des données, le client télécharge à la fois le fichier chiffré et la clé aléatoire chiffrée. Le client déchiffre la clé aléatoire chiffrée à l’aide de la clé maîtresse du client.

Ensuite, le client déchiffre le fichier chiffré à l’aide de la clé aléatoire maintenant déchiffrée. Ce chiffrement et ce déchiffrement se font du côté du client.

À aucun moment le service de stockage Cloud ou tout autre tiers (tel qu’un ISP) ne voit les données en clair. Les clients peuvent télécharger des données chiffrées côté client à l’aide de tout client ou outil qui prend en charge le chiffrement côté client.

Intégration de données chiffrées côté client dans Snowflake

Snowflake prend en charge le protocole de chiffrement côté client à l’aide d’une clé master côté client lors de la lecture ou de l’écriture de données entre une zone de préparation de service de stockage Cloud et Snowflake, comme l’indique l’image suivante :

Ingesting client-Side encrypted data into Snowflake

Pour charger des données chiffrées côté client à partir d’une zone de préparation fournie par le client, vous créez un objet de zone de préparation nommé avec un paramètre MASTER_KEY supplémentaire en utilisant une commande CREATE STAGE, puis chargez les données de la zone de préparation vers vos tables Snowflake. Le paramètre MASTER_KEY nécessite une clé de chiffrement avancée standard 128 ou 256 bits (AES) codée en Base64.

Un objet de zone de préparation nommé stocke les paramètres liés à une zone de préparation, et fournit un moyen pratique de charger ou de décharger des données entre Snowflake et un conteneur spécifique dans le stockage Cloud. L’extrait SQL suivant crée un objet de zone de préparation Amazon S3 d’exemple dans Snowflake qui prend en charge le chiffrement côté client :

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

La clé maîtresse tronquée spécifiée dans cette commande SQL est la chaîne codée en Base64 de la clé maîtresse secrète du client. Comme pour tous les autres identifiants de connexion, cette clé est transmise via le « Transport Layer Security » (HTTPS) à Snowflake, et est stockée dans des métadonnées de stockage tout en étant chiffrée. Seuls le client et les composants de traitement des requêtes de Snowflake sont exposés à la clé master.

L’un des avantages des objets de zone de préparation nommés est qu’ils peuvent être accordés à d’autres utilisateurs d’un compte Snowflake sans révéler à ces utilisateurs leurs identifiants d’accès ou leurs clés de chiffrement côté client. Les utilisateurs disposant des privilèges de contrôle d’accès appropriés se réfèrent simplement à l’objet de zone de préparation nommé lors du chargement ou du déchargement des données.

Les commandes SQL suivantes créent une table nommée users et copient les données de la zone de préparation chiffrée dans la table users :

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

Les données sont maintenant prêtes à être analysées à l’aide de Snowflake.

Vous pouvez également décharger les données vers la zone de préparation. La commande SQL suivante crée une table most_purchases et la remplit avec les résultats d’une requête qui trouve les 10 premiers utilisateurs avec le plus d’achats, puis décharge les données de la table vers la zone de préparation :

-- 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 chiffre les fichiers de données copiés dans la zone de préparation du client à l’aide de la clé master stockée dans l’objet de zone de préparation. Snowflake adhère au protocole de chiffrement côté client pour le service de stockage Cloud. Un client peut télécharger les fichiers de données chiffrés à l’aide de n’importe quel client ou outil qui prend en charge le chiffrement côté client.

Chapitres suivants :