Utiliser des identifiants de connexion distribués par catalogue pour les tables Apache Iceberg™¶
La prise en charge des identifiants de connexion distribués par catalogue pour les tables Iceberg vous permet de faire accéder Snowflake aux données et métadonnées de vos tables dans un stockage Cloud sans utiliser de volume externe.
Au lieu de cela, vous configurez et déléguez le contrôle d’accès auprès de votre catalogue Iceberg REST tiers (tel que Snowflake Open Catalog), puis vous créez une intégration de catalogue configurée pour les identifiants distribués dans Snowflake. Pour toute table Iceberg associée à l’intégration du catalogue, Snowflake utilise les identifiants distribués par votre fournisseur de catalogue pour se connecter en toute sécurité à votre stockage externe dans le Cloud.
Note
L’utilisation d’identifiants distribués par catalogue est prise en charge pour les tables Iceberg gérées en externe qui utilisent une intégration de catalogue REST et stockent leurs fichiers dans Amazon S3. Pour utiliser cette fonction, votre catalogue externe doit lui aussi prendre en charge la distribution d’identifiants de connexion.
Considérations¶
Tenez compte des éléments suivants lorsque vous utilisez des identifiants de connexion distribués par catalogue pour les tables Iceberg :
Cette fonction n’est prise en charge que pour les tables qui stockent leurs données et métadonnées dans Amazon S3.
Les fichiers de table doivent être stockés dans un seul compartiment ; ils ne peuvent pas être répartis dans plusieurs compartiments.
Le principal de service configuré avec votre catalogue REST doit avoir l’autorisation de lire tous les emplacements qui contiennent vos fichiers de table dans votre compartiment. Si vous utilisez AWS Lake Formation avec AWS Glue, vous devrez peut-être prendre des mesures supplémentaires pour activer cet accès. Pour plus d’informations, consultez (Facultatif) Configurer le contrôle d’accès à Lake Formation.
Snowflake s’attend à ce que votre catalogue fournisse un délai d’expiration pour les identifiants distribués, et recherche une paire clé-valeur dont la clé est
expiration-time
et la valeur est un horodatage spécifiant le délai d’expiration en millisecondes (par exemple,1730234407000
).Si votre catalogue ne fournit pas de délai d’expiration, Snowflake suppose que les identifiants expirent 60 minutes après leur réception.
La création de la table échoue si votre catalogue fournit des identifiants de connexion non valides.
Le partage de données n’est pas pris en charge.
Créer un catalogue d’intégration pour les identifiants de connexion distribués¶
Pour créer une intégration de catalogue pour les identifiants distribués, utilisez la commande CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) avec la propriété ACCESS_DELEGATION_MODE
définie sur VENDED_CREDENTIALS
.
Où :
ACCESS_DELEGATION_MODE = {VENDED_CREDENTIALS | EXTERNAL_VOLUME_CREDENTIALS}
Spécifie le mode de délégation d’accès à utiliser pour accéder aux fichiers de la table Iceberg dans votre stockage Cloud externe.
VENDED_CREDENTIALS
spécifie que Snowflake doit utiliser des identifiants de connexion distribués.EXTERNAL_VOLUME_CREDENTIALS
spécifie que Snowflake doit utiliser un volume externe.
Par défaut :
EXTERNAL_VOLUME_CREDENTIALS
Vous pouvez spécifier la propriété ACCESS_DELEGATION_MODE
dans la liste des propriétés REST_CONFIG
dans n’importe quelle instruction CREATE CATALOG INTEGRATION (Apache Iceberg™ REST). Les rubriques suivantes fournissent des exemples pour les cas d’utilisation les plus courants :
Snowflake Open Catalog. Ces instructions s’appliquent également à Apache Polaris™.
Important
Si vous utilisez AWS Lake Formation pour le contrôle d’accès, vous devez vous assurer que Snowflake peut accéder à votre catalogue AWS Glue ou à votre table Amazon S3. Pour plus d’informations, voir (Facultatif) Configurer le contrôle d’accès à Lake Formation.
Exemple : AWS Glue¶
L’exemple suivant crée une intégration de catalogue pour AWS Glue qui utilise des identifiants de connexion distribués. Pour plus d’informations, voir Configurez une intégration au catalogue pour AWS Glue Iceberg REST.
CREATE CATALOG INTEGRATION glue_rest_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'rest_catalog_integration'
REST_CONFIG = (
CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
CATALOG_API_TYPE = AWS_GLUE
CATALOG_NAME = '123456789012'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my-role'
SIGV4_SIGNING_REGION = 'us-west-2'
)
ENABLED = TRUE;
Exemple : Tables Amazon S3¶
Cet exemple crée une intégration de catalogue pour les tables Amazon S3 avec distribution d’identifiants SigV4 activée en utilisant Lake Formation.
CREATE OR REPLACE CATALOG INTEGRATION my_s3_tables_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
CATALOG_API_TYPE = AWS_GLUE
CATALOG_NAME = '123456789012:S3tablescatalog/my_table_bucket'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
Où :
CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
Spécifie le point de terminaison REST Iceberg AWS Glue.
CATALOG_NAME = 'aws_account_id:s3tablescatalog/s3_table_bucket
Spécifie un compartiment de tables S3 dans votre compte AWS.
Créez une table Iceberg qui utilise des identifiants de connexion distribués¶
Après avoir configuré le contrôle d’accès avec votre catalogue Iceberg REST tiers et créé une intégration de catalogue pour la distribution des identifiants de connexion, vous pouvez créer une table Iceberg.
Lorsque vous créez une table Iceberg qui utilise des identifiants distribués, vous spécifiez une intégration de catalogue configurée avec ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
et vous excluez le paramètre EXTERNAL_VOLUME
de l’instruction CREATE ICEBERG TABLE (catalogue Iceberg REST).
Par exemple :
CREATE ICEBERG TABLE my_iceberg_table
CATALOG = open_catalog_int_vended_credentials
CATALOG_TABLE_NAME = 'my_table'
AUTO_REFRESH = TRUE;
Note
Si vous avez établi un volume externe par défaut au niveau du compte, de la base de données ou du schéma, Snowflake ignore ce volume externe par défaut lors de la création de la table dès lors que vous spécifiez une intégration de catalogue configurée pour utiliser des identifiants distribués.