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;
Copy

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;
Copy

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;
Copy

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;
Copy

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.