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>' ]
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' ]cloudProviderParams (for Google Cloud Storage) ::= STORAGE_PROVIDER = 'GCS'cloudProviderParams (for Microsoft Azure) ::= STORAGE_PROVIDER = 'AZURE' AZURE_TENANT_ID = '<tenant_id>'
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 valeurSTORAGE_BLOCKED_LOCATIONS
. Par exemple, siSTORAGE_ALLOWED_LOCATIONS
inclutstorage_location/
, alorsSTORAGE_BLOCKED_LOCATIONS
ne peut pas inclurestorage_location/path1/
. De même, siSTORAGE_ALLOWED_LOCATIONS
inclutstorage_location/path1/
, alorsSTORAGE_BLOCKED_LOCATIONS
ne peut pas inclurestorage_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 terminaisonblob.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 exemplemycontainer
).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ètreSTORAGE_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 exemplemycontainer
).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/');
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/');
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/');
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/');
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/');
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/');