Option 1 : Configuration d’une intégration de stockage Snowflake pour accéder à Amazon S3¶
Cette rubrique explique comment utiliser des intégrations de stockage pour permettre à Snowflake de lire et d’écrire des données dans un compartiment Amazon S3 référencé dans une zone de préparation externe (c’est-à-dire S3). Les intégrations sont des objets Snowflake de première classe nommés, qui évitent de transmettre des identifiants de connexion explicites de fournisseur Cloud, telles que des clés secrètes ou des jetons d’accès. Les objets d’intégration stockent un ID d’utilisateur de gestion des identités et des accès (IAM) AWS. Un administrateur de votre organisation accorde les autorisations utilisateur IAM de l’intégration dans le compte AWS.
Une intégration peut également répertorier des compartiments (et des chemins facultatifs) qui limitent les emplacements que les utilisateurs peuvent spécifier lors de la création de zones de préparation externes utilisant l’intégration.
Note
Pour terminer les instructions de cette section, des autorisations sont nécessaires dans AWS pour créer et gérer des stratégies et des rôles IAM. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.
Notez qu’actuellement, l’accès au stockage S3 dans les régions gouvernementales à l’aide d’une intégration de stockage est limité aux comptes Snowflake hébergés sur AWS dans la même région gouvernementale. L’accès à votre stockage S3 à partir d’un compte hébergé en dehors de la région gouvernementale à l’aide d’identifiants directs est pris en charge.
Le diagramme suivant illustre le flux d’intégration d’une zone de préparation S3 :
Une zone de préparation externe (c.-à-d S3) fait référence à un objet d’intégration de stockage dans sa définition.
Snowflake associe automatiquement l’intégration de stockage à un utilisateur IAM S3 créé pour votre compte. Snowflake crée un seul utilisateur IAM référencé par toutes les intégrations de stockage S3 de votre compte Snowflake.
Un administrateur AWS de votre organisation accorde des autorisations à l’utilisateur IAM pour accéder au compartiment référencé dans la définition de la zone de préparation. Notez que de nombreux objets de zones de préparation externes peuvent référencer différents compartiments et chemins et utiliser la même intégration de stockage pour l’authentification.
Lorsqu’un utilisateur charge ou décharge des données depuis ou vers une zone de préparation, Snowflake vérifie les autorisations accordées à l’utilisateur IAM sur le compartiment avant d’autoriser ou de refuser l’accès.
Dans ce chapitre :
Configuration de l’accès sécurisé au stockage Cloud¶
Cette section décrit comment configurer un objet d’intégration de stockage Snowflake pour déléguer la responsabilité de l’authentification pour le stockage dans le Cloud à une entité Gestion des identités et des accès Snowflake (IAM).
Étape 1 : Configurer des autorisations d’accès pour le compartiment S3¶
Conditions de contrôle d’accès AWS¶
Snowflake requiert les autorisations suivantes sur un compartiment S3 et un dossier pour accéder aux fichiers dans le dossier (et tout sous-dossier) :
s3:GetBucketLocation
s3:GetObject
s3:GetObjectVersion
s3:ListBucket
Note
Les autorisations supplémentaires suivantes sont nécessaires pour effectuer des actions SQL supplémentaires :
Autorisation |
Action SQL |
---|---|
|
Décharger les fichiers dans le compartiment. |
|
Il est possible de purger automatiquement les fichiers de la zone de préparation après un chargement réussi ou d’exécuter des instructions REMOVE pour supprimer manuellement des fichiers. |
Comme bonne pratique, Snowflake recommande la création d’une politique IAM pour l’accès de Snowflake au compartiment S3. Vous pouvez alors joindre la politique au rôle, et utiliser les identifiants de sécurité générés par AWS pour que le rôle puisse accéder aux fichiers dans le compartiment.
Création d’une politique IAM¶
Les instructions étape par étape suivantes décrivent comment configurer les permissions d’accès pour Snowflake dans votre console de gestion AWS de sorte que vous puissiez utiliser un compartiment S3 pour charger et décharger les données :
Connectez-vous à la console de gestion AWS.
Dans le tableau de bord d’accueil, sélectionnez Identity & Access Management (IAM) :
Cliquez sur Account settings dans le volet de navigation de gauche.
Développez la liste Security Token Service Regions, recherchez la région AWS qui correspond à la région où se trouve votre compte et choisissez Activate si le statut est Inactive.
Cliquez sur Policies dans le volet de navigation de gauche.
Cliquez sur Create Policy :
Cliquez sur l’onglet JSON.
Ajoutez le document de politique qui permettra à Snowflake d’accéder au compartiment et au dossier S3.
La politique suivante (au format JSON) fournit à Snowflake les autorisations requises pour charger ou décharger des données à l’aide d’un seul chemin de dossier et de compartiment. Vous pouvez également purger les fichiers de données en utilisant l’option de copie PURGE.
Copiez et collez le texte dans l’éditeur de politiques :
Note
Assurez-vous de remplacer le
bucket
et leprefix
par votre nom de compartiment actuel et le préfixe du chemin du dossier.Les Amazon Resource Names (ARN) pour les compartiments dans des régions gouvernementales ont un préfixe
arn:aws-us-gov:s3:::
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
Note
La définition de la condition
"s3:prefix":
sur["*"]
ou["<chemin>/*"]
donne accès à tous les préfixes dans le compartiment spécifié ou le chemin dans le compartiment, respectivement.Notez que les politiques AWS prennent en charge une variété de cas d’utilisation de sécurité différents.
La politique suivante fournit à Snowflake les permissions requises pour charger des données à partir d’un seul compartiment en lecture seule et chemin de dossier. La politique inclut les autorisations
s3:GetBucketLocation
,s3:GetObject
,s3:GetObjectVersion
, ets3:ListBucket
:Politique alternative : Chargement à partir d’un compartiment S3 en lecture seule
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<bucket>/<prefix>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<bucket>", "Condition": { "StringLike": { "s3:prefix": [ "<prefix>/*" ] } } } ] }
Cliquez sur Review policy.
Entrez le nom de la stratégie (ex. :
snowflake_access
) et une description facultative. Cliquez sur Create policy.
Étape 2 : Créer le rôle IAM dans AWS¶
Pour configurer les autorisations d’accès à Snowflake dans la Console de gestion AWS, procédez comme suit :
Connectez-vous à la console de gestion AWS.
Dans le tableau de bord d’accueil, sélectionnez Identity & Access Management (IAM) :
Dans le volet de navigation de gauche, sélectionnez Roles.
Sélectionnez Create role.
Sélectionnez Another AWS account comme type d’entité de confiance.
Dans le champ Account ID saisissez votre propre ID de compte AWS temporaire. Plus tard, vous modifierez la relation de confiance et accorderez l’accès à Snowflake.
Sélectionnez l’option Require external ID. Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake.
Saisissez un ID de type caractère générique tel que
0000
. À une étape ultérieure, vous modifierez la relation de confiance de votre rôle IAM et spécifierez l’ID externe de votre intégration de stockage.Sélectionnez Next.
Sélectionnez la politique que vous avez créée à l”étape 1 : Configuration des autorisations d’accès au compartiment S3 (dans ce chapitre).
Sélectionnez Next.
Saisissez un nom et une description pour le rôle, puis sélectionnez Create role.
Vous avez maintenant créé une stratégie IAM pour un compartiment, créé un rôle IAM et associé la stratégie au rôle.
Sur la page de synthèse du rôle, recherchez et enregistrez la valeur Role ARN. Dans l’étape suivante, vous créerez une intégration Snowflake qui fait référence à ce rôle.
Note
Snowflake met en cache les informations d’identification temporaires pendant une période qui ne peut dépasser le délai d’expiration de 60 minutes. Si vous révoquez l’accès à partir de Snowflake, les utilisateurs pourraient être en mesure de répertorier les fichiers et d’accéder à des données à partir de l’emplacement de stockage dans le Cloud jusqu’à l’expiration du cache.
Étape 3 : Création d’une intégration Cloud Storage dans Snowflake¶
Créez une intégration de stockage à l’aide de la commande CREATE STORAGE INTEGRATION. Une intégration de stockage est un objet Snowflake qui stocke un utilisateur généré pour la gestion d’identité et d’accès (IAM) pour votre stockage Cloud S3, ainsi qu’un ensemble facultatif d’emplacements de stockage autorisés ou bloqués (c.-à-d. des compartiments). Les administrateurs de fournisseur de Cloud de votre entreprise accordent des autorisations sur les emplacements de stockage à l’utilisateur généré. Cette option permet aux utilisateurs d’éviter de fournir des informations d’identification lors de la création de zones de préparation ou du chargement de données.
Une seule intégration de stockage peut prendre en charge plusieurs zones de préparation externes (c’est-à-dire S3). L’URL dans la définition de zone de préparation doit correspondre aux compartiments S3 (et aux chemins facultatifs) spécifiés pour le paramètre STORAGE_ALLOWED_LOCATIONS.
Note
Seuls les administrateurs de compte (utilisateurs dotés du rôle ACCOUNTADMIN) ou un rôle disposant du privilège global CREATE INTEGRATION peuvent exécuter cette commande SQL.
CREATE STORAGE INTEGRATION <integration_name>
TYPE = EXTERNAL_STAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = '<iam_role>'
STORAGE_ALLOWED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/')
[ STORAGE_BLOCKED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/') ]
Où :
integration_name
est le nom de la nouvelle intégration.iam_role
est le nom Amazon Resource Name (ARN) du rôle que vous avez créé à l’ étape 2 : Création du rôle IAM AWS (dans ce chapitre).bucket
est le nom d’un compartiment S3 qui stocke vos fichiers de données (par exemple,mybucket
). Les paramètres STORAGE_ALLOWED_LOCATIONS requis et STORAGE_BLOCKED_LOCATIONS facultatif limitent ou bloquent l’accès à ces compartiments, respectivement, lors de la création ou de la modification de zones de préparation faisant référence à cette intégration.path
est un chemin facultatif qui peut être utilisé pour fournir un contrôle granulaire sur les objets du compartiment.
L’exemple suivant crée une intégration qui autorise l’accès à tous les compartiments du compte, mais bloque l’accès aux dossiers sensitivedata
définis.
Les zones de préparation externes supplémentaires qui utilisent également cette intégration peuvent faire référence aux compartiments et aux chemins autorisés :
CREATE STORAGE INTEGRATION s3_int TYPE = EXTERNAL_STAGE STORAGE_PROVIDER = 'S3' ENABLED = TRUE STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole' STORAGE_ALLOWED_LOCATIONS = ('*') STORAGE_BLOCKED_LOCATIONS = ('s3://mybucket1/mypath1/sensitivedata/', 's3://mybucket2/mypath2/sensitivedata/');
Note
En option, utilisez le paramètre STORAGE_AWS_EXTERNAL_ID pour spécifier votre propre ID externe. Vous pouvez sélectionner cette option pour utiliser le même ID externe sur plusieurs volumes externes et/ou intégrations de stockage.
Étape 4 : Récupération de l’utilisateur AWS IAM de votre compte Snowflake¶
Pour récupérer l’ARN de l’utilisateur IAM automatiquement créé pour votre compte Snowflake, utilisez DESCRIBE INTEGRATION.
DESC INTEGRATION <integration_name>;
Où :
integration_name
est le nom de l’intégration créée à l”étape 3 : Création d’une intégration Cloud Storage dans Snowflake (ce chapitre).
Par exemple :
DESC INTEGRATION s3_int; +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+ | property | property_type | property_value | property_default | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------| | ENABLED | Boolean | true | false | | STORAGE_ALLOWED_LOCATIONS | List | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/ | [] | | STORAGE_BLOCKED_LOCATIONS | List | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/ | [] | | STORAGE_AWS_IAM_USER_ARN | String | arn:aws:iam::123456789001:user/abc1-b-self1234 | | | STORAGE_AWS_ROLE_ARN | String | arn:aws:iam::001234567890:role/myrole | | | STORAGE_AWS_EXTERNAL_ID | String | MYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq= | | +---------------------------+---------------+--------------------------------------------------------------------------------+------------------+
Enregistrez les valeurs des propriétés suivantes :
Propriété
Description
STORAGE_AWS_IAM_USER_ARN
Utilisateur IAM AWS créé pour votre compte Snowflake, par exemple,
arn:aws:iam::123456789001:user/abc1-b-self1234
. Snowflake provisionne un seul utilisateur IAM pour l’intégralité de votre compte Snowflake. Toutes les intégrations de stockage S3 de votre compte utilisent cet utilisateur IAM.STORAGE_AWS_EXTERNAL_ID
ID externe que Snowflake utilise pour établir une relation de confiance avec AWS. Si vous n’avez pas spécifié d’ID externe (
STORAGE_AWS_EXTERNAL_ID
) lorsque vous avez créé l’intégration de stockage, Snowflake génère un ID à utiliser.Vous fournirez ces valeurs à la section suivante.
Étape 5 : Octroi des autorisations utilisateur à IAM pour accéder à des objets de compartiment¶
Les instructions étape par étape suivantes décrivent comment configurer les permissions d’accès IAM pour Snowflake dans votre console de gestion AWS de sorte que vous puissiez utiliser un compartiment S3 pour charger et décharger les données :
Connectez-vous à la console de gestion AWS.
Sélectionnez Identity & Access Management (IAM) :
Dans le volet de navigation de gauche, sélectionnez Roles.
Cliquez sur le rôle que vous avez créé à l”étape 2 : Création du rôle IAM dans AWS (dans ce chapitre).
Sélectionnez l’onglet Trust relationships.
Sélectionnez Edit trust relationship.
Modifiez le document de politique avec les valeurs de sortie DESC STORAGE INTEGRATION que vous avez enregistrées dans l” étape 4 : Récupération de l’utilisateur AWS IAM de votre compte Snowflake (dans ce chapitre) :
Document de politique pour le rôle IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<snowflake_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<snowflake_external_id>" } } } ] }
Où :
snowflake_user_arn
est la valeur STORAGE_AWS_IAM_USER_ARN que vous avez enregistrée.snowflake_external_id
est la valeur STORAGE_AWS_EXTERNAL_ID que vous avez enregistrée.Dans cet exemple, la valeur
snowflake_external_id
estMYACCOUNT_SFCRole=2_a123456/s0aBCDEfGHIJklmNoPq=
.Note
Pour des raisons de sécurité, si vous créez une nouvelle intégration de stockage (ou si vous recréez une intégration de stockage existante à l’aide de la syntaxe CREATE OR REPLACE STORAGE INTEGRATION) sans spécifier d’ID externe, la nouvelle intégration a un ID externe différent et ne peut donc résoudre la relation de confiance, sauf si vous mettez à jour la politique de confiance.
Sélectionnez le bouton Update Trust Policy. Les modifications sont enregistrées.
Note
Snowflake met en cache les informations d’identification temporaires pendant une période qui ne peut dépasser le délai d’expiration de 60 minutes. Si vous révoquez l’accès à partir de Snowflake, les utilisateurs pourraient être en mesure de répertorier les fichiers et de charger des données à partir de l’emplacement de stockage dans le Cloud jusqu’à l’expiration du cache.
Étape 6 : Création d’une zone de préparation externe¶
Créez une zone de préparation externe (S3) qui fait référence à l’intégration de stockage que vous avez créée à l’ étape 3 : Création d’une intégration Cloud Storage dans Snowflake (dans ce chapitre).
Note
La création d’une zone de préparation utilisant une intégration de stockage nécessite un rôle doté du privilège CREATE STAGE pour le schéma ainsi que du privilège USAGE sur l’intégration de stockage. Par exemple :
GRANT CREATE STAGE ON SCHEMA public TO ROLE myrole;
GRANT USAGE ON INTEGRATION s3_int TO ROLE myrole;
Créez la zone de préparation en utilisant la commande CREATE STAGE.
Par exemple, définissez mydb.public
comme base de données et schéma actuels pour la session utilisateur, puis créez une zone de préparation nommée my_s3_stage
. Dans cet exemple, la zone de préparation fait référence au compartiment S3 et au chemin d’accès mybucket1/path1
, pris en charge par l’intégration. La zone de préparation fait aussi référence à un objet de format de fichier nommé appelé my_csv_format
:
USE SCHEMA mydb.public; CREATE STAGE my_s3_stage STORAGE_INTEGRATION = s3_int URL = 's3://bucket1/path1/' FILE_FORMAT = my_csv_format;
Note
Le propriétaire de la zone de préparation (c’est-à-dire le rôle avec le privilège OWNERSHIP sur la zone de préparation) doit avoir le privilège USAGE sur l’intégration de stockage.
Ajoutez une barre oblique (
/
) à la valeur de l’URL pour filtrer le chemin du dossier spécifié. Si la barre oblique est omise, tous les fichiers et dossiers commençant par le préfixe du chemin spécifié sont inclus.Notez que la barre oblique est nécessaire pour accéder aux fichiers de données non structurées et les récupérer dans la zone de préparation.
Pour charger ou décharger des données depuis ou vers une zone de préparation qui utilise une intégration, un rôle doit disposer du privilège USAGE sur la zone de préparation. Il n’est pas nécessaire d’avoir le privilège USAGE sur l’intégration de stockage.
Le paramètre STORAGE_INTEGRATION est traité séparément des autres paramètres de la zone de préparation tels que FILE_FORMAT. La prise en charge de ces autres paramètres est identique quelle que soit l’intégration utilisée pour accéder à votre compartiment S3.
Suivant : Chiffrement de fichiers de données AWS