Configurer une intégration de catalogue pour des tables Iceberg

Cette rubrique fournit des informations qui vous aideront à créer et à configurer une intégration de catalogue pour des tables Iceberg. Pour créer une table Iceberg qui utilise un catalogue Iceberg externe, ou qui n’utilise aucun catalogue, vous devez spécifier une intégration de catalogue.

Note

Une intégration de catalogue n’est nécessaire que lorsque vous souhaitez créer une table Iceberg en lecture seule à l’aide d’un catalogue Iceberg externe. Vous n’avez pas besoin d’une intégration de catalogue pour créer une table Iceberg qui utilise Snowflake comme catalogue Iceberg. Pour utiliser Snowflake comme catalogue, définissez le paramètre CATALOG sur SNOWFLAKE dans la commande CREATE ICEBERG TABLE.

Créer une intégration de catalogue

Vous pouvez créer une intégration de catalogue pour des tables Iceberg via la commande CREATE CATALOG INTEGRATION.

Exemple : Créer une intégration de catalogue pour des fichiers Iceberg dans le stockage d’objets

L’exemple d’instruction suivant crée une intégration de catalogue pour des métadonnées Iceberg qui se trouvent dans un emplacement de stockage Cloud externe en définissant OBJECT_STORE comme valeur CATALOG_SOURCE.

CREATE OR REPLACE CATALOG INTEGRATION icebergCatalogInt
  CATALOG_SOURCE=OBJECT_STORE
  TABLE_FORMAT=ICEBERG
  ENABLED=TRUE;
Copy

Configurer une intégration de catalogue pour AWS Glue

Cette section explique comment créer une intégration de catalogue pour AWS Glue et accorder à Snowflake un accès restreint au catalogue de données Amazon Glue.

Note

Pour suivre les instructions de cette section, vous devez disposer d’autorisations dans Amazon Web Services (AWS) permettant de créer et de 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 : Configurer des autorisations d’accès pour le catalogue de données AWS Glue

Le mieux est de créer une nouvelle politique IAM pour que Snowflake puisse accéder au catalogue de données Glue. Vous pouvez ensuite associer la politique à un rôle IAM et utiliser les identifiants de sécurité générés par AWS pour que le rôle puisse accéder aux fichiers du catalogue. Pour des instructions, voir Création de politiques IAM et Modification d’une politique d’autorisations de rôle dans le Guide de l’utilisateur IAM (Identity and Access Management - Gestion de l’identité et de l’accès) AWS.

Au minimum, Snowflake a besoin les autorisations suivantes sur le catalogue de données Glue pour pouvoir accéder aux informations sur les tables.

  • glue:GetTable

  • glue:GetTables

L’exemple de politique suivant (au format JSON) fournit les autorisations nécessaires pour pouvoir accéder à toutes les tables d’une base de données spécifique.

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
            "glue:GetTable",
            "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

Note

  • Vous pouvez modifier l’élément Resource de cette politique pour restreindre davantage les ressources autorisées (par exemple, le catalogue, les bases de données ou les tables). Pour plus d’informations, voir Types de ressources définis par AWS Glue

  • Si vous utilisez le chiffrement pour AWS Glue, vous devez modifier la politique pour ajouter des autorisations Key Management Service AWS (AWSKMS). Pour plus d’informations, voir Configuration du chiffrement dans AWS Glue.

Étape 2 : Créer une intégration de catalogue dans Snowflake

Créez une intégration de catalogue pour le catalogue de données Glue via la commande CREATE CATALOG INTEGRATION.

L’exemple suivant crée une intégration de catalogue qui utilise une source de catalogue AWS Glue. L’exemple indique une valeur pour le paramètre GLUE_REGION facultatif.

CREATE CATALOG INTEGRATION glueCatalogInt
   CATALOG_SOURCE=GLUE
   CATALOG_NAMESPACE='my.catalogdb'
   TABLE_FORMAT=ICEBERG
   GLUE_AWS_ROLE_ARN='arn:aws:iam::123456789012:role/myGlueRole'
   GLUE_CATALOG_ID='123456789012'
   GLUE_REGION='us-east-2'
   ENABLED=TRUE;
Copy

Étape 3 : Récupérer l’utilisateur IAM AWS et l’ID externe de votre compte Snowflake

Pour récupérer les informations sur l’utilisateur IAM AWS et l’ID externe qui ont été créés pour votre compte Snowflake lorsque vous avez créé l’intégration de catalogue, exécutez la commande DESCRIBE CATALOG INTEGRATION. Vous fournissez ces informations à AWS dans la section suivante afin d’établir une relation de confiance.

L’exemple de commande suivant décrit l’intégration de catalogue créée à l’étape précédente :

DESCRIBE CATALOG INTEGRATION glueCatalogInt;
Copy

Notez les valeurs suivantes :

Valeur

Description

GLUE_AWS_IAM_USER_ARN

Utilisateur IAM AWS 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. Toutes les intégrations de catalogue Glue de votre compte utilisent cet utilisateur IAM.

GLUE_AWS_EXTERNAL_ID

L’ID externe nécessaire pour établir une relation de confiance.

Vous fournirez ces valeurs dans la section suivante.

Étape 4 : Accorder à l’utilisateur IAM des autorisations lui permettant d’accéder au catalogue de données AWS Glue

Suivez les instructions à la section Modification d’une politique de confiance pour ajouter les valeurs que vous avez enregistrées dans Étape 3 : Récupérer l’utilisateur IAM AWS et l’ID externe de votre compte Snowflake à la politique de confiance de votre rôle IAM.

L’exemple de politique de confiance suivant montre où spécifier les valeurs GLUE_AWS_IAM_USER_ARN et GLUE_AWS_EXTERNAL_ID :

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

Où :

  • glue_iam_user_arn est la valeur GLUE_IAM_USER_ARN que vous avez enregistrée.

  • glue_aws_external_id est la valeur GLUE_AWS_EXTERNAL_ID que vous avez enregistrée.

Note

  • Pour des raisons de sécurité, si vous créez une nouvelle intégration de catalogue (ou si vous recréez une intégration de catalogue existante via la syntaxe CREATE OR REPLACE CATALOG INTEGRATION), la nouvelle intégration de catalogue a un ID externe différent et ne peut pas résoudre la relation de confiance à moins que vous ne modifiiez la politique de confiance en y ajoutant le nouvel ID externe.

  • Pour vérifier que vos autorisations sont configurées correctement, créez une table Iceberg via cette intégration de catalogue. Snowflake ne vérifie pas que vos autorisations sont correctement définies tant que vous n’avez pas créé une table Iceberg qui référence cette intégration de catalogue.