Configuration d’une intégration pour Google Cloud Storage

Ce chapitre décrit comment configurer un accès sécurisé aux fichiers de données stockés dans un compartiment Google Cloud Storage.

Dans ce chapitre :

Configuration d’une intégration de stockage Snowflake

Cette section explique comment utiliser les intégrations de stockage pour permettre à Snowflake de lire des données et de les écrire dans un compartiment de Google Cloud Storage référencé dans une zone de préparation externe (c’est-à-dire Cloud Storage). Les intégrations sont des objets Snowflake de première classe nommés, qui évitent de transmettre des informations d’identification explicites de fournisseur de Cloud, telles que des clés secrètes ou des jetons d’accès ; au lieu de cela, les objets d’intégration font référence à un compte de service Cloud Storage. Un administrateur de votre organisation accorde des autorisations au compte de service dans le compte Cloud Storage.

Les administrateurs peuvent également limiter les utilisateurs à un ensemble spécifique de compartiments Cloud Storage (et de chemins d’accès facultatifs) auxquels accèdent des zones de préparation externes utilisant l’intégration.

Note

Pour suivre les instructions de cette section, vous devez avoir accès à votre projet Cloud Storage en tant qu’éditeur de projet. Si vous n’êtes pas un éditeur de projet, demandez à votre administrateur Cloud Storage d’effectuer ces tâches.

Le diagramme suivant illustre le flux d’intégration d’une zone de préparation Cloud Storage :

Google Cloud Storage Stage Integration Flow
  1. Une zone de préparation externe (c.-à-d Cloud Storage) fait référence à un objet d’intégration de stockage dans sa définition.

  2. Snowflake associe automatiquement l’intégration de stockage à un compte de service Cloud Storage créé pour votre compte. Snowflake crée un seul compte de service référencé par toutes les intégrations de stockage GCS de votre compte Snowflake.

  3. Un éditeur de projet pour votre projet Cloud Storage accorde des autorisations au compte de service pour accéder au compartiment référencé dans la définition de la zone de stockage. Notez que de nombreux objets de zone de stockage externes peuvent référencer différents compartiments et chemins et utiliser la même intégration 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 au compte de service sur le compartiment avant d’autoriser ou de refuser l’accès.

Dans cette section :

Étape 1 : Création d’une intégration Cloud Storage dans Snowflake

Créez une intégration à l’aide de la commande CREATE STORAGE INTEGRATION. Une intégration est un objet Snowflake qui délègue la responsabilité de l’authentification pour un stockage externe dans le Cloud à une entité générée par Snowflake (c’est-à-dire un compte de service Cloud Storage). Pour accéder aux compartiments Cloud Storage, Snowflake crée un compte de service auquel des autorisations peuvent être accordées pour accéder aux compartiments dans lesquels vos fichiers de données sont stockés.

Une seule intégration de stockage peut prendre en charge plusieurs zones de préparation externes (c.-à-d. GCS). L’URL dans la définition de zone de préparation doit correspondre aux compartiments GCS (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 = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('gcs://<bucket>/<path>/', 'gcs://<bucket>/<path>/') ]
Copy

Où :

  • integration_name est le nom de la nouvelle intégration.

  • bucket est le nom d’un compartiment Cloud Storage 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 limite explicitement les zones de préparation externes utilisant l’intégration pour faire référence à l’un des deux compartiments et des chemins. Dans une étape ultérieure, nous allons créer une zone de préparation externe qui fait référence à l’un de ces compartiments et chemins.

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 gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket1/path1/sensitivedata/', 'gcs://mybucket2/path2/sensitivedata/');
Copy

Étape 2 : Récupération du compte de service Cloud Storage pour votre compte Snowflake

Exécutez la commande DESCRIBE INTEGRATION pour extraire l’ID du compte de service Cloud Storage créé automatiquement pour votre compte Snowflake :

DESC STORAGE INTEGRATION <integration_name>;
Copy

Où :

Par exemple :

DESC STORAGE INTEGRATION gcs_int;

+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
| property                    | property_type | property_value                                                              | property_default |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
| ENABLED                     | Boolean       | true                                                                        | false            |
| STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
| STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
| STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@project1-123456.iam.gserviceaccount.com                  |                  |
+-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
Copy

La propriété STORAGE_GCP_SERVICE_ACCOUNT de la sortie affiche le compte de service Cloud Storage créé pour votre compte Snowflake (par exemple, service-account-id@project1-123456.iam.gserviceaccount.com). Nous fournissons un seul compte de service Cloud Storage pour l’ensemble de votre compte Snowflake. Toutes les intégrations Cloud Storage utilisent ce compte de service.

Étape 3 : Octroi d’autorisations au compte de service 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 Google Cloud Platform de sorte que vous puissiez utiliser un compartiment Cloud Storage pour charger et décharger les données :

Création d’un rôle IAM personnalisé

Créez un rôle personnalisé disposant des autorisations requises pour accéder au compartiment et obtenir des objets.

  1. Connectez-vous à la console Google Cloud Platform en tant qu’éditeur de projet.

  2. Dans le tableau de bord d’accueil, sélectionnez IAM & admin » Roles.

  3. Cliquez sur Create Role.

  4. Entrez un nom et une description pour le rôle personnalisé.

  5. Cliquez sur Add Permissions.

  6. Filtrez la liste des autorisations et ajoutez les éléments suivants dans la liste :

    Action(s)

    Autorisations requises

    Chargement des données uniquement

    • storage.buckets.get

    • storage.objects.get

    • storage.objects.list

    Chargement de données avec option de purge, exécution de la commande REMOVE sur la zone de préparation

    • storage.buckets.get

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    Chargement et déchargement des données

    • storage.buckets.get (pour le calcul des coûts de transfert des données)

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.get

    • storage.objects.list

    Déchargement des données uniquement

    • storage.buckets.get

    • storage.objects.create

    • storage.objects.delete

    • storage.objects.list

  7. Cliquez sur Create.

Attribution du rôle personnalisé au compte du service Cloud Storage

  1. Connectez-vous à la console Google Cloud Platform en tant qu’éditeur de projet.

  2. Dans le tableau de bord d’accueil, sélectionnez Cloud Storage » Browser :

    Bucket List in Google Cloud Platform Console
  3. Sélectionnez un compartiment à configurer pour l’accès.

  4. Cliquez sur SHOW INFO PANEL dans le coin supérieur droit. Le panneau d’information du compartiment s’affiche en coulissant.

  5. Cliquez sur le bouton ADD PRINCIPAL.

  6. Dans le champ New principals, recherchez le nom du compte de service à partir de la sortie DESCRIBE INTEGRATION dans Étape 2 : Récupération du compte de service Cloud Storage pour votre compte Snowflake (dans cette rubrique).

    Bucket Information Panel in Google Cloud Platform Console
  7. Dans la liste déroulante Select a role , sélectionnez Custom » <rôle>, où <rôle> est le rôle Cloud Storage personnalisé que vous avez créé dans Création d’un rôle IAM personnalisé (dans ce chapitre).

  8. Cliquez sur le bouton Save. Le nom du compte de service est ajouté à la liste déroulante des rôles Storage Object Viewer dans le panneau d’informations.

    Storage Object Viewer role list in Google Cloud Platform Console

Octroi des autorisations de compte du service Cloud Storage sur les clés cryptographiques de Cloud Key Management Service

Note

Cette étape n’est requise que si votre compartiment GCS est chiffré à l’aide d’une clé stockée dans Google Cloud Key Management Service (Cloud KMS).

  1. Connectez-vous à la console Google Cloud Platform en tant qu’éditeur de projet.

  2. Dans le tableau de bord d’accueil, sélectionnez Security » Cryptographic keys.

  3. Sélectionnez le porte-clés affecté à votre compartiment GCS.

  4. Cliquez sur SHOW INFO PANEL dans le coin supérieur droit. Le panneau d’information du porte-clés s’affiche.

  5. Cliquez sur le bouton ADD PRINCIPAL.

  6. Dans le champ New principals, recherchez le nom du compte de service à partir de la sortie DESCRIBE INTEGRATION dans Étape 2 : Récupération du compte de service Cloud Storage pour votre compte Snowflake (dans cette rubrique).

  7. Dans la liste déroulante Select a role, sélectionnez le rôle Cloud KMS CrytoKey Encryptor/Decryptor.

  8. Cliquez sur le bouton Save. Le nom du compte de service est ajouté à la liste déroulante des rôles Cloud KMS CrytoKey Encryptor/Decryptor dans le panneau d’informations.

Étape 4 : Création d’une zone de préparation externe

Créez une zone de préparation externe qui fait référence à l’intégration que vous avez créée.

Note

  • Vous devez utiliser un rôle qui bénéficie ou hérite du privilège USAGE sur la base de données et le schéma et du privilège CREATE STAGE sur le schéma. 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.

    Reportez-vous à Exigences en matière de contrôle d’accès pour CREATE STAGE.

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

Création d’une zone de préparation externe avec SQL

Assurez-vous que le rôle utilisé dispose ou hérite des privilèges nécessaires pour créer une zone de préparation qui utilise une intégration de stockage. Par exemple :

GRANT USAGE ON DATABASE mydb TO ROLE myrole;
GRANT USAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT CREATE STAGE ON SCHEMA mydb.stages TO ROLE myrole;
GRANT USAGE ON INTEGRATION gcs_int TO ROLE myrole;
Copy

Vous pouvez créer une zone de préparation externe à l’aide de la commande CREATE STAGE.

Par exemple, définissez mydb.stages comme base de données et schéma actuels pour la session utilisateur, puis créez une zone de préparation nommée my_gcs_stage. Dans cet exemple, la zone de préparation fait référence au compartiment Cloud Storage 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.stages;

CREATE STAGE my_gcs_stage
  URL = 'gcs://mybucket1/path1'
  STORAGE_INTEGRATION = gcs_int
  FILE_FORMAT = my_csv_format;
Copy

Note

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

  • 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 GCS.

Création d’une zone de préparation externe avec Snowsight

Pour utiliser Snowsight afin de créer une zone de préparation externe nommée, procédez comme suit :

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Data » Databases.

  3. Sélectionnez la base de données et le schéma dans lesquels vous souhaitez créer une zone de préparation.

  4. Sélectionnez Create » Stage.

  5. Sélectionnez Google Cloud Platform.

  6. Entrez un Stage Name.

  7. Saisissez l”URL de votre compartiment Google Cloud Storage.

  8. Notez que Enable Directory Table est sélectionné par défaut. Cela vous permet de voir les fichiers sur la zone de préparation, mais nécessite un entrepôt et entraîne donc un coût. Vous pouvez choisir de désélectionner cette option pour l’instant et d’activer une table de répertoire ultérieurement.

  9. Activez Authentication.

  10. Sélectionnez votre intégration de stockage dans le menu.

  11. Il est possible de développer SQL Preview pour afficher une instruction SQL générée. Pour spécifier des options supplémentaires pour votre zone de préparation telle que AUTO_REFRESH, vous pouvez ouvrir cet aperçu SQL dans une feuille de calcul.

  12. Sélectionnez Create.

Modification de zones de préparation existantes pour utiliser des intégrations de stockage

Vous pouvez modifier une configuration de zone de préparation externe existante pour utiliser une intégration de stockage en utilisant SQL ou l’interface Web.

Note

  • Vous ne pouvez pas désactiver les paramètres d’authentification ou de chiffrement pour une zone de préparation.

  • Vous pouvez mettre à jour une zone de préparation pour utiliser une intégration de stockage pour l’authentification. Cependant, vous ne pouvez pas changer le type d’authentification en identifiants de connexion si la zone de préparation utilise déjà une intégration de stockage. Pour modifier le type d’authentification, vous pouvez supprimer et recréer la zone de préparation.

Modifier une zone de préparation à l’aide de SQL

Utilisez ALTER STAGE pour modifier la zone de préparation. Par exemple :

ALTER STAGE my_gcs_stage
  SET STORAGE_INTEGRATION = gcs_int;
Copy

Modifier une zone de préparation à l’aide de Snowsight

  1. Connectez-vous à Snowsight.

  2. Dans le menu de navigation, sélectionnez Data » Databases.

  3. Sélectionnez la zone de préparation que vous souhaitez modifier.

  4. Sélectionnez More options » Edit.

  5. Apportez les modifications souhaitées à la zone de préparation.

  6. Sélectionnez Save.