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

Ce document s’adresse aux personnes suivantes :

  • Développeurs de services Cloud internes.

  • Administrateurs qui gèrent les intégrations avec les services internes et externes.

  • Développeurs d’applications SaaS multi-clients qui souhaitent émettre des jetons OpenID Connecter (OIDC) Federation ID aux charges de travail individuelles qui s’exécutent sur leur plateforme afin que chaque charge de travail cliente puisse s’authentifier auprès de Snowflake en tant qu’utilisateur dédié.

La fédération d’identité de charge de travail est une méthode d’authentification de service à service qui permet aux charges de travail, telles que les applications, les services ou les conteneurs, de s’authentifier auprès de Snowflake à l’aide du système d’identité natif de leur fournisseur de Cloud, tel que les rôles AWS Identity and Access Management (AWS IAM), Microsoft Entra ID et les comptes de service Google Cloud, afin d’obtenir une attestation que Snowflake peut utiliser et valider.

La fédération d’identité de charge de travail supprime la nécessité de gérer et de stocker des identifiants de connexion de longue durée telles que des mots de passe, des clés API, des paires de clés et des jetons d’accès programmatiques pour s’authentifier auprès de Snowflake. La fédération d’identité de la charge de travail réduit également la complexité nécessaire à l’obtention d’identifiants de connexion, lorsque d’autres méthodes, telles que OAuth externe, peuvent nécessiter plus d’efforts. Les applications, les services et les conteneurs qui utilisent les connecteurs Snowflake obtiennent automatiquement des identifiants de connexion à courte durée de vie de la part du fournisseur d’identité de leur plateforme (IdP) par le biais des mécanismes natifs de chaque plateforme.

Avantages

Cette section décrit pourquoi vous pouvez souhaiter utiliser la fédération d’identité de charge de travail pour l’authentification :

  • Rentabilité : L’utilisation d’IdPs existants pour gérer les identités de service réduit le besoin d’outils ou de licences supplémentaires, ce qui peut s’avérer rentable.

  • Interopérabilité : Des services de fournisseurs Cloud populaires, tels que AWS IAM, Entra ID, et Google Cloud, prennent en charge et encouragent la fédération d’identité de charge de travail comme méthode d’authentification pour les charges de travail externes.

  • Audit et supervision pratiques :

Workflow pour la mise en œuvre de la fédération d’identité de charge de travail

Vous pouvez utiliser la fédération d’identité de charge de travail pour authentifier une variété de charges de travail à l’aide de différents IdPs, mais le workflow de base, comme indiqué dans les étapes suivantes, reste le même :

  1. En tant qu’administrateur de charge de travail, configurez votre service pour utiliser un fournisseur d’identité natif afin que le fournisseur puisse établir une attestation de l’identité de votre charge de travail. Cette attestation est souvent, mais pas toujours, un Jeton Web JSON (JWT).

  2. En tant qu’administrateur Snowflake, créez un utilisateur de service Snowflake pour votre charge de travail. Vous définissez les propriétés de cet utilisateur sur des valeurs trouvées dans l’attestation envoyée par le fournisseur. Par exemple, une propriété d’utilisateur peut spécifier le nom d’un rôle IAM ou l’URL émettrice du fournisseur.

  3. En tant que développeur de charge de travail, configurez votre charge de travail pour utiliser un pilote de Snowflake. Les pilotes envoient l’attestation à Snowflake pour vérification.

Pour voir des exemples de bout en bout de ce workflow pour différents types de charges de travail et d’IdPs, consultez Prise en main.

Exigences en matière de contrôle d’accès

Pour configurer la fédération d’identité de charge de travail pour un utilisateur de services Snowflake, c’est-à-dire un utilisateur dont la propriété TYPE est définie sur SERVICE, vous devez accorder à vos rôles actifs l’un des privilèges suivants :

  • OWNERSHIP sur l’utilisateur de services

  • MODIFYPROGRAMMATICAUTHENTICATIONMETHODS sur l’utilisateur de services

Pilotes Snowflake pris en charge

Une charge de travail utilise un pilote Snowflake pour envoyer une attestation lorsqu’elle se connecte à Snowflake. Les pilotes suivants prennent en charge la fédération d’identité de charge de travail :

Pilote

Version minimale

Go

v1.16.0

JDBC

v3.26.0

.NET

v4.8.0

Node.js

v2.2.0

ODBC

v3.11.0

Python

v3.17.0

Renforcement de votre posture de sécurité

Vous pouvez utiliser une politique d’authentification pour contrôler les utilisateurs de services Snowflake qui peuvent s’authentifier avec la fédération d’identité de la charge de travail. Vous pouvez également créer et définir cette politique d’authentification de sorte qu’une charge de travail ne puisse s’authentifier que si elle utilise un fournisseur d’identité spécifié ou un compte au sein de ce fournisseur.

Par exemple, la politique d’authentification suivante permet à une charge de travail de s’authentifier uniquement si elle utilise Microsoft Entra ID en tant que fournisseur et si l’émetteur de l’attestation est une entité de type client Microsoft Entra ID avec un ID client``https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0`` :

CREATE AUTHENTICATION POLICY workload_policy
  WORKLOAD_IDENTITY_POLICY=(
    ALLOWED_PROVIDERS = (AZURE)
    ALLOWED_AZURE_ISSUERS = (
      'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0')
  );
Copy

Pour plus d’informations sur le paramètre:code:WORKLOAD_IDENTITY_POLICY, consultez CREATE AUTHENTICATION POLICY.

Pour plus d’informations sur la configuration d’une politique d’authentification en vue de son application, consultez Définition d’une politique d’authentification sur un compte ou un utilisateur.

Prise en main

S’authentifier auprès de Snowflake en utilisant les rôlesIAM AWS et un pilote Python Snowflake

Configurer AWS

Pour configurer votre service AWS afin qu’il utilise IAM AWS comme fournisseur d’identité, associez-lui un rôle IAM. Pour plus d’informations, consultez la AWS documentation correspondant à votre charge de travail.

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous devez disposer de l’identificateur de ressource Amazon (ARN) qui identifie de manière unique l’utilisateur ou le rôle AWS associé à l’instance qui s’authentifie auprès de Snowflake. Pour obtenir l’ARN d’un rôle IAM, procédez comme suit :

  1. Connectez-vous à la Console AWS, puis accédez au Tableau de bord IAM.

  2. Dans le volet de navigation de gauche, sélectionnez Roles.

  3. Sélectionnez le nom du rôle que vous avez associé à votre instance AWS.

  4. Dans la section Summary, cherchez le fichier ARN, puis sélectionnez l’icône Copy.

Snowflake accepte les formes suivantes d’IAM identificateurs :

  • arn:aws:iam::account:user/user_name_with_path

  • arn:aws:iam::account:role/role_name_with_path

  • arn:aws:sts::account:assumed_role/role_name/role_session_name

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AWS
        ARN = '<amazon_resource_identifier>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    ARN est la valeur que vous avez obtenue avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    import os
    import snowflake.connector
    
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AWS'
    )
    
    Copy
  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

S’authentifier auprès de Snowflake en utilisant Microsoft Entra ID et un pilote Python Snowflake

Suivez les étapes de chaque section répertoriée ci-dessous pour utiliser la fédération d’identité de charge de travail pour vous authentifier auprès de Snowflake à partir de Microsoft Entra ID :

Configurer Microsoft Entra ID

Un administrateur client Microsoft Entra ID doit suivre les étapes suivantes pour autoriser l’utilisation de l’identité de charge de travail de Snowflake. Ces étapes ne doivent être suivies qu’une seule fois par client Microsoft Entra ID :

  1. Connectez-vous au portail Microsoft Azure.

  2. Assurez-vous de disposer des privilèges d’administrateur client Azure.

  3. Consentez à installer l’application EntraID multi-clients de Snowflake en accédant à l’URI de consentement.

    L’application EntraID multi-clients de Snowflake est vérifiée par l’éditeur et représente Snowflake en tant que ressource. L’application est utilisée comme audience pour le jeton d’accès lors de l’authentification auprès de Snowflake. Cette application ne nécessite que des autorisations de base et n’est pas privilégiée.

  4. Sélectionnez Accept pour donner des autorisations à l’application EntraID de Snowflake.

Configurer Microsoft Azure

Suivez les étapes suivantes pour configurer votre service Microsoft Azure pour utiliser la fédération d’identité de charge de travail :

  1. Connectez-vous au portail Microsoft Azure.

  2. Sélectionnez votre charge de travail, par exemple une machine virtuelle ou un service d’application.

  3. Dans la barre latérale, accédez à Security » Identity.

  4. Activez une identité gérée pour une VM Azure ou une fonction Azure.

  5. Enregistrez l’Object (Principal) ID pour plus tard.

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous avez besoin des informations suivantes :

  • L’ID d’objet sensible à la casse (ID Principal) de l’identité gérée que vous avez activée lors de l’étape précédente. Vous pouvez utiliser le portail Azure pour copier cet identificateur à partir de la page Identity pour votre VM ou votre fonction Azure.

  • Votre ID client Microsoft Entra. Vous utilisez cette valeur pour créer l’URL d’autorité.

    • Pour obtenir l’ID client en utilisant la Console Microsoft Entra, consultez Trouver votre ID client Microsoft Entra.

    • Pour obtenir l’ID client en utilisant PowerShell, exécutez les commandes suivantes :

      Connect-AzAccount
      Get-AzTenant
      
      Copy

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AZURE
        ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0'
        SUBJECT = '<managed_identity_object_id>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    ISSUER et SUBJECT sont les valeurs que vous avez obtenues avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AZURE'
    )
    
    Copy
  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

Note

En tant que développeur de charge de travail, vous devrez peut-être définir une variable d’environnement liée à l’identité gérée que votre administrateur de charge de travail a activée. Si votre administrateur a activé une identité gérée attribuée par l’utilisateur plutôt qu‘une identité gérée attribuée par le système, vous devez définir la variable d’environnement MANAGED_IDENTITY_CLIENT_ID sur l’ID du client de l’identité gérée que vous souhaitez utiliser pour vous authentifier auprès de Snowflake.

S’authentifier auprès de Snowflake en utilisant Google Cloud et un pilote Python Snowflake

Configurer Google Cloud

Pour configurer votre service afin qu’il utilise Google Cloud comme fournisseur d’identité, associez un compte de service à votre instance GCE ou Cloud Run.

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous devez disposer de la valeur de la propriété uniqueId du compte de service. Pour obtenir cet ID unique, utilisez le CLI Google Cloud pour exécuter la commande suivante :

gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
Copy

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = GCP
        SUBJECT = '<unique_id_of_service_account>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    SUBJECT est la valeur que vous avez obtenue avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='GCP'
    )
    
    Copy
  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

S’authentifier auprès de Snowflake en utilisant l’émetteurOpenID Connect (OIDC) à partir de Elastic Kubernetes Service (EKS)

Suivez les étapes de chaque section répertoriée ci-dessous pour utiliser la fédération d’identité de charge de travail pour vous authentifier auprès de Snowflake à partir de Elastic Kubernetes Service (EKS) :

Configurer EKS

  1. Configurez|aws-kubernetes-short| pour qu’il émette des jetons d’ID compatibles avec Snowflake.

    1. Configurez votre déploiement de pod YAML pour inclure un volume de jetons de ServiceAccount projeté.

    2. Configurez les jetons d’ID pour contenir une réclamation d’audience avec snowflakecomputing.com.

      Voici un exemple de configuration YAML avec l’audience appropriée :

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous avez besoin des informations suivantes :

  • L’URL émettrice du fournisseur OIDC qui génère le jeton d’ID pour le compte de service Kubernetes. Pour obtenir cette URL émettrice, vous pouvez effectuer l’une des tâches suivantes :

    • Accédez à l’onglet Overview de votre cluster, puis copiez la valeur dans le champ OpenID Connect provider URL.

    • Exécutez la commande suivante avec accès au point de terminaison du serveur de l’API :

      aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
      
      Copy
  • L’espace de noms et le nom du compte de service Kubernetes. Vous utilisez ces informations pour créer l’objet du jeton d’ID émis par le fournisseur OIDC.

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER my_eks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    ISSUER et SUBJECT sont les valeurs que vous avez obtenues avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    service_account_token_path est celui que vous avez créé à l’étape Configurer EKS. Sur la base de l’exemple YAML de cette étape, le chemin du jeton serait /var/run/secrets/tokens/snowflake-token.

  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

S’authentifier auprès de Snowflake en utilisant l’émetteurOpenID Connect (OIDC) à partir de Azure Kubernetes Service (AKS)

Suivez les étapes de chaque section répertoriée ci-dessous pour utiliser la fédération d’identité de charge de travail pour vous authentifier auprès de Snowflake à partir de Azure Kubernetes Service (AKS) :

Configurer AKS

Configurez|microsoft-azure-kubernetes-short| pour qu’il émette des jetons d’ID compatibles avec Snowflake :

  1. Activez l’émetteur OIDC sur votre cluster AKS.

  2. Configurez|microsoft-azure-kubernetes-short| pour qu’il émette des jetons d’ID compatibles avec Snowflake.

    1. Configurez votre déploiement de pod YAML pour inclure un volume de jetons de ServiceAccount projeté.

    2. Configurez les jetons d’ID pour contenir une réclamation d’audience avec snowflakecomputing.com.

      Voici un exemple de configuration YAML avec l’audience appropriée :

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous avez besoin des informations suivantes :

  • L’URL émettrice du fournisseur OIDC qui génère le jeton d’ID pour le compte de service Kubernetes. Pour obtenir cette URL émettrice, consultez la documentation Microsoft.

  • L’espace de noms et le nom du compte de service Kubernetes. Vous utilisez ces informations pour créer l’objet du jeton d’ID émis par le fournisseur OIDC.

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER my_aks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    ISSUER et SUBJECT sont les valeurs que vous avez obtenues avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    service_account_token_path est celui que vous avez créé à l’étape Configurer AKS. Sur la base de l’exemple YAML de cette étape, le chemin du jeton serait /var/run/secrets/tokens/snowflake-token.

  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

S’authentifier auprès de Snowflake en utilisant l’émetteurOpenID Connect (OIDC) à partir de Google Kubernetes Engine (GKE)

Suivez les étapes de chaque section répertoriée ci-dessous pour utiliser la fédération d’identité de charge de travail pour vous authentifier auprès de Snowflake à partir de Google Kubernetes Engine (GKE) :

Configurer GKE

  1. Configurez|google-kubernetes-short| pour qu’il émette des jetons d’ID compatibles avec Snowflake.

    1. Configurez votre déploiement de pod YAML pour inclure un volume de jetons de ServiceAccount projeté.

    2. Configurez les jetons d’ID pour contenir une réclamation d’audience avec snowflakecomputing.com.

      Voici un exemple de configuration YAML avec l’audience appropriée :

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous avez besoin des informations suivantes :

  • L’ID du projet Google Cloud, la région du cluster et le nom du cluster. Vous utilisez ces informations pour créer l’émetteur OIDC.

  • L’espace de noms et le nom du compte de service Kubernetes. Vous utilisez ces informations pour créer l’objet du jeton d’ID émis par le fournisseur OIDC.

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER my_gke_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    ISSUER et SUBJECT sont les valeurs que vous avez obtenues avant de suivre ces étapes.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    service_account_token_path est celui que vous avez créé à l’étape Configurer GKE. Sur la base de l’exemple YAML de cette étape, le chemin du jeton serait /var/run/secrets/tokens/snowflake-token.

  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

S’authentifier auprès de Snowflake en utilisant un fournisseur OpenID Connect (OIDC) personnalisé

Suivez les étapes de chaque section répertoriée ci-dessous pour utiliser la fédération d’identité de charge de travail pour vous authentifier auprès de Snowflake à partir d’un fournisseur OIDC personnalisé :

Configurer votre fournisseur OIDC

  1. Assurez-vous que votre fournisseur OIDC prend en charge la ` Configuration OpenID <https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig>`_ comme spécifié dans la spécification de découverte. La configuration et le point de terminaison jwks_uri de la configuration doivent tous deux être accessibles au public.

  2. Configurez votre fournisseur OpenID pour qu’il émette des jetons d’ID avec une réclamation d’audience définie sur snowflakecomputing.com ou une liste personnalisée non vide. Si vous définissez une liste personnalisée non vide, vous devez la spécifier lorsque vous créez un utilisateur de service dans Snowflake.

Configurer Snowflake

Pour configurer Snowflake, créez un utilisateur de services Snowflake, c’est-à-dire un utilisateur de type SERVICE, qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake.

Avant de commencer

Pour configurer correctement Snowflake, vous avez besoin des informations suivantes :

  • L’URL émettrice de votre fournisseur OIDC.

  • La réclamation d’objet associée à votre charge de travail.

Vous pouvez obtenir ces deux valeurs en analysant les réclamations iss et sub d’un jeton d’ID émis pour votre charge de travail. Par exemple, si vous avez accès à un environnement de type Unix avec jq, cat et echo, vous pouvez enregistrer votre jeton d’ID vers un fichier et exécuter les commandes suivantes.

ID_TOKEN_PATH=<id_token_path>

JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
Copy

Pour savoir comment obtenir un jeton d’ID, consultez la documentation de votre fournisseur OIDC.

Pour créer un utilisateur de services pour votre charge de travail :

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Projects » Worksheets pour ouvrir la liste des feuilles de calcul.

  3. Pour ouvrir une nouvelle feuille de calcul SQL, sélectionnez +.

  4. Pour créer un utilisateur de services qui utilise la fédération d’identité de charge de travail pour s’authentifier auprès de Snowflake, exécutez une instruction CREATE USER dans la feuille de calcul :

    CREATE USER my_custom_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = '<issuer>'
        SUBJECT = '<subject>'
        OIDC_AUDIENCE_LIST = ('<custom_audience>')
      )
      TYPE = SERVICE;
    
    Copy

    Où :

    • ISSUER et SUBJECT sont les valeurs que vous avez obtenues avant de suivre ces étapes.

    • OIDC_AUDIENCE_LIST est un sur-ensemble non vide de la réclamation d’audience du jeton d’ID définie dans Configurer votre fournisseur OIDC. Vous n’avez pas besoin de spécifier OIDC_AUDIENCE_LIST si la réclamation d’audience du jeton d’ID est snowflakecomputing.com.

Configurer votre charge de travail pour utiliser un pilote Snowflake

Note

Vous pouvez configurer votre charge de travail pour utiliser n’importe quel pilote Snowflake qui prend en charge la fédération d’identité de charge de travail. Pour obtenir la liste complète, voir Pilotes Snowflake pris en charge.

Si votre charge de travail a besoin d’un pilote Python, procédez comme suit :

  1. Installez le Snowflake Connector pour Python.

  2. Dans votre code d’application Python, ajoutez le code source suivant :

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token='<id_token>'
    )
    
    Copy

    id_token est un jeton d’ID non expiré reçu de votre fournisseur OIDC pour votre charge de travail. Pour savoir comment obtenir ce jeton, consultez la documentation de votre fournisseur OIDC.

  3. Exécutez votre application Python. Elle s’authentifie auprès de Snowflake à l’aide de la fédération d’identité de charge de travail.

Limites et considérations

  • Les charges de travail Azure ne peuvent pas être situées dans des Clouds souverains Azure, tels qu’Azure China et Azure US Gov. Cette limite n’est pas liée à la région Snowflake de votre compte.