Configurer un lakehouse multicloud pour Snowflake

Ce document explique comment configurer un lakehouse multicloud pour interroger les données d'un catalogue Snowflake (Snowflake Horizon) directement dansGoogle Cloud. Cette fonctionnalité unifie vos analyses de données en intégrant vos sources de données externes à votre environnement Google Cloudexistant.

Vous pourrez ensuite utiliser Lakehouse pour gérer l'accès à vos données fédérées.

Avant de commencer

  1. Consultez la présentation de Lakehouse pour comprendre comment Lakehouse gère l'accès aux données.
  2. Consultez À propos du lakehouse multicloud pour comprendre son fonctionnement.
  3. Consultez les catalogues compatibles pour vérifier les exigences concernant les emplacements externes et les configurations compatibles.
  4. Découvrez comment utiliser les secrets régionaux Secret Manager. Ce rôle est requis pour configurer un Lakehouse multicloud avec Snowflake à l'aide de l'authentification basée sur les secrets.
  5. Si vous utilisez l'authentification basée sur un secret, générez un jeton d'accès personnel (PAT) dans votre environnement Snowflake Horizon qui dispose d'un accès en lecture au catalogue cible. Ce processus n'entre pas dans le cadre de cette documentation.
  6. Si vous utilisez la fédération d'identité de charge de travail, assurez-vous d'avoir accès à l'interface utilisateur du compte Snowflake avec les droits ACCOUNTADMIN pour provisionner les utilisateurs de service.
  7. Facultatif : Si vous prévoyez de router les requêtes via une interconnexion privée entre votre VPC Google Cloud et celui de votre fournisseur de cloud à distance (AWS, par exemple), assurez-vous d'avoir un compte actif auprès de votre fournisseur à distance, provisionnez une interconnexion cross-cloud dédiée ou une interconnexion cross-cloud partenaire, établissez des sessions BGP avec votre Cloud Router et vérifiez que vous disposez des autorisations IAM (Identity and Access Management) requises dans les deux environnements cloud.
  8. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the BigLake, Secret Manager APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

Rôles requis

Pour obtenir les autorisations nécessaires pour configurer un lakehouse multicloud, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

  • Gérer les catalogues Lakehouse : Administrateur BigLake (roles/biglake.admin)
  • Gérer les secrets : Administrateur Secret Manager (roles/secretmanager.admin)
  • Router le trafic via une interconnexion privée : Administrateur de réseau Compute (roles/compute.networkAdmin), Lecteur de l'annuaire des services (roles/servicedirectory.viewer) et Service autorisé PSC de l'annuaire des services (roles/servicedirectory.pscAuthorizedService)

Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Détails du catalogue acceptés

Ce guide explique comment configurer un Lakehouse multicloud avec un catalogue Snowflake (Snowflake Horizon) sur Amazon Web Services (AWS) et Google Cloud. Pour en savoir plus sur les exigences concernant les emplacements externes et les configurations compatibles, consultez Catalogues compatibles.

Limites et points à noter

Cette section liste les limites et les points à prendre en compte pour l'utilisation du Lakehouse multicloud.

  • Fournisseurs de cloud compatibles : l'utilisation d'une interconnexion privée avec votre Lakehouse cross-cloud est compatible avec les fournisseurs de cloud à distance suivants : Amazon Web Services (AWS). Vous pouvez utiliser une interconnexion Cross-Cloud dédiée ou une interconnexion Cross-Cloud partenaire.
  • Routage réseau : si une interconnexion privée (telle que Dedicated CCI ou Partner CCI) n'est pas configurée, les requêtes sont acheminées sur l'Internet public. Cela peut entraîner des frais de sortie plus élevés de la part de votre fournisseur de cloud à distance et des performances moins prévisibles.
  • Fraîcheur des données : l'indicateur --refresh-interval du catalogue fédéré détermine la fréquence de synchronisation des métadonnées. Un intervalle plus court fournit des données plus récentes, mais peut entraîner des coûts d'API supplémentaires de la part du fournisseur de catalogue à distance.
  • Rapports de métriques Iceberg : Les rapports de métriques Iceberg ne sont pas disponibles pour les catalogues fédérés. Définissez la propriété rest-metrics-reporting-enabled sur false dans votre client Iceberg lorsque vous accédez à un catalogue fédéré.

Workflow général

Pour configurer et utiliser Lakehouse multicloud, procédez comme suit :

  • Configurer Cross-Cloud Interconnect (facultatif) : configurez une connexion privée entre votre Google Cloud VPC et votre fournisseur de cloud distant.
  • Configurer la fédération : configurez l'authentification et créez un catalogue fédéré dans Lakehouse.
    • Authentification basée sur un secret (jeton d'accès personnel) : créez un secret dans Secret Manager avec les identifiants de votre catalogue distant. Créez ensuite un catalogue fédéré dans Lakehouse et accordez au compte de service du catalogue l'accès au secret.
    • Fédération d'identité de charge de travail (WIF) : créez un catalogue fédéré dans Lakehouse en spécifiant le rôle Snowflake requis. Associez ensuite l'ID du compte de service du catalogue à un utilisateur de service dans Snowflake. L'utilisateur du service Snowflake doit disposer des autorisations d'utilisation sur le catalogue Snowflake distant.
  • Vérifiez la connexion : vérifiez que Lakehouse peut se connecter à votre catalogue distant.
  • Interroger les données : exécutez des requêtes sur vos données fédérées à l'aide de BigQuery ou de Managed Service pour Apache Spark. Pour en savoir plus, consultez Utiliser un lakehouse multicloud.
  • Configurer les autorisations : utilisez IAM pour gérer les utilisateurs autorisés à afficher et à interroger les données fédérées.

Configurer interconnexion cross-cloud (facultatif)

Par défaut, les requêtes envoyées à votre catalogue distant transitent par l'Internet public. Pour améliorer la sécurité et la conformité, fournir des performances prévisibles et réduire les coûts de transfert de données, utilisez une interconnexion privée. Cela établit une connexion réseau privée dédiée entre votre cloud privé virtuel (VPC) Google Cloudet le réseau de votre fournisseur de services cloud distant (AWS, par exemple).

Vous pouvez provisionner et configurer l'une des options d'interconnexion privée suivantes entre votre VPC Google Cloud et celui de votre fournisseur de cloud à distance (AWS, par exemple) :

Établissez des sessions BGP entre votre routeur Cloud Router dans Google Cloud et le VPC de votre fournisseur de services cloud à distance pour assurer l'échange de routes.

Pour activer les requêtes privées, vous devez configurer un chemin d'accès de Lakehouse à votre bucket de stockage à distance (par exemple, un bucket AWS Amazon S3) via votre interconnexion privée. Vous pouvez suivre deux flux d'architecture pour configurer ce routage :

  • Routage de l'équilibreur de charge réseau proxy interne régional : ce flux utilise un équilibreur de charge réseau proxy interne régionalGoogle Cloud pour distribuer les requêtes entre les groupes de points de terminaison réseau (NEG) de connectivité hybride pointant vers plusieurs interfaces réseau Elastic (ENI) AWS. Ce flux est essentiel pour l'équilibrage de charge, l'évolutivité et la haute disponibilité. Il est obligatoire pour Partner CCI et recommandé pour Dedicated CCI pour l'équilibrage de charge, l'évolutivité et la haute disponibilité.
  • Routage direct des points de terminaison : ce flux connecte l'annuaire des services directement à une seule adresse IP de point de terminaison VPC d'interface AWS. Ce flux ne fonctionne que pour les CCI dédiées et n'est pas compatible avec les CCI partenaires.

Sélectionnez le flux de configuration qui correspond aux exigences de votre architecture :

Équilibreur de charge réseau proxy interne régional

Pour configurer un équilibreur de charge réseau proxy interne régional afin de répartir les requêtes sur plusieurs ENI AWS pour la haute disponibilité et l'équilibrage de charge, procédez comme suit :

Configurer la mise en réseau AWS

Commencez par créer un point de terminaison d'interface VPC Amazon S3 (AWS PrivateLink) :

  1. Dans la console AWS VPC, créez un point de terminaison d'interface pour Amazon S3.
  2. Pour le nom du service, spécifiez com.amazonaws.AWS_REGION.s3.
  3. Sélectionnez le VPC et les sous-réseaux connectés via Direct Connect à votre VPC Google Cloud .
  4. Associez des groupes de sécurité au point de terminaison pour contrôler l'accès entrant.
  5. Cela provisionne des interfaces réseau Elastic (ENI) dans chaque sous-réseau sélectionné. Notez les adresses IP privées de ces ENI.

Ensuite, configurez les groupes de sécurité :

  • Assurez-vous que le ou les groupes de sécurité associés aux ENI du point de terminaison Amazon S3 autorisent le trafic TCP entrant sur le port 443 à partir de votre VPC  Google Cloud . Cela doit inclure la plage CIDR de votre sous-réseauGoogle Cloud proxy réservé pour autoriser les vérifications de l'état et le trafic transféré.

Configurer Google Cloud la mise en réseau

Pour simplifier la configuration, exécutez les commandes suivantes pour configurer l'équilibreur de charge interne. Pour les configurations avancées ou pour en savoir plus, consultez Configurer un équilibreur de charge réseau proxy interne régional pour les points de terminaison hybrides.

gcloud compute networks subnets create PROXY_SUBNET_NAME \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE \
    --region=REGION \
    --network=VPC_NETWORK \
    --range=PROXY_SUBNET_RANGE

Remplacez les éléments suivants :

  • PROXY_SUBNET_NAME : nom du sous-réseau proxy réservé.
  • PROXY_SUBNET_RANGE : plage CIDR inutilisée dans votre réseau VPC (par exemple, 10.129.0.0/23).
  1. Créez une vérification d'état régionale :

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
        --region=REGION \
        --port=443

    Remplacez les éléments suivants :

    • HEALTH_CHECK_NAME : nom de la vérification de l'état.
    • REGION : région Google Cloud (par exemple, us-east4).
  2. Créez des groupes de points de terminaison du réseau (NEG) de connectivité hybride et ajoutez des points de terminaison :

    Créez un NEG hybride (NON_GCP_PRIVATE_IP_PORT) pour chaque zone :

    gcloud compute network-endpoint-groups create NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ZONE \
        --network=VPC_NETWORK

    Ajoutez l'adresse IP privée de votre ENI AWS au NEG hybride correspondant :

    gcloud compute network-endpoint-groups update NEG_NAME \
        --zone=ZONE \
        --add-endpoint="ip=AWS_S3_IP,port=443"

    Remplacez les éléments suivants :

    • NEG_NAME : nom du NEG hybride.
    • ZONE : zone Google Cloud (par exemple, us-east4-a). Cette zone doit se trouver dans la région de votre rattachement de VLAN interconnexion cross-cloud.
    • VPC_NETWORK : nom de votre réseau VPC.
    • AWS_S3_IP : adresse IP privée du point de terminaison VPC AWS Amazon S3 (ENI) dans cette zone.

    Répétez ces commandes pour créer des NEG et ajouter des points de terminaison pour d'autres zones si vos ENI AWS sont réparties sur plusieurs zones.

  3. Créez et configurez le service de backend :

    Créez un service de backend régional avec un équilibrage de charge géré interne :

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --protocol=TCP \
        --region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --health-checks-region=REGION

    Ajoutez vos NEG hybrides au service de backend :

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --region=REGION \
        --network-endpoint-group=NEG_NAME \
        --network-endpoint-group-zone=ZONE \
        --balancing-mode=CONNECTION \
        --max-connections=MAX_CONNECTIONS

    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom du service de backend.
    • NEG_NAME : nom du NEG hybride que vous avez créé à l'étape précédente.
    • ZONE : zone Google Cloud (par exemple, us-east4-a).
    • MAX_CONNECTIONS : nombre maximal de connexions simultanées que le backend doit gérer (par exemple, 100).

    Répétez la commande add-backend pour chaque NEG hybride que vous avez créé.

  4. Configurez l'interface de l'équilibreur de charge :

    Créez un proxy TCP cible :

    gcloud compute target-tcp-proxies create TARGET_PROXY_NAME \
        --backend-service=BACKEND_SERVICE_NAME \
        --region=REGION

    Créez une règle de transfert pour acheminer le trafic vers le proxy cible :

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=VPC_NETWORK \
        --subnet=VPC_SUBNET \
        --ports=443 \
        --region=REGION \
        --target-tcp-proxy=TARGET_PROXY_NAME \
        --target-tcp-proxy-region=REGION \
        --allow-global-access

    Remplacez les éléments suivants :

    • TARGET_PROXY_NAME : nom du proxy cible.
    • FORWARDING_RULE_NAME : nom de la règle de transfert.
    • VPC_SUBNET : nom de votre sous-réseau VPC.

Après avoir créé la règle de transfert pour l'équilibreur de charge, notez l'adresse IP interne qui lui est attribuée. C'est votre ILB_IP_ADDRESS.

Configurer l'annuaire des services

Enregistrez l'adresse IP de l'ILB dans Annuaire des services pour que Lakehouse puisse la découvrir.

  1. Créez un espace de noms pour votre cloud à distance :

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Remplacez les éléments suivants :

    • NAMESPACE : identifiant unique de votre espace de noms.
    • PROJECT_ID : ID de votre projet Google Cloud .
    • REGION : région Google Cloud . Exemple : us-east4. Cette région doit être identique à celle du catalogue fédéré.
  2. Créez un service dans l'espace de noms de l'Annuaire des services :

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Remplacez les éléments suivants :

    • SERVICE_NAME : identifiant unique de votre service.
  3. Créez un point de terminaison pour l'ILB dans le service :

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --project=PROJECT_ID \
        --namespace=NAMESPACE \
        --service=SERVICE_NAME \
        --location=REGION \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK \
        --address=ILB_IP_ADDRESS \
        --port=443

    Remplacez les éléments suivants :

    • ENDPOINT_NAME : identifiant unique de votre point de terminaison.
    • PROJECT_NUMBER : numéro de votre projet Google Cloud. Utilisez le numéro de votre projet dans l'indicateur --network.
    • ILB_IP_ADDRESS : adresse IP interne de votre règle de transfert ILB.

Point de terminaison direct

Pour configurer l'Annuaire des services afin qu'il achemine le trafic directement vers une seule adresse IP de point de terminaison VPC d'interface AWS, procédez comme suit :

  1. Créez un point de terminaison VPC d'interface pour Amazon S3 dans votre VPC AWS. Notez l'adresse IP et le port de ce point de terminaison.
  2. Créez un espace de noms pour votre cloud à distance :

    gcloud service-directory namespaces create NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Remplacez les éléments suivants :

    • NAMESPACE : identifiant unique de votre espace de noms.
    • PROJECT_ID : ID de votre projet Google Cloud .
    • REGION : région Google Cloud . Exemple : us-east4. Cette région doit être identique à celle du catalogue fédéré.
  3. Créez un service dans l'espace de noms de l'Annuaire des services :

    gcloud service-directory services create SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION

    Remplacez les éléments suivants :

    • SERVICE_NAME : identifiant unique de votre service.
  4. Créez un point de terminaison dans le service contenant les informations de routage pour votre point de terminaison VPC d'interface Amazon S3 :

    gcloud service-directory endpoints create ENDPOINT_NAME \
        --service=SERVICE_NAME \
        --namespace=NAMESPACE \
        --project=PROJECT_ID \
        --location=REGION \
        --address=S3_VPCE_IP_ADDRESS \
        --port=S3_VPCE_PORT \
        --network=projects/PROJECT_NUMBER/global/networks/VPC_NETWORK

    Remplacez les éléments suivants :

    • ENDPOINT_NAME : identifiant unique de votre point de terminaison.
    • S3_VPCE_IP_ADDRESS : adresse IP de votre point de terminaison VPC d'interface Amazon S3. Exemple :10.0.1.45
    • S3_VPCE_PORT : numéro de port de votre point de terminaison VPC d'interface Amazon S3. Exemple :443
    • PROJECT_NUMBER : numéro de votre projet Google Cloud. Utilisez le numéro de votre projet dans l'indicateur --network.
    • VPC_NETWORK : nom du réseau VPC Google Cloud associé à votre interconnexion privée.

Configurer la fédération

Pour interroger vos données, vous devez configurer un catalogue fédéré Lakehouse qui se connecte à votre catalogue Snowflake distant. Sélectionnez votre méthode d'authentification :

Basée sur un secret (jeton d'accès personnel)

Configurer l'authentification

La fédération nécessite des identifiants pour accéder au catalogue Snowflake distant. Pour Snowflake Horizon, vous devez utiliser un jeton d'accès personnel (PAT, Personal Access Token), qui est un jeton à longue durée de vie généré par Snowflake, ainsi que le rôle Snowflake spécifique requis pour la session.

Créez un secret dans Secret Manager régional pour stocker les identifiants :

  1. Créez un fichier JSON nommé credentials.json avec votre charge utile :

      {
        "client_secret": "SNOWFLAKE_PAT_TOKEN",
        "scope": "session:role:SNOWFLAKE_ROLE"
      }
      

    Remplacez les éléments suivants :

    • SNOWFLAKE_PAT_TOKEN : votre jeton d'accès personnel (PAT) Snowflake.
    • SNOWFLAKE_ROLE : rôle Snowflake spécifique requis pour la session. Exemple :ICEBERG_VIEW
  2. Configurez le point de terminaison régional pour Secret Manager :

    Par défaut, Secret Manager utilise un point de terminaison mondial. Toutefois, le Lakehouse multicloud exige que vos secrets soient stockés dans la même région que votre catalogue Lakehouse. Pour interagir avec des secrets régionaux à l'aide de la CLI gcloud, vous devez remplacer le point de terminaison d'API par défaut pour votre session ou profil actuel. Pour éviter les problèmes de connectivité, votre secret et votre catalogue doivent être créés dans la même région.

      gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
      

    Remplacez les éléments suivants :

    • REGION : région Google Cloud où votre secret Secret Manager est stocké. Par exemple, us-east4. Pour éviter les problèmes de connectivité, votre secret et votre catalogue doivent être créés dans la même région.
  3. Importez la charge utile dans Secret Manager :

      gcloud secrets create SNOWFLAKE_SECRET_NAME \
        --location="REGION" \
        --project="PROJECT_ID" \
        --data-file=credentials.json
      

    Remplacez les éléments suivants :

    • SNOWFLAKE_SECRET_NAME : nom de votre secret Snowflake.
    • PROJECT_ID : ID de votre projet Google Cloud .

    Créer un catalogue fédéré

    Créez le catalogue fédéré à l'aide de la commande gcloud alpha biglake iceberg catalogs create.

    Internet public (sans CCI)

    Si vous ne configurez pas CCI, la connexion transite de manière sécurisée sur l'Internet public.

      gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
          --project="PROJECT_ID" \
          --primary-location="REGION" \
          --catalog-type="federated" \
          --federated-catalog-type="snowflake" \
          --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
          --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
          --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
          --refresh-interval="REFRESH_INTERVAL" \
          --namespace-filters="NAMESPACE_FILTERS"
      

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • REGION : région Lakehouse dans laquelle le catalogue fédéré est créé. Exemple :us-east4 Pour minimiser la latence, sélectionnez la région Google Cloud la plus proche de votre région Snowflake.
    • SNOWFLAKE_SECRET_NAME : nom de votre secret Snowflake.
    • SNOWFLAKE_ACCOUNT_IDENTIFIER : identifiant de votre compte Snowflake (par exemple, my_org-my_account).
    • SNOWFLAKE_WAREHOUSE : nom du catalogue Snowflake avec lequel vous souhaitez effectuer la fédération.
    • REFRESH_INTERVAL : (facultatif) spécifie la fréquence de mise à jour des informations du catalogue. Définissez cette valeur comme une durée, par exemple 330s ou 5m30s. Les intervalles plus courts actualisent les données plus souvent, mais peuvent entraîner des coûts plus élevés en appels d'API. Des intervalles plus longs peuvent coûter moins cher, mais les données interrogées peuvent ne pas refléter votre ensemble de données le plus récent. Si cette valeur est omise ou définie sur 0s, l'actualisation des métadonnées en arrière-plan ne démarrera pas. Il restera désactivé jusqu'à ce que l'intervalle d'actualisation soit défini sur une valeur positive.
    • NAMESPACE_FILTERS : liste facultative d'espaces de noms à fédérer, séparés par une virgule. Exemple :ns1,ns2 Si cette option est omise, tous les espaces de noms seront inclus.

    Appartenant au client (CCI)

    Si vous avez configuré une interconnexion privée (telle que Dedicated CCI ou Partner CCI), fournissez la référence du point de terminaison Annuaire des services afin que Lakehouse route le trafic de manière privée.

      gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
          --project="PROJECT_ID" \
          --primary-location="REGION" \
          --catalog-type="federated" \
          --federated-catalog-type="snowflake" \
          --secret-name="projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME" \
          --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
          --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
          --refresh-interval="REFRESH_INTERVAL" \
          --namespace-filters="NAMESPACE_FILTERS" \
          --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
      

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud .
    • REGION : région Lakehouse dans laquelle le catalogue fédéré est créé. Remarque : Cette région doit être identique à celle de l'espace de noms Annuaire des services et du secret régional.
    • SNOWFLAKE_SECRET_NAME : nom de votre secret Snowflake.
    • SNOWFLAKE_ACCOUNT_IDENTIFIER : identifiant de votre compte Snowflake.
    • SNOWFLAKE_WAREHOUSE : nom du catalogue Snowflake que vous souhaitez fédérer.
    • REFRESH_INTERVAL : (facultatif) spécifie la fréquence de mise à jour des informations du catalogue.
    • NAMESPACE_FILTERS : liste facultative d'espaces de noms à fédérer, séparés par une virgule.
    • NAMESPACE : espace de noms de l'Annuaire des services que vous avez créé lors de la configuration de l'interconnexion privée.
    • SERVICE_NAME : nom du service Annuaire des services que vous avez créé lors de la configuration de l'interconnexion privée.
    • ENDPOINT_NAME : nom du point de terminaison de l'annuaire des services que vous avez créé lors de la configuration de l'interconnexion privée.

    Terminer la configuration de l'authentification

    Lorsque le catalogue est créé, Lakehouse provisionne un compte de service unique pour celui-ci (renvoyé sous la forme biglake-service-account dans la description de la ressource).

    Vous devez accorder à ce compte de service l'autorisation d'accéder au secret que vous avez créé précédemment. Notez que la propagation des règles IAM peut prendre quelques minutes.

    Accordez au compte de service du catalogue l'autorisation d'accéder au secret :

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
    gcloud secrets add-iam-policy-binding SNOWFLAKE_SECRET_NAME \
      --project="PROJECT_ID" \
      --location="REGION" \
      --member="serviceAccount:$(gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
          --project="PROJECT_ID" \
          --location="REGION" \
          --format='value(biglake-service-account)')" \
      --role="roles/secretmanager.secretAccessor"

    Pour vérifier que le compte de service du catalogue fédéré a accès au secret, exécutez la commande suivante :

    gcloud config set api_endpoint_overrides/secretmanager https://secretmanager.REGION.rep.googleapis.com/
    gcloud secrets get-iam-policy SNOWFLAKE_SECRET_NAME \
        --project="PROJECT_ID" \
        --location="REGION"

    Dans le résultat, vérifiez que le rôle roles/secretmanager.secretAccessor est attribué au compte de service biglake-service-account.

Fédération d'identité de charge de travail

La fédération d'identité de charge de travail (WIF) évite l'utilisation de secrets à longue durée de vie en associant un compte de service Lakehouse directement à un utilisateur de service Snowflake.

Créer un catalogue fédéré

Créez le catalogue fédéré à l'aide de la console Google Cloud , de l'API REST Lakehouse ou de la CLIgcloud. Vous devez spécifier le rôle Snowflake à utiliser.

Console

Pour créer un catalogue fédéré à l'aide de l'authentification basée sur des secrets :

  1. Dans la console Google Cloud , accédez à Lakehouse.

    Accéder à Lakehouse

  2. Cliquez sur Créer un catalogue.

  3. Cliquez sur Catalogue fédéré.

    Les détails de la configuration du catalogue s'affichent.

  4. Pour Source du catalogue fédéré, sélectionnez Snowflake Horizon.

  5. Pour Emplacement des données, sélectionnez la région Lakehouse dans laquelle vous souhaitez créer le catalogue fédéré. Exemple :us-east4 Pour minimiser la latence (même sur l'Internet public), procédez comme suit lorsque vous sélectionnez une région :

    • Si votre catalogue Snowflake se trouve sur AWS, sélectionnez la régionGoogle Cloud la plus proche de votre région AWS.
  6. Cliquez sur Continuer.

    Les détails de la connexion s'affichent.

  7. Dans la section Informations sur le catalogue distant, saisissez l'identifiant de votre compte Snowflake dans le champ Identifiant de compte Snowflake. Par exemple : my_org-my_account.

  8. Dans le champ Entrepôt Snowflake, saisissez le nom de votre entrepôt Snowflake.

  9. Dans le champ Secret, saisissez le nom de votre secret. Utilisez le format suivant : projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME.

  10. Facultatif : Dans le champ Nom de l'annuaire des services, saisissez le chemin d'accès à votre point de terminaison ou service Annuaire des services. Cette étape n'est requise que si vous configurez une interconnexion privée (interconnexion cross-cloud).

  11. Cliquez sur Créer.

API REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "x-goog-user-project: PROJECT_ID" \
  -d '{
    "catalog-type": "CATALOG_TYPE_FEDERATED",
    "federated-catalog-options": {
      "snowflake-catalog-info": {
        "account-identifier": "SNOWFLAKE_ACCOUNT_IDENTIFIER",
        "warehouse": "SNOWFLAKE_WAREHOUSE",
        "snowflake-role": "SNOWFLAKE_ROLE"
      },
      "refresh-options": {
        "refresh-schedule": {
          "refresh-interval": "REFRESH_INTERVAL"
        }
      }
    }
}' \
  "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs?iceberg_catalog_id=FEDERATED_CATALOG_NAME&primary_location=REGION"

CLI gcloud

Internet public (sans CCI)

    gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
        --project="PROJECT_ID" \
        --primary-location="REGION" \
        --catalog-type="federated" \
        --federated-catalog-type="snowflake" \
        --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
        --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
        --snowflake-role="SNOWFLAKE_ROLE" \
        --refresh-interval="REFRESH_INTERVAL" \
        --namespace-filters="NAMESPACE_FILTERS"
    

Appartenant au client (CCI)

Si vous avez configuré une interconnexion privée, fournissez la référence du service Annuaire des services afin que Lakehouse achemine le trafic de manière privée.

    gcloud alpha biglake iceberg catalogs create FEDERATED_CATALOG_NAME \
        --project="PROJECT_ID" \
        --primary-location="REGION" \
        --catalog-type="federated" \
        --federated-catalog-type="snowflake" \
        --snowflake-account-identifier="SNOWFLAKE_ACCOUNT_IDENTIFIER" \
        --snowflake-warehouse="SNOWFLAKE_WAREHOUSE" \
        --snowflake-role="SNOWFLAKE_ROLE" \
        --refresh-interval="REFRESH_INTERVAL" \
        --namespace-filters="NAMESPACE_FILTERS" \
        --service-directory-name="projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE/services/SERVICE_NAME/endpoints/ENDPOINT_NAME"
    

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • SNOWFLAKE_ACCOUNT_IDENTIFIER : identifiant de votre compte Snowflake.
  • SNOWFLAKE_WAREHOUSE : nom du catalogue Snowflake avec lequel vous souhaitez effectuer la fédération.
  • SNOWFLAKE_ROLE : rôle Snowflake spécifique requis pour la session. Exemple :ICEBERG_VIEW
  • FEDERATED_CATALOG_NAME : nom du catalogue fédéré Lakehouse.
  • REGION : région Lakehouse dans laquelle le catalogue fédéré est créé.
  • REFRESH_INTERVAL : (facultatif) spécifie la fréquence de mise à jour des informations du catalogue. Exemple :300s
  • NAMESPACE_FILTERS : liste facultative d'espaces de noms à fédérer, séparés par une virgule. Exemple :ns1,ns2 Si cette option est omise, tous les espaces de noms seront inclus.
  • NAMESPACE : espace de noms de votre service Annuaire des services.
  • SERVICE_NAME : nom de votre service Annuaire des services.
  • ENDPOINT_NAME : nom de votre point de terminaison Annuaire des services.

Après avoir créé le catalogue, vous devez associer l'identité de son compte de service à un utilisateur de service dans Snowflake.

  1. Extrayez l'ID du compte de service Lakehouse (sujet) des détails du catalogue.

    Vous pouvez l'obtenir à partir de la réponse JSON de la commande de création (champ biglake-service-account-id).

    Vous pouvez également exécuter la commande "describe" sur le catalogue pour obtenir la valeur :

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
    --project="PROJECT_ID"

    Recherchez biglake-service-account-id dans le résultat.

  2. Connectez-vous à votre instance de gestion Snowflake et exécutez le script suivant pour établir la relation d'approbation avec l'identité de service Lakehouse :

    USE ROLE ACCOUNTADMIN;
    
    CREATE USER SNOWFLAKE_SERVICE_USER
    TYPE = SERVICE
    WORKLOAD_IDENTITY = (
      TYPE = GCP
      SUBJECT = 'LAKEHOUSE_SERVICE_ACCOUNT_ID'
    )
    DEFAULT_ROLE = SNOWFLAKE_ROLE
    COMMENT = 'Service user for Lakehouse federation over WIF';
    
    -- Also explicitly GRANT permissions to the role
    GRANT ROLE SNOWFLAKE_ROLE TO USER SNOWFLAKE_SERVICE_USER;

    Remplacez les éléments suivants :

    • SNOWFLAKE_SERVICE_USER : nom du nouvel utilisateur de service dans Snowflake.
    • LAKEHOUSE_SERVICE_ACCOUNT_ID : ID du compte de service extrait à l'étape précédente.
    • SNOWFLAKE_ROLE : rôle Snowflake (doit correspondre au rôle spécifié lors de la création du catalogue).

Vérifier la connexion

Vérifiez que le cycle d'actualisation des métadonnées d'arrière-plan du catalogue s'est terminé correctement et que les espaces de noms sont synchronisés.

CLI gcloud

  1. Vérifiez que l'état de l'actualisation indique que l'opération a réussi :

    gcloud alpha biglake iceberg catalogs describe FEDERATED_CATALOG_NAME \
      --project="PROJECT_ID" \
      --location="REGION"
  2. Vérifiez que les schémas de base de données à distance apparaissent comme des espaces de noms synchronisés :

    gcloud alpha biglake iceberg namespaces list \
      --catalog="FEDERATED_CATALOG_NAME" \
      --project="PROJECT_ID" \
      --location="REGION"

API REST

  1. Vérifiez l'état de synchronisation de la fédération de catalogues :

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/extensions/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME"
  2. Répertoriez les espaces de noms synchronisés :

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces"
  3. Répertoriez les tables dans un espace de noms synchronisé :

    curl -X GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "x-goog-user-project: PROJECT_ID" \
      "https://biglake.googleapis.com/iceberg/v1/restcatalog/v1/projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME/namespaces/NAMESPACE_NAME/tables"

Étapes suivantes