Introduction à OAuth

Snowflake prend en charge le protocole OAuth 2.0 pour l’authentification et l’autorisation. OAuth est un protocole à norme ouverte qui permet aux clients pris en charge d’avoir un accès autorisé à Snowflake sans partage ni stockage d’informations de connexion de l’utilisateur. Ceci est appelé autorisation déléguée, car un utilisateur autorise le client à agir en son nom pour récupérer ses données. Snowflake propose deux voies OAuth : OAuth Snowflake et OAuth externe.

Snowflake OAuth utilise le service OAuth intégré de Snowflake et prend en charge les applications suivantes :

OAuth externe intègre le serveur OAuth 2.0 d’un client et prend en charge trois options de serveur d’autorisation, des clients personnalisés et une application partenaire.

Le tableau suivant compare Snowflake OAuth et OAuth externe.

Catégorie

Snowflake OAuth

OAuth externe

Modifier l’application cliente

Obligatoire

Obligatoire

Accès au navigateur de l’application cliente

Obligatoire

Non requis

Clients automatiques

Nécessite un navigateur

Meilleure correspondance

Propriété du pilote

authenticator = oauth

authenticator = oauth

Syntaxe de l’intégration de sécurité

create security integration type = oauth ...

create security integration type = external_oauth

Flux OAuth

Flux d’accord de code OAuth 2.0

Tout flux OAuth que le client peut initier avec le serveur externe OAuth

Snowflake active OAuth pour les clients à l’aide d”intégrations. Une intégration est un objet Snowflake qui fournit une interface entre Snowflake et des services tiers. Les administrateurs configurent OAuth à l’aide d’une intégration de sécurité, d’un type d’intégration permettant aux clients prenant en charge OAuth de rediriger les utilisateurs vers une page d’autorisation et de générer des jetons d’accès (et éventuellement, des jetons d’actualisation) pour accéder à Snowflake.

Dans ce chapitre :

Concepts OAuth

Serveur d’autorisation

Ce serveur affiche une interface permettant à un utilisateur d’approuver ou de refuser l’accès des clients à leurs données. Le serveur envoie un jeton d’accès au client après l’authentification réussie de l’utilisateur et la validation d’une demande d’autorisation.

Jeton d’accès

Une chaîne qui représente l’autorisation accordée à un client par un utilisateur d’accéder à leurs données en utilisant un rôle spécifié. Ces jetons expirent après une courte période ; un mécanisme d’actualisation peut être utilisé pour obtenir de nouveaux jetons d’accès.

Jeton d’actualisation

Chaîne utilisée pour obtenir un nouveau jeton d’accès lorsqu’il expire. Un jeton d’actualisation est éventuellement émis par le serveur d’autorisation au client avec un jeton d’accès. Le client peut utiliser le jeton d’actualisation pour demander un autre jeton d’accès, évitant ainsi la réimplication de l’utilisateur jusqu’à l’expiration du jeton d’actualisation. À ce stade, le workflow OAuth est à nouveau appelé.

Serveur de ressources

Ce serveur protège la ressource (c’est-à-dire Snowflake) et gère les demandes d’accès à la ressource à l’aide de jetons d’accès.

Clients confidentiels et publics

Les clients confidentiels peuvent stocker un secret. Ils fonctionnent dans une zone protégée à laquelle les utilisateurs finaux ne peuvent pas accéder. Par exemple, un service sécurisé déployé sur le Cloud peut être un client confidentiel. Un client fonctionnant sur un ordinateur de bureau ou distribué via un magasin d’applications peut être un client public.

Pour les clients publics, l’utilisateur doit entrer son nom d’utilisateur et son mot de passe Snowflake avant d’autoriser l’accès client à Snowflake à l’aide du rôle spécifié. Pour les clients confidentiels, l’utilisateur n’a besoin d’entrer ses informations d’identification qu’une seule fois pour le rôle spécifié.

Snowflake prend en charge OAuth pour les clients confidentiels et publics.

Flux d’autorisation OAuth de Snowflake

Le flux d’autorisation OAuth est le suivant :

Snowflake OAuth workflow
  1. Dans le client, l’utilisateur tente de se connecter à Snowflake en utilisant OAuth.

    L’application envoie une demande d’autorisation au serveur d’autorisation Snowflake, qui affiche à son tour un écran d’autorisation demandant à l’utilisateur d’autoriser l’accès.

  2. L’utilisateur soumet le nom d’utilisateur et le mot de passe Snowflake. Un écran de consentement lui est alors présenté pour permettre au client d’accéder à Snowflake en utilisant un rôle spécifique dans une session utilisateur (par exemple SYSADMIN ou CUSTOM_ROLE1).

    L’utilisateur soumet son consentement à utiliser le rôle spécifique dans une session.

    Le serveur d’autorisation Snowflake renvoie un code d’autorisation au client.

  3. Le client renvoie le code d’autorisation au serveur d’autorisation Snowflake pour demander un jeton d’accès et, éventuellement, un jeton d’actualisation permettant au client d’obtenir de nouveaux jetons d’accès.

    Le serveur d’autorisation Snowflake accepte le code d’autorisation et fournit au client un jeton d’accès spécifique aux ressources utilisateur du serveur de ressources Snowflake. En fonction des paramètres de la demande d’autorisation, le serveur d’autorisation émet un jeton d’actualisation pour obtenir de nouveaux jetons d’accès liés à la ressource spécifique.

  4. Le client envoie le jeton d’accès au serveur de ressources Snowflake.

    Le serveur de ressources reconnaît le jeton d’accès valide et crée une session utilisateur avec le rôle autorisé. Le client a maintenant accès aux ressources Snowflake limitées par le rôle spécifié par le jeton d’accès.

Les jetons d’accès ont une vie courte ; en général 10 minutes. Lorsque le jeton d’accès arrive à expiration, le client peut envoyer un jeton d’actualisation pour obtenir de nouveaux jetons d’accès. Un jeton d’actualisation est envoyé au serveur d’autorisation Snowflake pour demander un nouveau jeton d’accès à chaque expiration du jeton d’accès actuel (étapes 3 à 6). Si l’intégration est configurée pour empêcher l’envoi de jetons d’actualisation, l’utilisateur doit répéter les étapes ci-dessus pour réautoriser le client.

Configuration de la prise en charge OAuth

Applications partenaires OAuth Snowflake

Actuellement, Snowflake prend en charge l’autorisation OAuth avec les applications partenaires Snowflake suivantes :

Client

Version client requise

Type de client

Tableau Desktop / Server / Online

2019.1 ou supérieur

Public

Looker

6.20 ou supérieur

Pour configurer la prise en charge, voir Configurer Snowflake OAuth pour les applications partenaires.

Important

Actuellement, Tableau prend en charge OAuth uniquement lorsque la technologie de Tableau peut accéder à l’Internet public.

Par conséquent, les clients utilisant AWS PrivateLink peuvent rencontrer des problèmes s’ils tentent d’utiliser OAuth et Tableau avec Snowflake. Veuillez contacter Tableau pour des questions ou plus de détails.

Clients personnalisés OAuth Snowflake

Snowflake prend en charge les clients personnalisés configurés par votre organisation. Pour configurer la prise en charge, voir Configurer Snowflake OAuth pour les clients personnalisés.

Applications partenaires OAuth externes

Actuellement, Snowflake prend en charge Microsoft Power BI en tant qu’application partenaire OAuth externe.

Clients personnalisés OAuth externes

Snowflake prend en charge les clients personnalisés OAuth externes configurés par votre organisation. Pour configurer la prise en charge, voir Configurer des clients personnalisés pour OAuth externe.

Audit des connexions OAuth

Pour interroger les tentatives de connexion des utilisateurs de Snowflake, Snowflake fournit un historique de connexion :

Lorsque OAuth est utilisé pour s’authentifier (avec succès ou non), la colonne FIRST_AUTHENTICATION_FACTOR de la sortie a la valeur OAUTH_ACCESS_TOKEN.

DDL d’intégration

Pour prendre en charge la création et/ou la gestion des intégrations et des autorisations déléguées, Snowflake fournit l’ensemble suivant de commandes DDL spéciales :

OAuth et authentification fédérée

Snowflake prend en charge OAuth avec Authentification fédérée et SSO (connexion unique) à l’aide de tout fournisseur d’identité (IdP) pris en charge par Snowflake.

Avec l’authentification fédérée configurée, le flux d’autorisation est le suivant :

  1. Dans le client, l’utilisateur tente de se connecter à Snowflake.

    L’application envoie une demande d’autorisation au serveur d’autorisation Snowflake, qui affiche à son tour un écran d’autorisation demandant à l’utilisateur d’autoriser l’accès.

  2. L’utilisateur clique sur l’option permettant de se connecter à l’aide d’IdP et est redirigé vers la page d’authentification IdP.

  3. L’utilisateur soumet le nom d’utilisateur et le mot de passe de l’IdP. Un écran de consentement lui est alors présenté pour permettre au client d’accéder à Snowflake en utilisant un rôle spécifique dans une session utilisateur (par exemple : SYSADMIN ou CUSTOM_ROLE1).

    L’utilisateur soumet son consentement à utiliser le rôle spécifique dans une session.

    Le serveur d’autorisation Snowflake renvoie un code d’autorisation au client.

  4. Le client renvoie le code d’autorisation au serveur d’autorisation Snowflake pour demander un jeton d’accès et, éventuellement, un jeton d’actualisation permettant au client d’obtenir de nouveaux jetons d’accès.

    Le serveur d’autorisation Snowflake accepte le code d’autorisation et fournit au client un jeton d’accès spécifique aux ressources utilisateur du serveur de ressources Snowflake. En fonction des paramètres de la demande d’autorisation, le serveur d’autorisation émet un jeton d’actualisation pour obtenir de nouveaux jetons d’accès liés à la ressource spécifique.

  5. Le client envoie le jeton d’accès au serveur de ressources Snowflake.

    Le serveur de ressources reconnaît le jeton d’accès valide et crée une session utilisateur avec le rôle autorisé. Le client a maintenant accès aux ressources Snowflake limitées par le rôle spécifié par le jeton d’accès.

OAuth et connectivité privée

Snowflake prend en charge OAuth externe avec AWS PrivateLink et Azure Private Link.

Actuellement, Snowflake OAuth ne fonctionnera pas avec AWS Private Link ou Azure Private Link, car Tableau et Looker nécessitent tous deux un accès à Internet public. Pour plus d’informations, voir :

OAuth et politiques réseau

Vous pouvez utiliser des politiques réseau avec Snowflake OAuth uniquement. L’intégration de sécurité OAuth externe ne prend pas en charge la définition d’une politique réseau distincte.

L’intégration de sécurité OAuth de Snowflake possède un paramètre network_policy afin que l’intégration OAuth de Snowflake puisse authentifier et autoriser les utilisateurs sans ajouter ces adresses IP pour un accès utilisateur normal.

La configuration d’une politique réseau spécifique à l’intégration OAuth de Snowflake permet à la politique réseau OAuth de Snowflake d’être distincte des autres politiques réseau qui peuvent s’appliquer au compte Snowflake. La politique réseau OAuth de Snowflake n’affecte pas les autres politiques réseau du compte et les autres politiques réseau du compte n’affectent pas la politique réseau OAuth de Snowflake. Par conséquent, la politique réseau OAuth de Snowflake permet l’authentification et l’autorisation des utilisateurs comme prévu.

Important

Si une politique réseau par utilisateur ou compte est définie et que vous utilisez un service qui s’exécute dans un emplacement différent (par exemple, le service Microsoft Power BI), vous ne pourrez pas vous connecter à Snowflake.

Après avoir créé l’intégration de sécurité OAuth de Snowflake, définissez la politique réseau OAuth à l’aide de cette commande :

alter security integration <intégration_oauth> set network_policy = <politique_réseau_oauth>;

Pour annuler la politique réseau OAuth de Snowflake, utilisez cette commande :

alter security integration <intégration_oauth> unset <politique_réseau_oauth>;

Où :

<oauth_integration>

Spécifie le nom de l’intégration de sécurité OAuth de Snowflake.

<oauth_network_policy>

Spécifie la politique réseau OAuth de Snowflake dans Snowflake.

Pour plus d’informations, voir Politiques réseau et ALTER SECURITY INTEGRATION.

OAuth avec les clients, les pilotes et les connecteurs

Les clients, pilotes et connecteurs pris en charge peuvent utiliser OAuth pour vérifier les informations de connexion de l’utilisateur.

Remarques :

  • Il est nécessaire de définir le paramètre authenticator sur oauth et le paramètre token sur oauth_access_token.

  • Lors du passage de la valeur token en tant que paramètre de requête URL, il est nécessaire d’encoder en URL la valeur oauth_access_token.

  • Lors du passage de la valeur token à un objet Propriétés (par exemple, pilote JDBC), aucune modification n’est nécessaire.

Pour plus d’informations, consultez les paramètres de connexion pour chaque client, pilote ou connecteur.