Authentification multifactorielle (MFA)

Snowflake prend en charge l’authentification multifactorielle (c’est-à-dire MFA) pour offrir une sécurité de connexion accrue aux utilisateurs se connectant à Snowflake. L’assistance MFA est fournie sous la forme d’une fonction Snowflake intégrée, alimentée par le service Duo Security, qui est entièrement géré par Snowflake.

Les utilisateurs n’ont pas besoin de s’inscrire séparément à Duo ou d’effectuer des tâches autres que l’installation de l’application Duo Mobile qui est prise en charge sur plusieurs plateformes de smartphone (iOS, Android, Windows, etc.). Voir le Guide de l’utilisateur Duo pour plus d’informations sur les plateformes/dispositifs pris en charge et sur le fonctionnement de l’authentification multifactorielle Duo.

La MFA s’active par utilisateur. Toutefois, pour le moment, les utilisateurs ne sont pas automatiquement inscrits à la MFA. Pour utiliser la MFA, les utilisateurs doivent s’inscrire eux-mêmes.

Attention

Au minimum, Snowflake recommande fortement que tous les utilisateurs ayant le rôle ACCOUNTADMIN soient tenus d’utiliser la MFA.

Dans ce chapitre :

Conditions préalables

Le service d’application Duo communique par le port TCP 443.

Pour assurer un comportement cohérent, mettez à jour les paramètres de votre pare-feu pour inclure le service d’application Duo sur le port TCP 443.

*.duosecurity.com:443
Copy

Pour plus d’informations, consultez la documentation Duo.

flux de connexion MFA

Le diagramme suivant illustre le flux de connexion global pour un utilisateur inscrit dans MFA, quelle que soit l’interface utilisée pour se connecter :

MFA login flow

Inscription d’un utilisateur Snowflake à MFA

Tout utilisateur de Snowflake peut s’auto-inscrire à la MFA via l’interface Web. Pour plus d’informations, voir Gérer votre profil d’utilisateur à l’aide de Snowsight.

Commutation de téléphones utilisés pour MFA

La restauration instantanée est une fonction Duo qui permet à un utilisateur de sauvegarder l’application Duo avant de passer à un nouveau téléphone. Tant qu’un utilisateur de Snowflake sauvegarde d’abord son ancien téléphone, il peut utiliser Instant Restore pour activer l’authentification sur le nouveau téléphone sans interrompre MFA pour Snowflake.

Si un utilisateur ne sauvegarde pas l’ancien téléphone ou le perd, l’administrateur du compte Snowflake doit désactiver MFA pour chaque nom d’utilisateur ayant utilisé l’ancien téléphone avant que MFA puisse être réactivé sur le nouveau téléphone.

Gestion de MFA pour un compte et des utilisateurs

Au niveau du compte, la MFA n’exige aucune gestion. Elle est automatiquement activée pour un compte, et est disponible pour tous les utilisateurs pour qu’ils s’y auto-inscrivent. Cependant, l’administrateur de compte (c’est-à-dire l’utilisateur à qui le rôle système ACCOUNTADMIN a été attribué) peut trouver nécessaire de désactiver MFA pour un utilisateur, soit temporairement soit de manière permanente, par exemple si l’utilisateur perd son téléphone ou change de numéro de téléphone et ne peut pas se connecter avec MFA.

L’administrateur de compte peut utiliser les propriétés suivantes pour que la commande ALTER USER exécute ces tâches :

  • MINS_TO_BYPASS_MFA

    Spécifie le nombre de minutes de la désactivation temporaire de la MFA avant que l’utilisateur puisse se connecter. Une fois le temps écoulé, la MFA est appliquée et l’utilisateur ne peut plus se connecter sans le jeton temporaire généré par l’application Duo Mobile.

  • DISABLE_MFA

    Désactive la MFA pour l’utilisateur, annulant ainsi son inscription. Il peut être nécessaire d’actualiser le navigateur pour vérifier que l’utilisateur n’est plus inscrit à MFA. Pour utiliser la MFA à nouveau, l’utilisateur doit se réinscrire.

    Note

    DISABLE_MFA n’est pas une colonne dans une table ou une vue Snowflake. Lorsqu’un administrateur de compte exécute la commande ALTER USER pour régler DISABLE_MFA sur TRUE, la valeur de la propriété EXT_AUTHN_DUO est automatiquement réglée sur FALSE.

    Pour vérifier que MFA est désactivé pour un utilisateur donné, exécutez une instruction DESCRIBE USER et vérifiez la valeur de la propriété EXT_AUTHN_DUO .

Connexion à Snowflake via la MFA

La MFA est conçue principalement pour se connecter à Snowflake via l’interface Web, mais est également entièrement prise en charge par SnowSQL et les pilotes Snowflake JDBC et ODBC.

Utilisation de la mise en cache des jetons MFA pour réduire le nombre d’invites lors de l’authentification — Facultatif

La mise en cache des jetons MFA peut contribuer à réduire le nombre d’invites qui doivent être réceptionnées lors de la connexion et de l’authentification à Snowflake, en particulier lorsque plusieurs tentatives de connexion sont effectuées dans un intervalle de temps relativement court.

Un jeton MFA mis en cache est valable pendant quatre heures au maximum.

Le jeton MFA mis en cache n’est pas valable si l’une des conditions suivantes est remplie :

  1. Le paramètre ALLOW_CLIENT_MFA_CACHING est défini sur FALSE pour le compte ou l’utilisateur.

  2. La méthode d’authentification change.

  3. Les données identifiants de connexion d’authentification changent (c’est-à-dire le nom d’utilisateur et/ou le mot de passe).

  4. Les identifiants de connexion d’authentification ne sont pas valables.

  5. Le jeton mis en cache expire ou n’est pas valide sur le plan cryptographique.

  6. Le nom de compte associé au jeton mis en cache change.

Le processus global que Snowflake utilise pour mettre en cache les jetons MFA est similaire à celui utilisé pour mettre en cache les jetons de connexion pour la connexion unique fédérée par navigateur. L’application cliente stocke le jeton MFA dans le keystore du système d’exploitation côté client. Les utilisateurs peuvent à tout moment supprimer le jeton MFA mis en cache dans le keystore.

Snowflake prend en charge la mise en cache des jetons MFA avec les pilotes et connecteurs suivants sur macOS et Windows. Cette fonctionnalité n’est pas prise en charge sur Linux.

  • Version du pilote ODBC 2.23.0 (ou ultérieure).

  • Version du pilote JDBC 3.12.16 (ou ultérieure).

  • Connecteur Python pour la version Snowflake 2.3.7 (ou ultérieure).

Snowflake recommande de consulter des responsables de la sécurité interne et de la conformité avant d’activer la mise en cache des jetons MFA.

Astuce

La mise en cache des jetons MFA peut être combinée avec la mise en cache des connexions dans la connexion unique fédérée.

Pour combiner ces deux fonctionnalités, assurez-vous que le paramètre ALLOW_ID_TOKEN est réglé sur true en tandem avec le paramètre ALLOW_CLIENT_MFA_CACHING .

Pour activer la mise en cache du jeton MFA, suivez ces étapes :

  1. En tant qu’administrateur de compte (c’est-à-dire un utilisateur avec le rôle système ACCOUNTADMIN), définissez le paramètre ALLOW_CLIENT_MFA_CACHING sur true pour un compte en utilisant la commande ALTER ACCOUNT.

    ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
    
    Copy
  2. Dans la chaîne de connexion du client, mettez à jour la valeur de l’authentificateur sur authenticator = username_password_mfa.

  3. Ajoutez le paquet ou les bibliothèques requis par le pilote ou le connecteur :

    • Si vous utilisez le connecteur Snowflake pour Python, installez le paquet du « trousseau » facultatif en exécutant :

      pip install "snowflake-connector-python[secure-local-storage]"
      
      Copy

      Vous devez saisir les crochets ([ et ]) comme indiqué dans la commande. Les crochets spécifient la partie supplémentaire du paquet qui doit être installée.

      Utilisez des guillemets autour du nom du paquet (comme indiqué) pour éviter que les crochets ne soient interprétés comme des caractères génériques.

      Si vous devez installer d’autres « extras » (par exemple, pandas pour à l’aide des APIs du connecteur Python pour Pandas), utilisez une virgule entre les extras :

      pip install "snowflake-connector-python[secure-local-storage,pandas]"
      
      Copy
    • Pour le pilote JDBC Snowflake, voir Ajout de classes JNA à votre classpath.

Pour désactiver la mise en cache des jetons MFA, il convient de désactiver le paramètre ALLOW_CLIENT_MFA_CACHING :

ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
Copy

Pour trouver tous les utilisateurs qui utilisent la mise en cache des jetons MFA comme authentification de deuxième facteur pour se connecter, vous pouvez exécuter l’instruction SQL suivante en tant qu’administrateur de compte (un utilisateur ayant le rôle ACCOUNTADMIN) :

SELECT EVENT_TIMESTAMP,
       USER_NAME,
       IS_SUCCESS
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
Copy

Utilisation de MFA avec Snowsight

Pour vous connecter directement à Snowsight avec MFA :

  1. Connectez-vous à Snowsight.

  2. Saisissez vos identifiants (nom d’utilisateur et mot de passe).

  3. Si la fonction Duo Push est activée, vous pouvez sélectionner une méthode de notification. Si Send Me a Push est sélectionné, une notification push est envoyée à votre application Duo Mobile. Lorsque vous recevez la notification, sélectionnez Approve et vous serez connecté à Snowflake.

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

    Comme le montre la capture d’écran ci-dessus, au lieu d’utiliser la notification Push, vous avez également les choix suivants :

    • Sélectionnez Call Me pour recevoir les instructions de connexion lors d’un appel téléphonique vers l’appareil mobile enregistré.

    • Sélectionnez Enter a Passcode pour vous connecter en entrant manuellement un code d’accès fourni par l’application Duo Mobile.

Utilisation de MFA avec l’interface Web Classic Console

Pour se connecter à la Classic Console avec MFA :

  1. Dirigez votre navigateur sur l’URL de votre compte. Par exemple : https://myorg-account1.snowflakecomputing.com.

  2. Saisissez vos identifiants (nom d’utilisateur et mot de passe).

  3. Si la fonction Duo Push est activée, une notification Push est envoyée à votre application Duo Mobile. Lorsque vous recevez la notification, sélectionnez Approve et vous serez connecté à Snowflake.

    MFA selection dialog with Send Me a Push, Call Me and Enter a Passcode options.

    Comme le montre la capture d’écran ci-dessus, au lieu d’utiliser la notification Push, vous pouvez également choisir de :

    • Sélectionnez Call Me pour recevoir les instructions de connexion lors d’un appel téléphonique vers l’appareil mobile enregistré.

    • Sélectionnez Enter a Passcode pour vous connecter en entrant manuellement un code d’accès fourni par l’application Duo Mobile.

Utilisation de MFA avec SnowSQL

La MFA peut être utilisée pour se connecter à Snowflake par SnowSQL. Par défaut, le mécanisme d’authentification Duo Push est utilisé lorsqu’un utilisateur est inscrit dans la MFA.

Pour utiliser un code d’accès généré par Duo à la place du mécanisme Push, les paramètres de connexion doivent inclure l’une des options de connexion suivantes :

--mfa-passcode <chaîne> OR --mfa-passcode-in-password

Pour plus de détails, voir SnowSQL (CLI client).

Utilisation de MFA avec JDBC

La MFA peut être utilisée pour se connecter à Snowflake via le pilote Snowflake JDBC. Par défaut, le mécanisme d’authentification Duo Push est utilisé lorsqu’un utilisateur est inscrit dans la MFA. Aucune modification de la chaîne de connexion JDBC n’est nécessaire.

Pour utiliser un code d’accès généré par Duo à la place du mécanisme Push, l’un des paramètres suivants doit être inclus dans la chaîne de connexion JDBC :

passcode=<chaîne_code_accès> OR passcodeInPassword=on

Où :

  • passcode_string est un mot de passe généré par Duo pour l’utilisateur qui se connecte. Il peut s’agir d’un mot de passe généré par l’application Duo Mobile ou d’un mot de passe SMS.

  • Si passcodeInPassword=on, le mot de passe et le code d’accès sont concaténés, sous la forme de <chaîne_mdp><chaîne_code_accès>.

Pour plus de détails, voir Pilote JDBC.

Exemples de chaînes de connexion JDBC utilisant Duo

Chaîne de connexion JDBC pour l’utilisateur demo se connectant au compte xy12345 (dans la région US Ouest) en utilisant un code d’accès Duo :

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcode=123456
Copy

Chaîne de connexion JDBC pour l’utilisateur demo se connectant au compte xy12345 (dans la région US Ouest) en utilisant un code d’accès Duo intégré dans le mot de passe :

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
Copy

Utilisation de MFA avec ODBC

La MFA peut être utilisée pour se connecter à Snowflake via le pilote Snowflake ODBC. Par défaut, le mécanisme d’authentification Duo Push est utilisé lorsqu’un utilisateur est inscrit dans la MFA. Aucune modification des paramètres ODBC n’est nécessaire.

Pour utiliser un code d’accès généré par Duo à la place du mécanisme Push, l’un des paramètres suivants doit être spécifié pour le pilote :

passcode=<chaîne_code_accès> OR passcodeInPassword=on

Où :

  • passcode_string est un mot de passe généré par Duo pour l’utilisateur qui se connecte. Il peut s’agir d’un mot de passe généré par l’application Duo Mobile ou d’un mot de passe SMS.

  • Si passcodeInPassword=on, le mot de passe et le code d’accès sont concaténés, sous la forme de <chaîne_mdp><chaîne_code_accès>.

Pour plus de détails, voir Pilote ODBC.

Utilisation de la MFA avec Python

La MFA peut être utilisée pour se connecter à Snowflake via le connecteur Python de Snowflake. Par défaut, le mécanisme d’authentification Duo Push est utilisé lorsqu’un utilisateur est inscrit dans la MFA. Aucune modification des appels API Python n’est nécessaire.

Pour utiliser un code d’accès généré par Duo à la place du mécanisme Push, l’un des paramètres suivants doit être spécifié pour le pilote dans la méthode de connexion () :

passcode=<chaîne_code_accès> OR passcode_in_password=True

Où :

  • passcode_string est un mot de passe généré par Duo pour l’utilisateur qui se connecte. Il peut s’agir d’un mot de passe généré par l’application Duo Mobile ou d’un mot de passe SMS.

  • Si passcode_in_password=True, le mot de passe et le code d’accès sont concaténés, sous la forme de <chaîne_mdp><chaîne_code_accès>.

Pour plus de détails, voir la description de la méthode connect() dans la section Fonctions de la documentation sur le connecteur API Python.

Codes d’erreur MFA

Les codes d’erreur suivants sont associés à MFA et peuvent être renvoyés pendant le flux d’authentification.

Les erreurs s’affichent à chaque tentative de connexion échouée. Les données historiques sont également disponibles dans Schéma d’information de Snowflake et Account Usage :

Code d’erreur

Erreur

Description

390120

EXT_AUTHN_DENIED

L’authentification Duo Security a été refusée.

390121

EXT_AUTHN_PENDING

L’authentification Duo Security est en suspens.

390122

EXT_AUTHN_NOT_ENROLLED

L’utilisateur n’a pas souscrit à Duo Security. Contactez votre administrateur système local.

390123

EXT_AUTHN_LOCKED

Un verrou empêche l’accès de l’utilisateur à Duo Security. Contactez votre administrateur système local.

390124

EXT_AUTHN_REQUESTED

L’authentification Duo Security est nécessaire.

390125

EXT_AUTHN_SMS_SENT

Le code d’accès temporaire Duo Security est envoyé par SMS. Veuillez vous authentifier à l’aide du code d’accès.

390126

EXT_AUTHN_TIMEOUT

Le délai d’attente de l’approbation de votre demande de connexion via Duo Mobile a expiré. Si votre appareil mobile n’a pas de service de données, générez un code d’accès Duo et saisissez-le dans la chaîne de connexion.

390127

EXT_AUTHN_INVALID

Un code d’accès non valide a été spécifié.

390128

EXT_AUTHN_SUCCEEDED

L’authentification Duo Security a réussi.

390129

EXT_AUTHN_EXCEPTION

La demande n’a pas pu être achevée en raison d’un problème de communication avec le fournisseur de services externe. Veuillez réessayer plus tard.

390132

EXT_AUTHN_DUO_PUSH_DISABLED

Duo Push n’est pas activé pour votre MFA MFA. Saisissez un code d’accès intégré à une chaîne de connexion.