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
- Consultez la présentation de Lakehouse pour comprendre comment Lakehouse gère l'accès aux données.
- Consultez À propos du lakehouse multicloud pour comprendre son fonctionnement.
- Consultez les catalogues compatibles pour vérifier les exigences concernant les emplacements externes et les configurations compatibles.
- 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.
- 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.
- 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
ACCOUNTADMINpour provisionner les utilisateurs de service. - 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.
- 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.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Secret Manager APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.
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-intervaldu 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-enabledsurfalsedans 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) :
- Cross-Cloud Interconnect dédié : connexion physique dédiée.
- Partner Cross-Cloud Interconnect : connexion via un fournisseur de services agréé.
É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) :
- Dans la console AWS VPC, créez un point de terminaison d'interface pour Amazon S3.
- Pour le nom du service, spécifiez
com.amazonaws.AWS_REGION.s3. - Sélectionnez le VPC et les sous-réseaux connectés via Direct Connect à votre VPC Google Cloud .
- Associez des groupes de sécurité au point de terminaison pour contrôler l'accès entrant.
- 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).
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).
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.
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-backendpour chaque NEG hybride que vous avez créé.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.
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é.
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.
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 :
- 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.
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é.
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.
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.45S3_VPCE_PORT: numéro de port de votre point de terminaison VPC d'interface Amazon S3. Exemple :443PROJECT_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 :
Créez un fichier JSON nommé
credentials.jsonavec 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
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.
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-east4Pour 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 exemple330sou5m30s. 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 sur0s, 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,ns2Si 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-accountdans 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.secretAccessorest attribué au compte de servicebiglake-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 :
Dans la console Google Cloud , accédez à Lakehouse.
Cliquez sur Créer un catalogue.
Cliquez sur Catalogue fédéré.
Les détails de la configuration du catalogue s'affichent.
Pour Source du catalogue fédéré, sélectionnez Snowflake Horizon.
Pour Emplacement des données, sélectionnez la région Lakehouse dans laquelle vous souhaitez créer le catalogue fédéré. Exemple :
us-east4Pour 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.
Cliquez sur Continuer.
Les détails de la connexion s'affichent.
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.Dans le champ Entrepôt Snowflake, saisissez le nom de votre entrepôt Snowflake.
Dans le champ Secret, saisissez le nom de votre secret. Utilisez le format suivant :
projects/PROJECT_ID/locations/REGION/secrets/SNOWFLAKE_SECRET_NAME.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).
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_VIEWFEDERATED_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 :300sNAMESPACE_FILTERS: liste facultative d'espaces de noms à fédérer, séparés par une virgule. Exemple :ns1,ns2Si 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.
Associer une identité dans Snowflake
Après avoir créé le catalogue, vous devez associer l'identité de son compte de service à un utilisateur de service dans Snowflake.
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-iddans le résultat.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
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"
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
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"
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"
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
- Utilisez Lakehouse multicloud et interrogez des tables.
- Résoudre les problèmes liés au lakehouse multicloud