Comment configurer un compte Snowflake pour empêcher l’exfiltration de données

Comment configurer un compte Snowflake pour empêcher l’exfiltration de données

Ce billet de blog fait suite au article de blog en décembre 2019 qui a introduit la fonctionnalité d’étapes sans informations d’identification dans Snowflake. Dans cet article de blog, nous verrons comment les étapes sans informations d’identification peuvent être utilisées pour empêcher l’exfiltration de données de Snowflake.

Snowflake Cloud Data Platform permet aux clients de stocker leurs données critiques et sensibles à des fins d’analyse. Les données des tables Snowflake sont stockées dans le stockage interne de Snowflake. Souvent, les clients exportent ces données hors de Snowflake sous la forme de fichiers CSV, JSON ou Parquet. Les données peuvent être exportées à l’aide d’un COPIER DANS <emplacement> commande.

COPY INTO { internalStage | externalStage | externalLocation }

     FROM { [<namespace>.]<table_name> | ( <query> ) }

[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |

                    TYPE = { CSV | JSON | PARQUET } 
[ formatTypeOptions ] } ) ]
[ copyOptions ]
[ HEADER ]

Risque d’exfiltration de données

Étant donné que les données peuvent être exportées vers une étape externe ou un emplacement externe, il existe un risque d’exfiltration des données. Un employé peut, sans le savoir (ou en connaissance de cause), exporter des données de Snowflake vers un emplacement de stockage externe non approuvé par les équipes de sécurité ou de conformité d’une organisation.

Par exemple, un employé peut accidentellement exporter des données sensibles vers une étape externe qui ne dispose pas de la sécurité réseau, du contrôle d’accès ou de la sécurité de cryptage appropriés et qui n’est pas approuvée par l’équipe de sécurité de l’organisation.

Supposons qu’une telle étape externe ait été créée à l’aide de la commande suivante :

CREATE STAGE my_external_stage
URL = ‘s3://my_company_bucket/sandbox/my_folder/’
CREDENTIALS = (AWS_KEY_ID = ‘...’ AWS_SECRET_KEY = ‘...’)
ENCRYPTION = (TYPE = NONE);

Supposons maintenant qu’un COPY INTO <emplacement> Une commande comme celle illustrée ci-dessous peut exporter des données au format CSV vers cet emplacement, compromettant ainsi la sécurité des données sensibles :

COPY INTO @my_external_stage
FROM (SELECT * FROM sensitive_data_table)
FILE_FORMAT = (TYPE = CSV)
HEADER = true;

Autre exemple, un employé malveillant peut exporter des données sensibles vers un conteneur personnel (emplacement externe) sur le stockage d’objets blob Azure à l’aide d’une commande telle que celle-ci :

COPY INTO ‘azure://my_personal_account.blob.core.windows.net/my_container’
CREDENTIALS = (AZURE_SAS_TOKEN = ‘...’)
FROM (SELECT * FROM sensitive_data_table)
FILE_FORMAT = (TYPE = json);

Utilisation d’étapes sans informations d’identification pour empêcher l’exfiltration de données

Flocon de neige introduit étapes sans identifiant en décembre 2019. À l’aide d’étapes sans informations d’identification, un administrateur de compte peut créer des intégrations de stockage et contraindre la création d’étapes externes uniquement sur une liste d’emplacements de stockage cloud autorisés. Cela fournit aux administrateurs de compte un mécanisme pour approuver les emplacements auxquels les utilisateurs peuvent accéder via une étape externe.

Dans l’exemple suivant, nous créons une intégration de stockage pour le stockage Amazon S3 qui autorise l’accès à s3://my_company_bucket/secure_folder/ et s3://my_company_bucket2/secure_folder2/, mais pas à d’autres emplacements. Une fois cette intégration de stockage créée, une étape peut tirer parti de cette intégration de stockage pour accéder à ces emplacements autorisés.

CREATE STORAGE INTEGRATION my_company_storage_buckets_int
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = S3
ENABLED = true
STORAGE_AWS_ROLE_ARN = 'aws role arn'
STORAGE_ALLOWED_LOCATIONS = ('s3://my_company_bucket/secure_folder/', 
's3://my_company_bucket2/secure_folder2/');

La prochaine étape consiste à d’installation l’intégration du stockage. Une fois qu’il a été configuré, nous pouvons utiliser l’intégration de stockage que nous avons créée ci-dessus pour créer une étape externe qui peut copier des données dans et hors des emplacements autorisés dans le my_company_storage_buckets_int intégration du stockage :

CREATE STAGE my_external_stage
URL=’s3://my_company_bucket/secure_folder/february_records/’
STORAGE_INTEGRATION=my_company_storage_buckets_int
encryption=(master_key='eSxX0jzYfIamtnBKOEOwq80Au6NbSgPH5r4BDDwOaO8=');

Lorsqu’un COPIER DANS <emplacement> la commande utilise mon_étape_externeSnowflake confirmera que l’URL de l’étape est autorisée par la liste STORAGE_ALLOWED_LOCATIONS spécifiée dans my_company_storage_buckets_int. Si l’emplacement est autorisé, l’ARN du rôle AWS est utilisé pour accéder aux données.

Un processus similaire peut être suivi pour créer une intégration de stockage et des étapes pour le stockage Azure ou intégration du stockage et étape pour le stockage dans le cloud de Google.

Snowflake encourage toutes les données à être chiffrées à l’aide d’une clé principale ou d’un schéma de chiffrement côté serveur pris en charge par le fournisseur de stockage. Dans la commande ci-dessus, le chiffrement côté client est appliqué à l’aide de la clé principale spécifiée. Vous pouvez en savoir plus sur les options de chiffrement ici.

Contrôler la création et l’utilisation d’étapes externes avec des informations d’identification directes

Avec l’ajout d’étapes externes sans informations d’identification, de nombreux administrateurs de compte souhaiteraient obliger les clients à utiliser le nouveau modèle. Snowflake a ajouté de nouveaux paramètres au niveau du compte pour les administrateurs de compte afin de restreindre la façon dont les données peuvent être exportées.

Ces paramètres peuvent être activés à l’aide des éléments suivants :

ALTER ACCOUNT my_account SET 
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION = true;

ALTER ACCOUNT my_account SET 
REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION = true;

ALTER ACCOUNT my_account SET
PREVENT_UNLOAD_TO_INLINE_URL = true;

La REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_CREATION Le paramètre permet aux administrateurs de compte de contrôler si les nouvelles étapes doivent utiliser des intégrations de stockage. La REQUIRE_STORAGE_INTEGRATION_FOR_STAGE_OPERATION Le paramètre permet aux administrateurs de compte de contrôler si les étapes existantes sans intégrations de stockage peuvent être utilisées.

Si un utilisateur tente de créer une étape externe sans intégration de stockage, l’utilisateur recevra un message d’erreur comme celui-ci :

CREATE STAGE my_external_stage
URL = ‘s3://my_company_bucket/sandbox/my_folder/’
CREDENTIALS = (AWS_KEY_ID = ‘...’ AWS_SECRET_KEY = ‘...’)
ENCRYPTION = (TYPE = NONE);

——————————————————————————————————————–

Erreur de compilation SQL : la création d’étapes avec des informations d’identification directes, y compris l’accès aux étapes publiques, a été interdite. Consultez votre administrateur de compte pour plus de détails.

De même, si un utilisateur essaie d’exporter des données vers un emplacement externe non approuvé, l’utilisateur recevra un message d’erreur comme celui-ci :

COPY INTO ‘s3://my_personal_bucket/sensitive_data/’
CREDENTIALS = (AWS_KEY_ID = ‘...’ AWS_SECRET_KEY = ‘...’)
FROM (SELECT * FROM sensitive_data_table)
FILE_FORMAT = (TYPE = parquet)
HEADER = true;

——————————————————————————————————————–

Erreur de compilation SQL : impossible de décharger vers un emplacement externe intégré. Veuillez d’abord créer une étape et décharger sur l’étape à la place.

À l’aide de ces paramètres, les clients peuvent configurer leur compte Snowflake pour empêcher l’exfiltration de données. Ces paramètres sont généralement disponibles. Essayez-les et sécurisez vos données critiques dans Snowflake.

En savoir plus en lisant nos notes de version iciou en accédant à notre documentation :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.