CREATE STORAGE INTEGRATION

Crée une nouvelle intégration de stockage dans le compte ou remplace une intégration existante.

Une intégration de stockage est un objet Snowflake qui stocke une entité de gestion des identités et des accès générée (IAM) pour votre stockage Cloud externe, ainsi qu’un ensemble facultatif d’emplacements de stockage autorisés ou bloqués (Amazon S3, Google Cloud Storage ou Microsoft Azure). Les administrateurs de fournisseur de Cloud de votre entreprise accordent des autorisations sur les emplacements de stockage à l’entité générée. 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/déchargement de données.

Une intégration de stockage peut prendre en charge plusieurs zones de préparation externes. L’URL dans la définition de zone de préparation doit correspondre à l’emplacement de stockage spécifié pour le paramètre STORAGE_ALLOWED_LOCATIONS.

Note

  • Les intégrations de stockage peuvent être configurées pour prendre en charge Amazon S3, Google Cloud Storage ou le stockage Cloud Microsoft Azure quel que soit le fournisseur de Cloud qui héberge votre compte Snowflake. Si votre stockage Cloud est situé sur une plateforme Cloud différente de votre compte Snowflake, l’emplacement de stockage doit être dans le Cloud public et non dans un environnement privé virtuel.

    Les fournisseurs de Cloud facturent les données transférées à partir de leur propre réseau. Pour se retrouver financièrement, Snowflake facture des frais par octet lorsque vous déchargez des données de Snowflake (hébergées sur Amazon Web Services (AWS), Google Cloud Platform ou Microsoft Azure) dans une zone de préparation externe d’une autre région ou d’un autre fournisseur de Cloud. Snowflake ne facture pas l’alimentation de données (c.-à-d. lors du chargement des données dans Snowflake). Pour plus de détails, consultez la page de tarification (sur le site Web de Snowflake).

  • Actuellement, l’accès au stockage Cloud dans une région gouvernementale à l’aide d’une intégration de stockage est limité aux comptes Snowflake hébergés dans la même région gouvernementale. L’accès à votre stockage Cloud à partir d’un compte hébergé en dehors de la région gouvernementale à l’aide d’identifiants directs est pris en charge.

Voir aussi :

ALTER STORAGE INTEGRATION , DROP INTEGRATION , SHOW INTEGRATIONS

Syntaxe

CREATE [ OR REPLACE ] STORAGE INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_STAGE
  cloudProviderParams
  ENABLED = { TRUE | FALSE }
  STORAGE_ALLOWED_LOCATIONS = ('<cloud>://<bucket>/<path>/' [ , '<cloud>://<bucket>/<path>/' ... ] )
  [ STORAGE_BLOCKED_LOCATIONS = ('<cloud>://<bucket>/<path>/' [ , '<cloud>://<bucket>/<path>/' ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Où :

cloudProviderParams (for Amazon S3) ::=
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = '<iam_role>'
  [ STORAGE_AWS_EXTERNAL_ID = '<external_id>' ]
  [ STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control' ]
Copy
cloudProviderParams (for Google Cloud Storage) ::=
  STORAGE_PROVIDER = 'GCS'
Copy
cloudProviderParams (for Microsoft Azure) ::=
  STORAGE_PROVIDER = 'AZURE'
  AZURE_TENANT_ID = '<tenant_id>'
Copy

Paramètres requis

name

Chaîne spécifiant l’identificateur (c’est-à-dire le nom) de l’intégration ; elle doit être unique sur votre compte.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

TYPE = EXTERNAL_STAGE

Spécifiez le type d’intégration :

  • EXTERNAL_STAGE : crée une interface entre Snowflake et un emplacement de stockage dans le Cloud externe.

ENABLED = TRUE | FALSE

Spécifie si cette intégration de stockage est disponible pour une utilisation dans des zones de préparation.

  • TRUE permet aux utilisateurs de créer de nouvelles zones de préparation faisant référence à cette intégration. Les zones de préparation existantes qui font référence à cette intégration fonctionnent normalement.

  • FALSE empêche les utilisateurs de créer de nouvelles zones de préparation faisant référence à cette intégration. Les zones de préparation existantes faisant référence à cette intégration ne peuvent pas accéder à l’emplacement de stockage dans la définition de zone de préparation.

STORAGE_ALLOWED_LOCATIONS = ('cloud_specific_url')

Limite explicitement les zones de préparation externes qui utilisent l’intégration pour faire référence à un ou plusieurs emplacements de stockage (compartiment S3, compartiment GCS ou conteneur Azure, par exemple). Prend en charge une liste d’URLs séparée par des virgules pour les compartiments existants et, éventuellement, les chemins utilisés pour stocker les fichiers de données à des fins de chargement/déchargement. Prend également en charge le caractère générique * ce qui signifie « autoriser l’accès à tous les compartiments et/ou chemins ».

Notez que si la valeur STORAGE_ALLOWED_LOCATIONS inclut un emplacement de stockage spécifique, tous les sous-chemins du même emplacement doivent être autorisés. Aucun sous-chemin ne peut être inclus dans une valeur STORAGE_BLOCKED_LOCATIONS. Par exemple, si STORAGE_ALLOWED_LOCATIONS inclut storage_location/, alors STORAGE_BLOCKED_LOCATIONS ne peut pas inclure storage_location/path1/. De même, si STORAGE_ALLOWED_LOCATIONS inclut storage_location/path1/, alors STORAGE_BLOCKED_LOCATIONS ne peut pas inclure storage_location/path1/path2/, et ainsi de suite.

Amazon S3

STORAGE_ALLOWED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] ) | STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )

  • Le préfixe s3 fait référence au stockage S3 dans les régions publiques AWS.

    Le préfixe s3gov fait référence au stockage S3 dans les régions gouvernementales.

  • bucket est le nom d’un compartiment S3 qui stocke vos fichiers de données (par exemple, mybucket).

  • path est un chemin facultatif sensible à la casse pour les fichiers de l’emplacement de stockage Cloud (c’est-à-dire que les fichiers ont des noms qui commencent par une chaîne commune) qui limite l’accès à un ensemble de fichiers. Les chemins sont appelés préfixes ou dossiers selon les services de stockage Cloud.

Google Cloud Storage

STORAGE_ALLOWED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )

  • bucket est le nom d’un compartiment GCS qui stocke vos fichiers de données (par exemple, mybucket).

  • path est un chemin facultatif sensible à la casse pour les fichiers de l’emplacement de stockage Cloud (c’est-à-dire que les fichiers ont des noms qui commencent par une chaîne commune) qui limite l’accès à un ensemble de fichiers. Les chemins sont appelés préfixes ou dossiers selon les services de stockage Cloud.

Microsoft Azure

STORAGE_ALLOWED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )

  • account est le nom du compte de stockage Azure (par exemple, myaccount). Utilisez le point de terminaison blob.core.windows.net pour tous les types de comptes de stockage Azure Blob pris en charge, dont Data Lake Storage Gen2.

  • container est le nom d’un conteneur de stockage Azure Blob qui stocke vos fichiers de données (par exemple mycontainer).

  • path est un chemin facultatif sensible à la casse pour les fichiers de l’emplacement de stockage Cloud (c’est-à-dire que les fichiers ont des noms qui commencent par une chaîne commune) qui limite l’accès à un ensemble de fichiers. Les chemins sont appelés préfixes ou dossiers selon les services de stockage Cloud.

Paramètres facultatifs

STORAGE_BLOCKED_LOCATIONS = ('cloud_specific_url')

Empêche explicitement les zones de préparation externes qui utilisent l’intégration de référencer un ou plusieurs emplacements de stockage (c.-à-d. compartiments S3 ou GCS). Prend en charge une liste d’URLs séparée par des virgules pour les emplacements de stockage existants et, éventuellement, les chemins utilisés pour stocker les fichiers de données à des fins de chargement/déchargement. Couramment utilisé lorsque STORAGE_ALLOWED_LOCATIONS est défini sur le caractère générique *, ce qui permet d’accéder à tous les compartiments de votre compte à l’exception des emplacements de stockage bloqués et, éventuellement, des chemins d’accès.

Note

Veillez à ne mettre entre guillemets que les URLs d’emplacement de stockage Cloud. Si vous mettez toute la valeur STORAGE_BLOCKED_LOCATIONS entre guillemets, la valeur n’est pas valide. Par conséquent, le paramètre STORAGE_BLOCKED_LOCATIONS est ignoré lorsque des utilisateurs créent des zones de préparation qui font référence à l’intégration du stockage.

Amazon S3

STORAGE_BLOCKED_LOCATIONS = ( 's3://bucket/path/' [ , 's3://bucket/path/' ... ] ) | STORAGE_ALLOWED_LOCATIONS = ( 's3gov://bucket/path/' [ , 's3gov://bucket/path/' ... ] )

  • Le préfixe s3 fait référence au stockage S3 dans les régions publiques AWS.

    Le préfixe s3gov fait référence au stockage S3 dans les régions gouvernementales.

  • bucket est le nom d’un compartiment S3 qui stocke vos fichiers de données (par exemple, mybucket).

  • path est un chemin facultatif (ou répertoire) dans le compartiment qui limite encore plus l’accès aux fichiers de données.

Google Cloud Storage

STORAGE_BLOCKED_LOCATIONS = ( 'gcs://bucket/path/' [ , 'gcs://bucket/path/' ... ] )

  • bucket est le nom d’un compartiment GCS qui stocke vos fichiers de données (par exemple, mybucket).

  • path est un chemin facultatif (ou répertoire) dans le compartiment qui limite encore plus l’accès aux fichiers de données.

Microsoft Azure

STORAGE_BLOCKED_LOCATIONS = ( 'azure://account.blob.core.windows.net/container/path/' [ , 'azure://account.blob.core.windows.net/container/path/' ... ] )

  • account est le nom du compte de stockage Azure (par exemple, myaccount).

  • container est le nom d’un conteneur de stockage Azure Blob qui stocke vos fichiers de données (par exemple mycontainer).

  • path est un chemin facultatif (ou répertoire) dans le compartiment qui limite encore plus l’accès aux fichiers de données.

COMMENT = 'string_literal'

Chaîne (littéral) qui spécifie un commentaire pour l’intégration.

Par défaut : aucune valeur

Paramètres du fournisseur Cloud (cloudProviderParams)

Amazon S3

STORAGE_PROVIDER = { S3 | S3GOV }

Spécifie le fournisseur de stockage dans le Cloud qui stocke vos fichiers de données :

  • S3 : stockage S3 dans des régions publiques AWS.

  • S3GOV : stockage S3 dans des régions gouvernementales AWS.

STORAGE_AWS_ROLE_ARN = 'iam_role'

Spécifie le nom de ressource Amazon (ARN) du rôle AWS de gestion des identités et des accès (IAM) qui octroie des privilèges sur le compartiment S3 contenant vos fichiers de données. Pour plus d’informations, voir Configuration de l’accès sécurisé à Amazon S3.

STORAGE_AWS_EXTERNAL_ID = 'external_id'

Spécifie optionnellement un ID externe que Snowflake utilise pour établir une relation de confiance avec AWS. Vous devez spécifier le même ID externe dans la politique de confiance du rôle IAM que vous avez configuré pour cette intégration de stockage. Pour plus d’informations, voir Comment utiliser un ID externe lorsque vous accordez l’accès à vos ressources AWS à un tiers.

Si vous ne spécifiez pas de valeur pour ce paramètre, Snowflake génère automatiquement un ID externe lorsque vous créez l’intégration de stockage.

STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'

Permet de prendre en charge les listes de contrôle d’accès AWS (ACLs) pour accorder au propriétaire du compartiment un contrôle total. Les fichiers créés dans les compartiments Amazon S3 à partir de données de table déchargées sont la propriété d’un rôle de gestion des identités et des accès AWS (IAM). Les ACLs prennent en charge le cas d’utilisation où les rôles IAM d’un compte AWS sont configurés pour accéder à des compartiments S3 d’un ou plusieurs autres comptes AWS. Sans la prise en charge ACL, les utilisateurs des comptes propriétaires de compartiments ne pourraient pas accéder aux fichiers de données déchargés vers une zone de préparation externe (S3) en utilisant une intégration de stockage.

Lorsque les utilisateurs déchargent les données de la table Snowflake dans des fichiers de données d’une zone de préparation S3 en utilisant COPY INTO <emplacement>, l’opération de déchargement applique une ACL aux fichiers de données déchargés. Les fichiers de données appliquent le privilège "s3:x-amz-acl":"bucket-owner-full-control" aux fichiers, accordant au propriétaire du compartiment S3 un contrôle total sur ces derniers.

Google Cloud Storage

STORAGE_PROVIDER = 'GCS'

Spécifie le fournisseur de stockage dans le Cloud qui stocke vos fichiers de données.

Microsoft Azure

STORAGE_PROVIDER = 'AZURE'

Spécifie le fournisseur de stockage dans le Cloud qui stocke vos fichiers de données.

AZURE_TENANT_ID = 'tenant_id'

Spécifie l” ID de votre client Office 365 auquel appartiennent les comptes de stockage autorisés et bloqués. Une intégration de stockage peut s’authentifier auprès d’un seul client. Les emplacements de stockage autorisés et bloqués doivent donc faire référence aux comptes de stockage qui appartiennent tous à ce client.

Pour trouver votre ID de client, connectez-vous au portail Azure et cliquez sur Azure Active Directory » Properties. L” ID de client s’affiche dans le champ Tenant ID.

Exigences en matière de contrôle d’accès

Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :

Privilège

Objet

Remarques

CREATE INTEGRATION

Compte

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

Prudence

La recréation d’une intégration de stockage (à l’aide de CREATE OR REPLACE STORAGE INTEGRATION) annule l’association entre l’intégration de stockage et toute zone de préparation qui y fait référence. En effet, une zone de préparation est liée à une intégration de stockage à l’aide d’un ID caché plutôt que le nom de l’intégration de stockage. En coulisse, la syntaxe CREATE OR REPLACE détruit l’objet et le recrée avec un ID caché différent.

Si vous devez recréer une intégration de stockage après qu’elle a été liée à une ou plusieurs zones de préparation, vous devez rétablir l’association entre chaque zone de préparation et l’intégration de stockage en exécutant ALTER STAGE stage_name SET STORAGE_INTEGRATION = storage_integration_name, où :

  • stage_name est le nom de la zone de préparation.

  • storage_integration_name est le nom de l’intégration de stockage.

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.

Exemples

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

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('s3://mybucket1/path1/', 's3://mybucket2/path2/');
Copy

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/', 'gcs://mybucket2/path2/');
Copy

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'AZURE'
  ENABLED = TRUE
  AZURE_TENANT_ID = '<tenant_id>'
  STORAGE_ALLOWED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path1/', 'azure://myaccount.blob.core.windows.net/mycontainer/path2/');
Copy

L’exemple suivant crée une intégration qui permet aux zones de préparation externes utilisant l’intégration de référencer tout compartiment et chemin de votre compte , à l’exception de ceux explicitement bloqués :

Amazon S3

CREATE STORAGE INTEGRATION s3_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'S3'
  STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('s3://mybucket3/path3/', 's3://mybucket4/path4/');
Copy

Google Cloud Storage

CREATE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('gcs://mybucket3/path3/', 'gcs://mybucket4/path4/');
Copy

Microsoft Azure

CREATE STORAGE INTEGRATION azure_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'AZURE'
  ENABLED = TRUE
  AZURE_TENANT_ID = 'a123b4c5-1234-123a-a12b-1a23b45678c9'
  STORAGE_ALLOWED_LOCATIONS = ('*')
  STORAGE_BLOCKED_LOCATIONS = ('azure://myaccount.blob.core.windows.net/mycontainer/path3/', 'azure://myaccount.blob.core.windows.net/mycontainer/path4/');
Copy