Configurer un volume externe pour Amazon S3¶
Accordez à Snowflake un accès restreint à votre propre compartiment Amazon S3 à l’aide d’un volume externe pour des tables Apache Iceberg™ dans Snowflake.
En guise de meilleure pratique, créez une politique IAM désignée qui accorde à Snowflake l’accès à votre emplacement S3. Vous pouvez ensuite associer la politique à un rôle et utiliser les identifiants de connexion de sécurité générés par AWS pour que ce rôle puisse accéder aux fichiers.
Conditions préalables¶
Avant de configurer un volume externe, vous avez besoin des éléments suivants :
Un compartiment de stockage S3 dans la même région que celle qui héberge votre compte Snowflake.
Pour utiliser le volume externe pour les tables Iceberg gérées en externe, tous vos fichiers de métadonnées et de données de table doivent être situés dans le compartiment.
Snowflake ne peut pas prendre en charge les volumes externes dont les noms de compartiment contiennent des points (par exemple,
my.s3.bucket
). Snowflake utilise des chemins d’accès de style hôte virtuel et HTTPS pour accéder aux données de S3. Cependant, S3 ne prend pas en charge SSL pour les compartiments de style hôte virtuel dont le nom comporte des points.Pour faciliter la récupération des données, activez la gestion des versions pour votre emplacement de stockage Cloud externe.
Autorisations dans AWS pour créer et gérer des politiques et des rôles IAM. Si vous n’êtes pas un administrateur AWS, demandez à votre administrateur AWS d’effectuer ces tâches.
Étape 1 : créez une politique IAM qui accorde l’accès à votre emplacement S3¶
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.
Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.
Dans le volet de navigation de gauche, sélectionnez Account settings.
Dans Security Token Service (STS), dans la liste Endpoints, recherchez la région Snowflake dans laquelle se trouve votre compte. Si STS status est inactif, placez la bascule sur Active.
Dans le volet de navigation de gauche, sélectionnez Policies.
Sélectionnez Create Policy.
Pour Policy editor, sélectionnez JSON.
Ajoutez une politique pour fournir à Snowflake les autorisations nécessaires pour lire et écrire des données sur votre emplacement S3.
L’exemple de politique suivant accorde l’accès à tous les emplacements du compartiment spécifié.
Note
Remplacez
my_bucket
par le nom de votre compartiment. Vous pouvez également spécifier un chemin dans le compartiment ; par exemple,my_bucket/path
.Si vous attribuez la valeur
["*"]
à la condition"s3:prefix":
, vous aurez accès à tous les préfixes du compartiment spécifié ; si vous attribuez la valeur["path/*"]
, vous aurez accès à un chemin spécifié du compartiment.Pour les compartiments des régions gouvernementales, les ARNs de compartiments utilisent le 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:::<my_bucket>/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::<my_bucket>", "Condition": { "StringLike": { "s3:prefix": [ "*" ] } } } ] }
Sélectionnez Next.
Saisissez un Policy name (par exemple,
snowflake_access
) et une Description facultative.Sélectionnez Create policy.
Étape 2 : créer un rôle IAM¶
Créez un rôle AWS IAM qui accorde des privilèges sur le compartiment S3 contenant vos fichiers de données.
Dans le volet de navigation gauche du tableau de bord de la gestion des identités et des accès (IAM), sélectionnez Roles.
Sélectionnez Create role.
Comme type d’entité de confiance, sélectionnez AWS account.
Sous An AWS account, sélectionnez This account. Dans une étape ultérieure, vous modifierez la relation de confiance et accorderez l’accès à Snowflake.
Sélectionnez l’option Require external ID. Saisissez un ID externe de votre choix. Par exemple,
iceberg_table_external_id
.Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake.
Sélectionnez Next.
Sélectionnez la politique que vous avez créée pour le volume externe, puis sélectionnez Next.
Saisissez un Role name et une description pour le rôle, puis sélectionnez Create role.
Vous avez maintenant créé une politique IAM pour un emplacement S3, créé un rôle IAM et vous avez associé la politique au rôle.
Sélectionnez View role pour voir la page de résumé du rôle. Localisez et enregistrez la valeur de ARN (Amazon Resource Name) pour le rôle.
Étape 3 : Accorder les privilèges requis pour le chiffrement SSE-KMS au rôle IAM (facultatif)¶
Si vous souhaitez charger un objet chiffré avec une clé KMS AWS sur Amazon S3, le rôle IAM que vous avez créé pour votre volume externe a besoin des autorisations kms:GenerateDataKey
sur la clé. Pour télécharger un objet chiffré avec une clé KMS AWS, le rôle IAM a besoin d’autorisations kms:Decrypt
sur la clé.
Si vous souhaitez utiliser une clé KMS pour votre chiffrement côté serveur, procédez comme suit pour créer une clé et la référencer.
Dans la Console de gestion AWS, accédez au service de gestion des clés KMS. Dans la navigation de gauche, sélectionnez Customer managed keys, puis Create key. Vous devez créer une clé dans la même région que celle de votre compartiment.
Créez un type de clé Symmetric. Pour l’utilisation de la clé, sélectionnez Encrypt and decrypt. Sélectionnez Next.
Pour Alias, saisissez un nom pour la clé et sélectionnez Next.
Si nécessaire, sélectionnez un administrateur pour la clé et sélectionnez Next.
Pour Define key usage permissions, sélectionnez votre rôle IAM, puis Next.
Examinez les détails de la configuration de la clé, puis sélectionnez Finish pour créer la clé.
Recherchez la clé dans la liste des clés gérées par le client, sélectionnez-la et enregistrez son ARN. Voici un exemple d’ARN d’une clé :
arn:aws:kms:us-west-2:111111122222:key/1a1a11aa-aa1a-aaa1a-a1a1-000000000000
.Lorsque vous créez votre volume externe, définissez la valeur
KMS_KEY_ID
sur l’ARN de votre clé.
Étape 4 : Créer un volume externe dans Snowflake¶
Créez un volume externe via la commande CREATE EXTERNAL VOLUME. L’exemple suivant crée un volume externe nommé iceberg_external_volume
qui définit un emplacement de stockage Amazon S3 avec chiffrement.
CREATE OR REPLACE EXTERNAL VOLUME iceberg_external_volume
STORAGE_LOCATIONS =
(
(
NAME = 'my-s3-us-west-2'
STORAGE_PROVIDER = 'S3'
STORAGE_BASE_URL = 's3://<my_bucket>/'
STORAGE_AWS_ROLE_ARN = '<arn:aws:iam::123456789012:role/myrole>'
STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id'
)
);
L’exemple spécifie l’ID de volume externe (iceberg_table_external_id
) associé au rôle IAM que vous avez créé pour le volume externe. La spécification d’un ID externe vous permet d’utiliser le même rôle IAM (et ID externe) sur plusieurs volumes externes.
Note
Spécifiez des ARNs exactement comme fournis par AWS. Les ARNs sont insensibles à la casse.
Étape 5 : Récupérer l’utilisateur IAM AWS de votre compte Snowflake¶
Récupérez l’ARN de l’utilisateur IAM AWS automatiquement créé pour votre compte Snowflake avec la commande DESCRIBE EXTERNAL VOLUME. Indiquez le nom de votre volume externe.
L’exemple suivant décrit un volume externe nommé
iceberg_external_volume
:DESC EXTERNAL VOLUME iceberg_external_volume;
Enregistrez la valeur de la propriété
STORAGE_AWS_IAM_USER_ARN
, qui est l’utilisateur AWS IAM 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. Tous les volumes externes S3 de votre compte utilisent cet utilisateur IAM.
Note
Si vous n’avez pas spécifié d’ID externe (
STORAGE_AWS_EXTERNAL_ID
) lors de la création d’un volume externe, Snowflake génère un ID à utiliser. Enregistrez la valeur afin de pouvoir mettre à jour votre politique de confiance du rôle IAM avec l’ID de rôle externe généré.
Étape 6 : Accorder à l’utilisateur IAM des autorisations lui permettant d’accéder à des objets de compartiment¶
Dans cette étape, vous configurez les autorisations qui permettent à l’utilisateur IAM de votre compte Snowflake d’accéder aux objets de votre compartiment S3.
Connectez-vous à la console de gestion AWS.
Depuis le tableau de bord d’accueil, recherchez et sélectionnez IAM.
Dans le volet de navigation de gauche, sélectionnez Roles.
Sélectionnez le rôle IAM que vous avez créé pour votre volume externe.
Sélectionnez l’onglet Trust relationships.
Sélectionnez Edit trust policy.
Modifiez le document de politique en y ajoutant les valeurs de sortie DESC EXTERNAL VOLUME que vous avez enregistrées.
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": "<iceberg_table_external_id>" } } } ] }
Où :
snowflake_user_arn
est la valeur STORAGE_AWS_IAM_USER_ARN que vous avez enregistrée.iceberg_table_external_id
est votre ID externe. Si vous avez déjà spécifié un ID externe lors de la création du rôle et que vous avez utilisé le même ID pour créer votre volume externe, laissez la valeur telle quelle. Sinon, mettez à joursts:ExternalId
avec la valeur que vous avez enregistrée.
Note
Vous devez mettre à jour ce document de politique si vous créez un nouveau volume externe (ou si vous recréez un volume externe existant via la syntaxe CREATE OR REPLACE EXTERNAL VOLUME) et que vous ne fournissez pas votre propre ID externe. Pour des raisons de sécurité, un volume externe nouveau ou recréé a un ID externe différent et ne peut pas résoudre la relation de confiance à moins que vous ne mettiez à jour cette politique de confiance.
Sélectionnez Update policy pour enregistrer vos modifications.
Étape 7 : Vérifier l’accès au stockage¶
Pour vérifier que Snowflake peut s’authentifier avec succès auprès de votre fournisseur de stockage, appelez la fonction SYSTEM$VERIFY_EXTERNAL_VOLUME.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('my_s3_external_volume');
Prochaines étapes¶
Après avoir configuré un volume externe, vous pouvez créer une table Iceberg.
Pour créer une table Iceberg en lecture seule qui utilise un catalogue externe, consultez Configuration d’une intégration de catalogue.
Pour créer une table Iceberg avec une prise en charge complète de la plateforme Snowflake, voir Création d’une table gérée par Snowflake.