Configuration du stockage S3 pour pg_lake¶
pg_lake est une extension PostgreSQL qui permet une interrogation efficace des données stockées dans des formats de stockage d’objets tels que Parquet et ORC. Lorsque vous utilisez pg_lake avec Snowflake Postgres, vous configurez l’accès à un compartiment Amazon S3 dans lequel vos données sont stockées en utilisant une intégration de stockage Snowflake.
Cette rubrique explique comment configurer les autorisations de compartiment S3 sur AWS et créer une intégration de stockage qui permet à Snowflake Postgres d’accéder à vos données.
Note
Actuellement, ce stockage S3 n’est pas géré par Snowflake Postgres. Vous fournissez votre propre compartiment S3 et configurez l’accès via une intégration de stockage que vous associez à votre instance Postgres.
Conditions préalables¶
Avant de configurer le stockage S3 pour pg_lake, assurez-vous que vous disposez des éléments suivants :
Un compte AWS actif doté d’autorisations pour créer et gérer des `compartiments S3<https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html>`_ et des rôles IAM.
Un compartiment S3 dans la même région AWS que votre compte Snowflake. Pour déterminer la région de votre compte Snowflake, exécutez la requête suivante dans Snowflake (et non sur votre instance Postgres) :
SELECT CURRENT_REGION();
Une connaissance des rôles et politiques AWS IAM.
Une instance Snowflake Postgres avec prise en charge de pg_lake.
Des privilèges pour créer des intégrations de stockage dans Snowflake (nécessite le rôle ACCOUNTADMIN ou un rôle disposant du privilège CREATE INTEGRATION sur le compte).
Étape 1 : Créer un compartiment S3¶
Si vous n’en avez pas déjà un, créez un compartiment S3 dans la même région AWS que votre compte Snowflake. Par exemple, si votre compte Snowflake est situé dans la région us-west-2, créez le compartiment S3 dans la région us-west-2.
Reportez-vous à la documentation AWS pour obtenir des instructions sur la `création d’un compartiment S3<https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html>`_.
Étape 2 : Créer une politique IAM relative à l’accès à S3¶
Créer une politique IAM qui accorde les autorisations nécessaires pour pg_lake à la lecture et à l’écriture dans votre compartiment S3 :
Connectez-vous à la console de gestion AWS et accédez au service IAM.
Dans le volet de navigation de gauche, sélectionnez Account settings.
Dans Security Token Service (STS) dans la liste des points de terminaison, recherchez la région Snowflake dans laquelle se trouve votre compte. Si le statut STS est inactif, placez la bascule sur Active. Pour plus d’informations, voir Activation et désactivation de AWS STS dans une région AWS.
Dans le volet de navigation de gauche, sélectionnez Policies, puis Create policy.
Pour Policy editor, sélectionnez JSON.
Ajoutez le document de politique qui permet à Snowflake d’accéder au compartiment et au dossier S3. Remplacez le
bucket_nameet leprefixpar votre nom de compartiment actuel et le préfixe du chemin d’accès au dossier :{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::bucket_name/prefix/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name", "Condition": { "StringLike": { "s3:prefix": [ "prefix/*" ] } } } ] }
Cette politique accorde les autorisations suivantes :
Lire, écrire et supprimer des objets dans le chemin S3 spécifié
Lister le contenu du compartiment et récupérer l’emplacement du compartiment
Prise en charge de la capacité de pg_lake à créer et à gérer des tables Iceberg
Choisissez Next.
Saisissez un nom de politique (par exemple,
snowflake_pg_lake_access) et une description facultative.Choisissez Create policy.
Étape 3 : Création d’un rôle IAM¶
Créez un rôle IAM que Snowflake assumera pour accéder à votre compartiment S3.
Important
Lorsque vous créez ce rôle, vous devez définir Maximum session duration sur 12 hours. L’intégration de stockage ne fonctionnera pas avec la durée de session par défaut. Consultez la dernière étape de cette section.
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.
Sélectionnez AWS account comme type d’entité de confiance.
Sélectionnez Another AWS account.
Dans le champ Account ID saisissez votre propre AWS de compte ID temporaire. Vous modifierez la relation de confiance dans une étape ultérieure et accorderez l’accès à Snowflake.
Sélectionnez l’option Require external ID. Saisissez un ID externe temporaire tel que
0000. Vous le mettrez à jour avec l’ID externe actuel généré par Snowflake dans une étape ultérieure.Note
Un ID externe est utilisé pour accorder l’accès à vos ressources AWS (telles que des compartiments S3) à un tiers comme Snowflake. Pour plus d’informations, voir Comment utiliser un ID externe lorsque vous accordez l’accès à vos ressources AWS à un tiers.
Sélectionnez Next.
Recherchez et sélectionnez la politique que vous avez créée à l’étape 2 : Créez une politique IAM d’accès à S3.
Sélectionnez Next.
Saisissez un nom et une description pour le rôle (par exemple,
snowflake_pg_lake_role), puis sélectionnez Create role.Sur la page de synthèse du rôle, recherchez et enregistrez la valeur Role ARN. Vous en aurez besoin lors de la création de l’intégration de stockage dans Snowflake.
Lorsque vous êtes sur la page de résumé du rôle, sélectionnez Edit dans la section du résumé et modifiez la Maximum session duration sur
12 hours. Sélectionnez Save changes. Pour plus d’informations, voir Modification de la durée de session maximale d’un rôle (AWS).
Étape 4 : Créer une intégration de stockage dans Snowflake¶
Créez un objet d’intégration de stockage dans Snowflake qui fait référence au rôle IAM que vous avez créé. Pour la syntaxe complète de la commande, voir CREATE STORAGE INTEGRATION.
CREATE STORAGE INTEGRATION my_pg_lake_integration
TYPE = POSTGRES_EXTERNAL_STORAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake_pg_lake_role'
STORAGE_ALLOWED_LOCATIONS = ('s3://my-bucket/my-prefix/');
Où :
my_pg_lake_integrationest le nom que vous choisissez pour l’intégration de stockage.TYPE = POSTGRES_EXTERNAL_STORAGEspécifie que cette intégration est à utiliser avec Snowflake Postgres.STORAGE_AWS_ROLE_ARNest l’ARN du rôle vous avez enregistré à l’étape 3 : Créez un rôle IAM.STORAGE_ALLOWED_LOCATIONSspécifie le compartiment S3 et le préfixe de chemin. Remplacezmy-bucketetmy-prefixavec le nom du compartiment et le chemin du dossier que vous avez créés à l’étape 1 : Créez un compartiment S3. Notez qu’un seul emplacement est autorisé pour les intégrations de stockage Postgres.
Note
La création d’une intégration de stockage nécessite le rôle ACCOUNTADMIN ou un rôle disposant du privilège CREATE INTEGRATION. Pour plus d’informations, voir Privilèges de contrôle d’accès.
Étape 5 : Récupération de l’ARN utilisateur Snowflake IAM et de l’ID externe¶
Après avoir créé l’intégration de stockage, utilisez la commande DESCRIBE INTEGRATION pour récupérer l’ID utilisateur AWS IAM et externe que Snowflake a généré pour cette intégration :
DESCRIBE STORAGE INTEGRATION my_pg_lake_integration;
Dans la sortie, recherchez et enregistrez les valeurs suivantes :
STORAGE_AWS_IAM_USER_ARN: L’ARN utilisateur IAM que Snowflake utilisera pour assumer le rôleSTORAGE_AWS_EXTERNAL_ID: L’ID externe à utiliser dans la politique de confiance
Vous utiliserez ces valeurs à l’étape suivante pour configurer la politique de confiance du rôle IAM.
Étape 6 : Mettre à jour la politique de confiance du rôle IAM¶
Mettez à jour la politique de confiance du rôle IAM que vous avez créée à l’étape 3 : Créez un rôle IAM pour permettre à Snowflake d’assumer le rôle :
Connectez-vous à la console de gestion AWS et accédez au service IAM.
Dans le volet de navigation de gauche, sélectionnez Roles.
Sélectionnez le rôle que vous avez créé à l’étape 3 : Créez un rôle IAM.
Sélectionnez l’onglet Trust relationships.
Sélectionnez Edit trust policy.
Remplacez le document de politique par le texte suivant :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<storage_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<storage_aws_external_id>" } } } ] }
Remplacez les valeurs par défaut par les valeurs que vous avez enregistrées à l’étape 5 : Récupérez l’ARN utilisateur Snowflake IAM et l’ID externe :
Remplacez
storage_aws_iam_user_arnpar la valeurSTORAGE_AWS_IAM_USER_ARN. Il s’agit d’un ARN complet sous la formearn:aws:iam::<account_id>:user/snowflake-postgres-integration-management, où le nom d’utilisateur est toujours le même et seulement l’ID de compte AWS varie.Remplacez
storage_aws_external_idpar la valeurSTORAGE_AWS_EXTERNAL_ID.
Sélectionnez Update policy pour enregistrer les modifications.
Étape 7 : Joindre l’intégration de stockage à votre instance Postgres¶
Associez l’intégration de stockage à votre instance Snowflake Postgres. Lorsque l’intégration de stockage est associée, les identifiants S3 sont automatiquement synchronisés avec le plan de contrôle Postgres et mis à la disposition de pg_lake :
ALTER POSTGRES INSTANCE my_postgres_instance
SET STORAGE_INTEGRATION = my_pg_lake_integration;
Vous pouvez également spécifier l’intégration de stockage lors de la création d’une nouvelle instance Postgres :
CREATE POSTGRES INSTANCE my_postgres_instance
...
STORAGE_INTEGRATION = my_pg_lake_integration;
Pour supprimer une intégration de stockage d’une instance Postgres :
ALTER POSTGRES INSTANCE my_postgres_instance
UNSET STORAGE_INTEGRATION;
Étape 8 : Configurer et utiliser pg_lake¶
Après avoir associé l’intégration de stockage, connectez-vous à votre instance Postgres et configurez pg_lake. Pour une liste des extensions disponibles, voir Extensions Snowflake Postgres.
Créez l’extension pg_lake :
CREATE EXTENSION pg_lake CASCADE;
Définissez l’emplacement de stockage par défaut des tables Iceberg. Il doit correspondre à l’emplacement spécifié dans votre intégration de stockage.
La commande SET ne s’applique qu’à la session en cours :
SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
Pour définir la valeur pour toutes les sessions actuelles et futures, utilisez plutôt la commande ALTER DATABASE. Si vous utilisez plusieurs bases de données Postgres, assurez-vous de définir l’emplacement de stockage pour chaque base de données :
-- Substitute the name of your database ALTER DATABASE my_database SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
Vérifiez que l’intégration de stockage est configurée correctement en listant le contenu de votre compartiment S3 :
SELECT * FROM lake_file.list('s3://my-bucket/my-prefix/*');
Remplacez
my-bucketetmy-prefixpar le nom et le chemin de votre compartiment. Si la configuration est correcte, cette requête renvoie une liste de fichiers à cet emplacement. Si le compartiment est vide, la requête renvoie un jeu de résultats vide sans erreur.Vérifiez la configuration de bout en bout en créant une table Iceberg, en insérant des données et en l’interrogeant à nouveau. Si cela réussit, pg_lake peut lire et écrire dans votre compartiment S3 :
CREATE TABLE my_table ( id INT, data TEXT ) USING iceberg; INSERT INTO my_table VALUES (1, 'hello iceberg'); SELECT * FROM my_table;
Remarques relatives à la sécurité¶
Lors de la configuration de l’accès S3 pour pg_lake, gardez à l’esprit les bonnes pratiques en matière de sécurité suivantes :
Utilisez les rôles IAM : Snowflake Postgres utilise l’assomption de rôle IAM plutôt que des informations d’identification statiques, offrant ainsi une meilleure sécurité grâce à des informations d’identification temporaires et à une rotation automatique des informations d’identification.
Limitez les autorisations IAM : Accordez uniquement les autorisations minimales nécessaires aux chemins de compartiment S3 auxquels pg_lake doit accéder. La politique IAM doit restreindre l’accès à des préfixes de compartiment spécifiques.
Vérifiez l’ID externe : L’ID externe dans la politique de confiance garantit que seul votre compte Snowflake peut assumer le rôle IAM.
Examinez les modifications de l’intégration de stockage : Toute mise à jour de
STORAGE_AWS_ROLE_ARNouSTORAGE_ALLOWED_LOCATIONSde l’intégration de stockage est automatiquement synchronisée avec l’instance Postgres.Utilisez les politiques de compartiment : Envisagez d’utiliser des politiques de compartiment S3 en plus des politiques IAM pour une défense en profondeur.
Activez la journalisation des accès S3 : Activez la journalisation des accès sur votre compartiment S3 pour surveiller et auditer les modèles d’accès.
Alignement régional : Assurez-vous que votre compartiment S3 est situé dans la même région AWS que votre compte Snowflake pour des performances optimales et pour répondre aux exigences en matière de propriété des données.
Résolution des problèmes¶
Erreurs lors de la création de l’intégration de stockage¶
Si vous rencontrez des erreurs lors de la création de l’intégration de stockage :
Vérifiez que vous disposez du rôle ACCOUNTADMIN ou d’un rôle doté du privilège CREATE INTEGRATION sur le compte.
Assurez-vous que l’ARN du rôle IAM est correctement formaté et existe dans votre compte AWS.
Confirmez que l’emplacement du compartiment S3 utilise le bon format :
s3://bucket-name/prefix/Notez qu’un seul emplacement de stockage est autorisé pour les intégrations
POSTGRES_EXTERNAL_STORAGE.
Astuce
Les erreurs d’intégration de stockage sont consignées dans les journaux du serveur Postgres à l’aide d’un préfixe Storage integration:. Par exemple :
Storage integration: IAM role must have Maximum Session Duration set to 12 hours
Pour plus d’informations sur l’accès aux journaux Postgres, voir Journalisation Snowflake Postgres.
Erreurs de connexion¶
Si pg_lake ne peut pas accéder à S3 après avoir associé l’intégration de stockage :
Vérifiez que l’intégration de stockage est correctement associée à votre instance Postgres en interrogeant les propriétés de l’instance.
Vérifiez que la politique de confiance du rôle IAM a été mise à jour avec l’ARN utilisateur IAM et l’ID externe appropriés de la sortie DESCRIBE STORAGE INTEGRATION.
Assurez-vous que la région du compartiment S3 correspond à la région de votre compte Snowflake.
Vérifiez que le point de terminaison STS de votre région est actif dans les paramètres du compte AWS IAM.
Erreurs d’autorisation refusée¶
Si vous recevez des erreurs de refus d’autorisation lors de l’accès à S3 :
Confirmez que la politique IAM associée au rôle inclut toutes les autorisations requises :
s3:PutObject,s3:GetObject,s3:GetObjectVersion,s3:DeleteObject,s3:DeleteObjectVersion,s3:ListBucketets3:GetBucketLocation.Vérifiez que la politique de confiance du rôle IAM autorise l’utilisateur Snowflake IAM d’assumer le rôle.
Vérifiez que la politique de compartiment S3 (le cas échéant) n’interdit pas l’accès au rôle IAM.
Assurez-vous que les chemins S3 auxquels vous accédez correspondent au préfixe spécifié dans
STORAGE_ALLOWED_LOCATIONS.
Erreurs en matière de politique de confiance¶
Si vous rencontrez des erreurs liées à la prise en charge du rôle IAM :
Vérifiez que l’ID externe dans la politique de confiance correspond exactement à l’
STORAGE_AWS_EXTERNAL_IDde l’intégration de stockage.Confirmez que l’ARN principal dans la politique de confiance correspond à l’
STORAGE_AWS_IAM_USER_ARNde l’intégration de stockage.Vérifiez que la durée maximale de la session pour le rôle IAM est défini sur 12 heures.