Configuration d’une intégration de catalogue pour les catalogues Apache Iceberg™ REST¶
Une intégration de catalogue Apache Iceberg™ REST <label-tables_iceberg_catalog_integration_def> permet à Snowflake d’accéder aux Tables Apache Iceberg™ gérées dans un catalogue distant conforme à la spécification Apache Iceberg REST OpenAPI open source.
Connexion aux catalogues REST¶
Vous pouvez vous connecter à une API REST Iceberg qui utilise un point de terminaison public ou un réseau privé.
Point de terminaison public¶
Pour se connecter à une API REST Iceberg à l’aide d’un point de terminaison public, vous pouvez créer une intégration de catalogue qui utilise les méthodes d’authentification suivantes :
OAuth
Jeton porteur ou jeton d’accès personnel (PAT)
SigV4
Réseau privé¶
Pour se connecter à une API REST Iceberg qui est hébergée sur un réseau privé, vous pouvez créer une intégration de catalogue qui utilise l’authentification Signature Version 4 (SigV4).
Créer une intégration de catalogue¶
Créez une intégration de catalogue pour la méthode d’authentification choisie à l’aide de la commande CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Les valeurs que vous spécifiez pour les arguments REST_CONFIG et REST_AUTHENTICATION diffèrent selon la méthode d’authentification que vous choisissez.
OAuth¶
L’exemple suivant crée une intégration REST de catalogue qui utilise OAuth pour se connecter à Tabular.
CREATE OR REPLACE CATALOG INTEGRATION tabular_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://api.tabular.io/ws'
WAREHOUSE = '<tabular_warehouse_name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://api.tabular.io/ws/v1/oauth/tokens'
OAUTH_CLIENT_ID = '<oauth_client_id>'
OAUTH_CLIENT_SECRET = '<oauth_secret>'
OAUTH_ALLOWED_SCOPES = ('catalog')
)
ENABLED = TRUE;
L’exemple suivant crée une intégration de catalogue REST qui utilise OAuth pour se connecter au catalogue Databricks Unity.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_oauth
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://my-api/oidc/v1/token'
OAUTH_CLIENT_ID = '123AbC ...'
OAUTH_CLIENT_SECRET = '1365910ab ...'
OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
)
ENABLED = TRUE;
Jeton porteur ou PAT¶
L’exemple suivant crée une intégration de catalogue REST qui utilise un jeton PAT pour se connecter au catalogue Databricks Unity.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_pat
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = 'eyAbCD...eyDeF...'
)
ENABLED = TRUE;
SigV4¶
Le diagramme suivant montre comment Snowflake interagit avec votre serveur de catalogue REST à l’aide d’API Gateway et de l’authentification SigV4.
Suivez les étapes de cette section pour utiliser une API REST dans Amazon API Gateway et l’authentification Signature Version 4 (SigV4) pour connecter Snowflake en toute sécurité à un catalogue REST Iceberg qui n’est pas accessible au public.
Création d’une API REST dans Amazon API Gateway¶
Pour connecter Snowflake à votre catalogue REST Iceberg, vous avez besoin d’une ressource API REST dans Amazon API Gateway.
Si vous n’avez pas encore de ressource API REST dans Amazon API Gateway pour votre catalogue Iceberg, vous pouvez créer une simple API REST en important un fichier de définition OpenAPI du catalogue Iceberg ou en ajoutant manuellement des points de terminaison.
Dans la console de gestion AWS, recherchez et sélectionnez API Gateway.
Sélectionnez Create API.
Sélectionnez Build sous REST API. Pour créer une API REST privée, sélectionnez Build sous REST API Private.
Sélectionnez l’une des options suivantes :
Pour créer une API en ajoutant manuellement des points de terminaison, sélectionnez New API.
Pour créer une API en utilisant un fichier de définition OpenAPI, sélectionnez Import API, puis téléchargez le fichier ou collez la définition dans l’éditeur de code.
Saisissez un API name et, si vous le souhaitez, une Description.
Note
Vous n’avez pas besoin de saisir un ID de point de terminaison VPC lorsque vous créez une API REST privée.
Sélectionnez Create API.
Pour plus d’informations sur la création et le développement d’une API REST dans API Gateway, consultez le Guide du développeur d’Amazon API Gateway.
Créer une politique IAM et la joindre à un rôle¶
Dans cette étape, vous créez un rôle AWS IAM que Snowflake peut utiliser pour se connecter à API Gateway. Vous joignez une politique au rôle qui accorde l’autorisation d’appeler votre API.
Dans la console de gestion AWS, recherchez et sélectionnez IAM.
Dans le volet de navigation de gauche, sélectionnez Policies.
Sélectionnez Create policy, puis JSON pour l”Policy editor.
Remplacez la politique vide par une politique ayant l’autorisation d’appeler vos méthodes API. Par exemple, la politique générale suivante autorise l’action d’appel pour toutes les ressources d’API Gateway dans un compte AWS.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:*:<aws_account_id>:*" } ] }
Important
En tant que bonne pratique, utilisez une politique qui accorde les privilèges minimaux requis pour votre cas d’utilisation. Pour des conseils supplémentaires et des exemples de politiques, voir Contrôle de l’accès à une API avec les autorisations IAM.
Sélectionnez Next.
Saisissez un Policy name (par exemple,
snowflake_access
) et une Description facultative.Sélectionnez Create policy.
Dans le volet de navigation gauche du tableau de bord IAM, sélectionnez Roles.
Sélectionnez un rôle auquel joindre la politique. Lorsque vous créez une intégration de catalogue, vous spécifiez ce rôle. Si vous n’avez pas de rôle, créez un nouveau rôle.
Sur la page Summary du rôle, dans l’onglet Permissions, sélectionnez Add permissions » Attach policies.
Recherchez et cochez la case à côté de la politique que vous avez créée pour API Gateway, puis sélectionnez Add permissions.
Sur la page Summary du rôle, copiez le rôle ARN. Vous spécifiez l’ARN lorsque vous créez une intégration de catalogue.
Joindre une politique des ressources API Gateway (APIs privées uniquement)¶
Si votre API REST est privée, vous devez joindre une ressource Amazon API Gateway à votre API. La politique de ressources permet à Snowflake d’appeler votre API depuis le Cloud privé virtuel d’Amazon (VPC) dans lequel votre compte Snowflake se trouve.
Dans Snowflake, appelez la fonction SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO pour récupérer l’ID du VPC dans lequel votre compte Snowflake se trouve. Copiez l’ID du VPC à partir de la sortie de fonction.
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
Sortie :
{"snowflake-vpc-id":["vpc-c1c234a5"]}
Suivez les instructions indiquées dans Joindre des politiques de ressources API Gateway pour joindre une politique de ressources à votre API REST.
Collez et modifiez l’exemple de politique suivant.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>", "Condition": { "StringNotEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/<my_api_permissions_role_name>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>/*/*/*", "Condition": { "StringEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } } ] }
La première instruction de la politique refuse toutes les requêtes qui ne proviennent pas du VPC Snowflake. La deuxième instruction autorise l’action d’appel (pour toutes les méthodes) des requêtes provenant du VPC Snowflake qui utilisent le principal de séance.
Pour en savoir plus sur les politiques de ressources d’APIGateway, voir :
Récupération de l’URL du point de terminaison¶
Récupérez le point de terminaison de votre API REST URL (ou appelez l’URL). Votre API doit être déployée vers une zone de préparation avant de pouvoir récupérer l’URL du point de terminaison.
Dans la console Amazon API Gateway, sélectionnez votre API REST.
Dans le volet de navigation de gauche, sélectionnez Stages.
Sous Stage details, copiez l”Invoke URL.
Vous spécifiez l’URL du point de terminaison lorsque vous créez une intégration de catalogue.
Création d’une intégration de catalogue pour SigV4¶
Après avoir obtenu une API REST dans Amazon API Gateway et exécuté les étapes initiales pour contrôler l’accès à votre API à l’aide des autorisations IAM, vous pouvez créer une intégration de catalogue dans Snowflake.
Pour afficher la syntaxe de la commande et les descriptions des paramètres, voir CREATE CATALOG INTEGRATION (Apache Iceberg™ REST).
API REST publique
Pour créer une intégration de catalogue pour une API REST publique, spécifiez ICEBERG_REST
comme CATALOG_SOURCE
et utilisez l’authentification SIGV4
.
Incluez des détails comme l’URL du point de terminaison de l’API l’ARN du rôle IAM.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
API REST privée
Pour créer une intégration de catalogue pour une API REST privée, vous devez définir le paramètre CATALOG_API_TYPE
sur AWS_PRIVATE_API_GATEWAY
.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
CATALOG_API_TYPE = AWS_PRIVATE_API_GATEWAY
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
Configuration de la relation de confiance dans IAM¶
Vous devez ensuite 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, et configurer la relation de confiance pour votre rôle IAM.
Dans Snowflake, appelez la commande DESCRIBE CATALOG INTEGRATION :
DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
Notez les valeurs suivantes :
Valeur
Description
API_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.API_AWS_EXTERNAL_ID
L’ID externe nécessaire pour établir une relation de confiance.
Dans la console de gestion AWS, 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 intégration de catalogue.
Sélectionnez l’onglet Trust relationships.
Sélectionnez Edit trust policy.
Modifiez le document de politique en y ajoutant les valeurs que vous avez enregistrées.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<api_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<api_aws_external_id>" } } } ] }
Sélectionnez Update policy pour enregistrer vos modifications.