Utilisation de jetons d’accès programmatique pour l’authentification

Vous pouvez utiliser un jeton d’accès programmatique pour vous authentifier auprès des points de terminaison Snowflake suivants :

Note

L’utilisation de jetons d’accès programmatiques pour s’authentifier auprès des points de terminaison Snowpark Container Services n’est pas encore prise en charge.

Vous pouvez également utiliser un jeton d’accès programmatique en remplacement d’un mot de passe dans les cas suivants :

Vous pouvez générer des jetons d’accès programmatique pour les utilisateurs humains (utilisateurs avec TYPE = PERSON) ainsi que pour les utilisateurs de services (utilisateurs avec TYPE = SERVICE).

Conditions préalables

Vous devez remplir les conditions préalables suivantes pour générer et utiliser des jetons d’accès programmatique :

Exigences en matière de politique réseau

Par défaut, l’utilisateur doit être soumis à une politique réseau avec une ou plusieurs règles réseau pour générer ou utiliser des jetons d’accès programmatique :

  • Pour les utilisateurs de services (où TYPE = SERVICE pour l’utilisateur), vous ne pouvez générer ou utiliser un jeton que si l’utilisateur est soumis à une politique réseau.

    Cette condition préalable limite l’utilisation du jeton aux requêtes provenant d’un ensemble spécifique d’adresses ou d’identificateurs de réseau.

  • Pour les utilisateurs humains (où TYPE = PERSON pour l’utilisateur), vous pouvez générer un jeton même si l’utilisateur n’est pas soumis à une politique réseau, mais l’utilisateur doit être soumis à une politique réseau pour s’authentifier avec ce jeton.

    Si un utilisateur humain qui n’est pas soumis à une politique réseau doit utiliser un jeton d’accès programmatique pour l’authentification, vous pouvez contourner temporairement l’exigence d’une politique réseau, mais nous ne le recommandons pas. Voir Génération d’un jeton d’accès programmatique.

    Note

    Les utilisateurs ne peuvent pas contourner la politique réseau elle-même.

La politique réseau peut être activée pour tous les utilisateurs du compte ou pour un utilisateur spécifique.

Pour modifier cette exigence, créez ou modifiez une politique d’authentification qui spécifie une politique de jeton d’accès programmatique.

Exécutez la commande CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Dans la clause PAT_POLICY, définissez NETWORK_POLICY_EVALUATION sur l’une des valeurs suivantes :

ENFORCED_REQUIRED (comportement par défaut)

L’utilisateur doit être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.

Si l’utilisateur est soumis à une politique réseau, celle-ci est appliquée lors de l’authentification.

ENFORCED_NOT_REQUIRED

L’utilisateur ne doit pas être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.

Si l’utilisateur est soumis à une politique réseau, celle-ci est appliquée lors de l’authentification.

NOT_ENFORCED

L’utilisateur ne doit pas être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.

Si l’utilisateur est soumis à une politique réseau, celle-ci n’est pas appliquée lors de l’authentification.

Par exemple, pour créer une politique d’authentification qui supprime l’exigence de politique réseau mais applique toute politique réseau à laquelle l’utilisateur est soumis :

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED
  );
Copy

Ensuite, appliquez la politique d’authentification à un compte ou à un utilisateur.

Autre exemple, pour modifier une politique d’authentification existante afin de supprimer l’exigence de politique réseau et empêcher l’application de toute politique réseau à laquelle l’utilisateur est soumis :

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    NETWORK_POLICY_EVALUATION = NOT_ENFORCED
  );
Copy

Exigences de la politique d’authentification

S’il existe une politique d’authentification qui limite les méthodes d’authentification d’un utilisateur, celui-ci ne peut générer et utiliser des jetons d’accès programmatique que si la AUTHENTICATION_METHODS liste de cette politique inclut 'PROGRAMMATIC_ACCESS_TOKEN'.

Par exemple, supposons qu’une politique d’authentification limite les utilisateurs à l’utilisation des méthodes OAuth et de mot de passe pour s’authentifier :

CREATE AUTHENTICATION POLICY my_auth_policy
  ...
  AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD')
  ...
Copy

Les utilisateurs ne peuvent pas générer et utiliser des jetons d’accès programmatique à moins que vous n’ajoutiez 'PROGRAMMATIC_ACCESS_TOKEN' à la liste AUTHENTICATION_METHODS. Vous pouvez utiliser la commande ALTER AUTHENTICATION POLICY pour mettre à jour cette liste.

Par exemple :

ALTER AUTHENTICATION POLICY my_auth_policy
  SET AUTHENTICATION_METHODS = ('OAUTH', 'PASSWORD', 'PROGRAMMATIC_ACCESS_TOKEN');
Copy

Configuration du délai d’expiration par défaut et du délai d’expiration maximal

Les administrateurs (utilisateurs ayant le rôle ACCOUNTADMIN) peuvent configurer les paramètres suivants qui affectent le délai d’expiration des jetons d’accès programmatique :

Définition du délai d’expiration maximal

Par défaut, vous pouvez spécifier un délai d’expiration allant jusqu’à 365 jours pour un jeton. Si vous souhaitez réduire ce délai, créez ou modifiez une politique d’authentification qui spécifie une politique de jeton d’accès programmatique avec un délai d’expiration maximal.

Exécutez la commande CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Dans la clause PAT_POLICY, définissez MAX_EXPIRY_IN_DAYS sur valeur comprise entre 1 et 365.

Par exemple, pour créer une politique d’authentification qui définit la valeur maximale sur 100 jours :

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    MAX_EXPIRY_IN_DAYS=100
  );
Copy

Ensuite, appliquez la politique d’authentification à un compte ou à un utilisateur.

Autre exemple, pour modifier une politique d’authentification existante afin de définir une valeur maximale sur 90 jours :

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    MAX_EXPIRY_IN_DAYS=90
  );
Copy

Note

S’il existe des jetons d’accès programmatique dont le délai d’expiration dépasse le nouveau délai d’expiration maximal, les tentatives d’authentification avec ces jetons échoueront.

Par exemple, supposons que vous génériez un jeton d’accès programmatique nommé my_token avec un délai d’expiration de 7 jours. Si vous modifiez ultérieurement le délai d’expiration maximal de tous les jetons pour le porter à 2 jours, l’authentification avec my_token échouera car le délai d’expiration du jeton dépasse le nouveau délai d’expiration maximal.

Définition du délai d’expiration par défaut

Par défaut, un jeton d’accès programmatique expire au bout de 15 jours. Si vous voulez modifier cette valeur, créez ou modifiez une politique d’authentification qui spécifie une politique de jeton d’accès programmatique avec une expiration par défaut.

Exécutez la commande CREATE AUTHENTICATION POLICY ou ALTER AUTHENTICATION POLICY. Dans la clause PAT_POLICY, définissez DEFAULT_EXPIRY_IN_DAYS sur une valeur initiale de 1 pour le délai d’expiration maximum.

Par exemple, pour créer une politique d’authentification qui définit la valeur par défaut sur 5 jours :

CREATE AUTHENTICATION POLICY my_authentication_policy
  PAT_POLICY=(
    DEFAULT_EXPIRY_IN_DAYS=5
  );
Copy

Ensuite, appliquez la politique d’authentification à un compte ou à un utilisateur.

Autre exemple, pour modifier une politique d’authentification existante afin de définir la valeur par défaut sur 30 jours :

ALTER AUTHENTICATION POLICY my_authentication_policy
  SET PAT_POLICY = (
    DEFAULT_EXPIRY_IN_DAYS=30
  );
Copy

Privilèges requis pour les jetons d’accès programmatique

Pour créer et gérer un jeton d’accès programmatique, vous devez utiliser un rôle auquel les privilèges suivants ont été attribués :

  • Pour les utilisateurs humains (avec TYPE = PERSON), vous n’avez pas besoin de privilèges particuliers pour générer, modifier, déposer ou afficher un jeton d’accès programmatique pour vous-même.

  • Si vous générez, modifiez, supprimez ou affichez un jeton d’accès programmatique pour un autre utilisateur ou un utilisateur de service (avec TYPE = SERVICE), vous devez utiliser un rôle qui dispose du privilège OWNERSHIP ou MODIFY PROGRAMMATIC AUTHENTICATION METHODS au niveau de cet utilisateur.

    Par exemple, supposons que vous souhaitiez accorder aux utilisateurs ayant le rôle personnalisé my_service_owner_role la possibilité de générer et de gérer des jetons d’accès programmatique pour l’utilisateur du service my_service_user. Vous pouvez accorder le privilège MODIFY PROGRAMMATIC AUTHENTICATION METHODS à l’utilisateur my_service_user pour le rôle my_service_owner_role :

    GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER my_service_user
      TO ROLE my_service_owner_role;
    
    Copy

Génération d’un jeton d’accès programmatique

Vous pouvez générer un jeton d’accès programmatique dans Snowsight ou en exécutant des commandes SQL.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Users & Roles.

  3. Sélectionnez l’utilisateur pour lequel vous souhaitez générer le jeton d’accès programmatique.

  4. Sous Programmatic access tokens, sélectionnez Generate new token.

  5. Dans la boîte de dialogue New programmatic access token, saisissez les informations suivantes :

    1. Dans le champ Name, saisissez un nom pour le jeton.

      Dans le nom, vous ne pouvez utiliser que des lettres, des chiffres et des traits de soulignement. Le nom doit commencer par une lettre ou un trait de soulignement. Les lettres du nom sont stockées et résolues comme des caractères majuscules.

    2. Dans le champ Comment, saisissez un commentaire descriptif sur le jeton.

      Après avoir créé le jeton, ce commentaire est affiché sous le jeton dans la section Programmatic access tokens.

    3. Dans Expires in, choisissez le nombre de jours après lequel le jeton doit expirer.

    4. Si vous générez le jeton au nom d’un utilisateur pour un service (si l’objet USER a TYPE = SERVICE), ou si vous souhaitez restreindre le champ d’application des opérations qui peuvent être effectuées, sélectionnez One specific role (recommended), puis le rôle à utiliser pour l’évaluation des privilèges et la création d’objets.

      Lorsque vous utilisez ce jeton pour l’authentification, tous les objets que vous créez appartiennent à ce rôle, et ce rôle est utilisé pour l’évaluation des privilèges.

      Note

      Les rôles secondaires ne sont pas utilisés, même si DEFAULT_SECONDARY_ROLES est défini sur (“ALL”) pour l’utilisateur.

      Si vous sélectionnez plutôt Any of my roles, tous les objets que vous créez et qui appartiennent à votre rôle principal, ainsi que les privilèges, sont évalués par rapport à vos rôles actifs.

    5. Sélectionnez Generate.

  6. Copiez ou téléchargez le jeton d’accès programmatique généré afin de pouvoir l’utiliser pour l’authentification.

    Note

    Après avoir fermé cette boîte de message, vous ne pourrez plus copier ou télécharger ce jeton.

Le nouveau jeton est listé dans la section Programmatic access tokens.

Comme indiqué précédemment, pour utiliser un jeton d’accès programmatique, l’utilisateur associé au jeton doit être soumis à une politique réseau, à moins que vous ne mettiez en place une politique d’authentification pour modifier cette exigence.

Si un utilisateur humain non soumis à une politique réseau doit utiliser un jeton d’accès programmatique pour l’authentification, vous pouvez contourner temporairement l’exigence d’une politique réseau en sélectionnant Plus d'options » Bypass requirement for network policy.

Note

Bypass requirement for network policy ne permet pas aux utilisateurs de contourner la politique réseau elle-même.

Après avoir créé un jeton d’accès programmatique, vous ne pouvez pas modifier la date d’expiration. Vous devez révoquer le jeton et en générer un nouveau avec le nouveau délai d’expiration.

Si vous avez spécifié un rôle pour le jeton d’accès programmatique et que ce rôle est révoqué pour l’utilisateur, le jeton d’accès programmatique utilise le rôle PUBLIC du système.

Utilisation d’un jeton d’accès programmatique

Les sections suivantes expliquent comment utiliser un jeton d’accès programmatique comme mot de passe et pour l’authentification à un point de terminaison Snowflake :

Utilisation d’un jeton d’accès programmatique comme mot de passe

Pour s’authentifier avec un jeton d’accès programmatique comme mot de passe, vous pouvez spécifier le jeton pour la valeur du mot de passe dans les paramètres du pilote ou lors de l’appel pour se connecter à Snowflake.

Par exemple, si vous utilisez Snowflake Connector pour Python, vous pouvez spécifier le jeton d’accès programmatique comme argument password lorsque vous appelez la méthode snowflake.connector.connect.

conn = snowflake.connector.connect(
    user=USER,
    password=<programmatic_access_token>,
    account=ACCOUNT,
    warehouse=WAREHOUSE,
    database=DATABASE,
    schema=SCHEMA
)
Copy

De la même manière, vous pouvez utiliser des jetons d’accès programmatiques à la place d’un mot de passe dans des applications tierces (telles que Tableau ou PowerBI). Collez le jeton d’accès programmatique dans le champ réservé au mot de passe.

Note

Par défaut, l’utilisation de jetons d’accès programmatique nécessite l’activation d’une politique réseau pour un utilisateur ou pour tous les utilisateurs du compte. Pour utiliser des jetons d’accès programmatique avec une application tierce, vous devez créer une politique réseau qui autorise les requêtes provenant des plages d’adresses IP de l’application tierce.

Utilisation d’un jeton d’accès programmatique pour s’authentifier à un point de terminaison

Pour s’authentifier à l’aide d’un jeton d’accès programmatique, il convient de paramétrer les en-têtes HTTP suivants dans la requête :

  • Authorization: Bearer token_secret

  • X-Snowflake-Authorization-Token-Type: PROGRAMMATIC_ACCESS_TOKEN (facultatif)

Par exemple, si vous utilisez cURL pour envoyer une requête à un point de terminaison Snowflake REST API :

curl --location 'https://myorganization-myaccount.snowflakecomputing.com/api/v2/databases' \
  --header "Authorization: Bearer <token_secret>"
Copy

Autre exemple, si vous utilisez cURL pour envoyer une requête au point de terminaison Snowflake SQL API:

curl -si -X POST https://myorganization-myaccount.snowflakecomputing.com/api/v2/statements \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <token_secret>" \
  --data '{"statement": "select 1"}'
Copy

Si la requête échoue avec une erreur PAT_INVALID, l’erreur peut s’être produite pour l’une des raisons suivantes :

  • L’utilisateur associé au jeton d’accès programmatique n’a pas été trouvé.

  • Échec de validation.

  • Le rôle associé au jeton d’accès programmatique n’a pas été trouvé.

  • L’utilisateur n’est pas associé au jeton d’accès programmatique spécifié.

Gestion des jetons d’accès programmatique

Les sections suivantes expliquent comment utiliser, modifier, lister, faire pivoter et révoquer les jetons d’accès programmatique :

Note

Vous ne pouvez pas modifier, renommer, faire pivoter ou révoquer un jeton d’accès programmatique dans une session où vous avez utilisé un jeton d’accès programmatique pour l’authentification.

Listing des jetons d’accès programmatique

Vous pouvez dresser la liste des jetons d’accès programmatique d’un utilisateur dans Snowsight ou en exécutant des commandes SQL.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Users & Roles.

  3. Sélectionnez l’utilisateur qui possède le jeton d’accès programmatique.

    Les jetons d’accès programmatique de l’utilisateur sont listés sous Programmatic access tokens.

Note

Au bout de sept jours, les jetons d’accès programmatique ayant expiré sont supprimés et n’apparaissent plus ni dans Snowsight ni dans la sortie de la commande SHOW USER PROGRAMMATIC ACCESS TOKENS.

Changement de nom d’un jeton d’accès programmatique

Vous pouvez modifier le nom d’un jeton d’accès programmatique dans Snowsight ou en exécutant les commandes SQL.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Users & Roles.

  3. Sélectionnez l’utilisateur associé au jeton d’accès programmatique.

  4. Sous Programmatic access tokens, localisez le jeton d’accès programmatique et sélectionnez Plus d'options » Edit.

  5. Dans le champ Name, modifiez le nom du jeton et sélectionnez Save.

Rotation d’un jeton d’accès programmatique

Vous pouvez faire pivoter un jeton d’accès programmatique dans Snowsight ou en exécutant les commandes SQL.

La rotation d’un jeton renvoie un nouveau secret de jeton qui porte le même nom et dont le délai d’expiration est prolongé. La rotation d’un jeton entraîne également l’expiration du secret du jeton existant. Utilisez le nouveau jeton pour vous authentifier auprès de Snowflake.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Users & Roles.

  3. Sélectionnez l’utilisateur associé au jeton d’accès programmatique.

  4. Sous Programmatic access tokens, localisez le jeton d’accès programmatique et sélectionnez Plus d'options » Rotate.

  5. Si vous souhaitez que le secret du jeton précédent expire immédiatement, sélectionnez Expire current secret immediately.

  6. Sélectionnez Rotate token.

  7. Copiez ou téléchargez le jeton d’accès programmatique généré afin de pouvoir l’utiliser pour l’authentification.

    Note

    Après avoir fermé cette boîte de message, vous ne pourrez plus copier ou télécharger ce jeton.

Révocation d’un jeton d’accès programmatique

Vous pouvez révoquer un jeton d’accès programmatique dans Snowsight ou en exécutant les commandes SQL.

  1. Connectez-vous à Snowsight.

  2. Sélectionnez Admin » Users & Roles.

  3. Sélectionnez l’utilisateur associé au jeton d’accès programmatique.

  4. Sous Programmatic access tokens, localisez le jeton d’accès programmatique et sélectionnez Plus d'options » Delete.

Réactivation d’un jeton d’accès programmatique désactivé

Lorsque vous désactivez l’accès à la connexion pour un utilisateur ou que Snowflake verrouille la connexion d’un utilisateur, les jetons d’accès programmatique de cet utilisateur sont automatiquement désactivés.

Note

Les jetons d’accès programmatique ne sont pas désactivés lorsqu’un utilisateur est temporairement verrouillé (par exemple, suite à au moins cinq échecs d’authentification).

Si vous exécutez la commande SHOW USER PROGRAMMATIC ACCESS TOKENS, la valeur de la colonne status est DISABLED pour les jetons associés à cet utilisateur.

SHOW USER PROGRAMMATIC ACCESS TOKENS FOR USER example_user;
Copy
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+
| name          | user_name    | role_restriction | expires_at                    | status   | comment | created_on                    | created_by   | mins_to_bypass_network_policy_requirement | rotated_to |
|---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------|
| EXAMPLE_TOKEN | EXAMPLE_USER | MY_ROLE          | 2025-04-28 12:13:46.431 -0700 | DISABLED | NULL    | 2025-04-13 12:13:46.431 -0700 | EXAMPLE_USER | NULL                                      | NULL       |
+---------------+--------------+------------------+-------------------------------+----------+---------+-------------------------------+--------------+-------------------------------------------+------------+

Si vous activez par la suite l’accès à la connexion pour cet utilisateur ou si Snowflake déverrouille l’accès à la connexion pour cet utilisateur, les jetons d’accès programmatique pour cet utilisateur restent désactivés. Pour réactiver les jetons, exécutez la commande ALTER USER … MODIFY PROGRAMMATIC ACCESS TOKEN (PAT) et définissez DISABLED sur FALSE. Par exemple :

ALTER USER example_user MODIFY PROGRAMMATIC ACCESS TOKEN example_token SET DISABLED = FALSE;
Copy

Accès à des informations sur un jeton d’accès programmatique à partir du secret

Si vous avez besoin d’informations sur un jeton d’accès programmatique, compte tenu du secret de ce jeton, appelez la fonction SYSTEM$DECODE_PAT. Vous pouvez utiliser cette fonction si le secret a été compromis et que vous souhaitez connaître l’utilisateur associé au jeton, le nom du jeton et l’état du jeton.

Par exemple :

SELECT SYSTEM$DECODE_PAT('abC...Y5Z');
Copy
+------------------------------------------------------------------------+
| SYSTEM$DECODE_PAT('☺☺☺...☺☺☺')                                         |
|------------------------------------------------------------------------|
| {"STATE":"ACTIVE","PAT_NAME":"MY_EXAMPLE_TOKEN","USER_NAME":"MY_USER"} |
+------------------------------------------------------------------------+

Meilleures pratiques

  • Si vous devez stocker un jeton d’accès programmatique, faites-le en toute sécurité (par exemple, en utilisant un mot de passe ou un gestionnaire de secrets).

  • Évitez d’exposer les jetons d’accès programmatique dans le code.

  • Limitez l’utilisation du jeton à un rôle spécifique lors de la génération du jeton.

  • Examinez régulièrement les jetons d’accès programmatique et faites les pivoter. Les utilisateurs peuvent définir le délai d’expiration lors de la génération du jeton, et les administrateurs peuvent réduire le délai d’expiration maximal pour tous les jetons afin d’encourager la rotation des jetons.

Limitations

  • Vous ne pouvez limiter un jeton d’accès programmatique à un rôle que lorsque vous générez le jeton. Une fois le jeton généré, vous ne pouvez pas modifier ou supprimer le rôle auquel il est limité.

  • Vous ne pouvez définir le délai d’expiration d’un jeton d’accès programmatique que lorsque vous générez le jeton. Une fois le jeton généré, vous ne pouvez pas modifier le délai d’expiration. Vous pouvez révoquer un jeton d’accès programmatique et générer un nouveau jeton avec un délai d’expiration différent.

  • Vous ne pouvez voir le secret d’un jeton d’accès programmatique que lorsque vous le créez. Après avoir créé un jeton d’accès programmatique, vous ne pouvez voir que les informations relatives au jeton et non son secret.

  • Les administrateurs peuvent lister tous les jetons d’accès programmatique pour un utilisateur donné, mais ils ne peuvent pas dresser la liste de tous les jetons d’accès programmatique pour un compte.

  • Vous ne pouvez pas récupérer un jeton d’accès programmatique une fois que vous l’avez révoqué.