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 dans tous les emplacements qui contiennent vos fichiers de table dans votre compartiment.
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 des identifiants de connexion distribués, utilisez la commande CREATE CATALOG INTEGRATION (Apache Iceberg™ REST) avec le paramètre ACCESS_DELEGATION_MODE
défini 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
Pour plus d’informations sur la création d’une intégration de catalogue REST, voir Configuration d’une intégration de catalogue pour les catalogues Apache Iceberg™ REST ou Configuration d’une intégration de catalogue pour Snowflake Open Catalog.
Exemple : Snowflake Open Catalog¶
L’exemple suivant crée une intégration de catalogue pour Snowflake Open Catalog à l’aide d’identifiants de connexion distribués :
CREATE OR REPLACE CATALOG INTEGRATION open_catalog_int_vended_credentials
CATALOG_SOURCE = POLARIS
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my-namespace'
REST_CONFIG = (
CATALOG_URI = 'https://myrestapi.com/polaris/api/catalog'
CATALOG_NAME = 'my_catalog_name'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_CLIENT_ID = 'my_client_id'
OAUTH_CLIENT_SECRET = 'my_client_secret'
OAUTH_ALLOWED_SCOPES = ('PRINCIPAL_ROLE:ALL')
)
ENABLED = TRUE;
Exemple : SigV4 et Amazon API Gateway¶
Cet exemple crée une intégration de catalogue qui utilise l’authentification SigV4 avec des identifiants de connexion distribués :
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'
ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
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 AWS Glue Iceberg REST.
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 devez spécifier une intégration de catalogue configurée avec ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
et omettre 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.