CREATE SECURITY INTEGRATION (Snowflake OAuth)

Crée une nouvelle intégration de sécurité OAuth Snowflake dans le compte ou remplace une intégration existante. Une intégration de sécurité OAuth Snowflake permet aux clients qui prennent 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.

Pour des informations sur la création d’autres types d’intégrations de sécurité (par exemple, OAuth externe), voir CREATE SECURITY INTEGRATION.

Voir aussi :

ALTER SECURITY INTEGRATION (Snowflake OAuth) , DROP INTEGRATION , SHOW INTEGRATIONS

Syntaxe

Snowflake OAuth pour les applications partenaires

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = OAUTH
  OAUTH_CLIENT = <partner_application>
  OAUTH_REDIRECT_URI = '<uri>'  -- Required when OAUTH_CLIENT=LOOKER
  [ ENABLED = { TRUE | FALSE } ]
  [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ OAUTH_USE_SECONDARY_ROLES = IMPLICIT | NONE ]
  [ BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Snowflake OAuth pour les clients personnalisés

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = OAUTH
  OAUTH_CLIENT = CUSTOM
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' | 'PUBLIC'
  OAUTH_REDIRECT_URI = '<uri>'
  [ ENABLED = { TRUE | FALSE } ]
  [ OAUTH_ALLOW_NON_TLS_REDIRECT_URI = TRUE | FALSE ]
  [ OAUTH_ENFORCE_PKCE = TRUE | FALSE ]
  [ OAUTH_USE_SECONDARY_ROLES = IMPLICIT | NONE ]
  [ PRE_AUTHORIZED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ BLOCKED_ROLES_LIST = ( '<role_name>' [ , '<role_name>' , ... ] ) ]
  [ OAUTH_ISSUE_REFRESH_TOKENS = TRUE | FALSE ]
  [ OAUTH_REFRESH_TOKEN_VALIDITY = <integer> ]
  [ NETWORK_POLICY = '<network_policy>' ]
  [ OAUTH_CLIENT_RSA_PUBLIC_KEY = <public_key1> ]
  [ OAUTH_CLIENT_RSA_PUBLIC_KEY_2 = <public_key2> ]
  [ COMMENT = '<string_literal>' ]
Copy

Paramètres obligatoires (tous les clients OAuth)

name

Chaîne spécifiant l’identificateur (c’est-à-dire le nom) de l’intégration ; elle doit être unique sur votre compte.

De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (p. ex. "My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails, voir Exigences relatives à l’identificateur.

TYPE = OAUTH

Spécifiez le type d’intégration :

  • OAUTH : crée une interface de sécurité entre Snowflake et un client prenant en charge OAuth.

OAUTH_CLIENT = { CUSTOM | partner_application }

Spécifiez le type de client :

  • CUSTOM : crée une interface OAuth entre Snowflake et un client personnalisé.

  • partner_application : crée une interface OAuth entre Snowflake et une application partenaire. Valeurs prises en charge :

    • TABLEAU_DESKTOP : Tableau Desktop version 2019.1 ou supérieure.

    • TABLEAU_SERVER : Tableau Online ou Tableau Server. Si Tableau Server se connecte à Snowflake en utilisant la connectivité privée au service Snowflake, veillez à spécifier OAUTH_CLIENT = CUSTOM à la place.

    • LOOKER : l’outil de Business Intelligence Looker.

OAUTH_REDIRECT_URI = 'uri'

Spécifie l’URI du client. Une fois l’utilisateur authentifié, le navigateur Web est redirigé vers cette URI.

Ce paramètre est nécessaire lorsque OAUTH_CLIENT = LOOKER. Pour plus de détails, voir l’exemple dans la documentation Looker.

Paramètres obligatoires supplémentaires (clients personnalisés)

Requis uniquement lorsque OAUTH_CLIENT = CUSTOM (c’est-à-dire lors de la création d’une intégration pour un client personnalisé)

OAUTH_CLIENT_TYPE = { 'CONFIDENTIAL' | 'PUBLIC' }

Spécifie le type de client en cours d’enregistrement. Snowflake prend en charge les 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.

OAUTH_REDIRECT_URI = 'uri'

Spécifie l’URI du client. Une fois l’utilisateur authentifié, le navigateur Web est redirigé vers cette URI. L’URI doit être protégée par TLS (Transport Layer Security) sauf si le paramètre facultatif OAUTH_ALLOW_NON_TLS_REDIRECT_URI est défini sur TRUE.

Ne pas inclure les paramètres de requête envoyés avec l’URI de redirection dans la requête vers le point de terminaison d’autorisation. Par exemple, si la valeur du paramètre de requête redirect_uri dans la requête adressée au point de terminaison d’autorisation est https://www.example.com/connect?authType=snowflake, assurez-vous que le paramètre OAUTH_REDIRECT_URI est défini sur https://www.example.com/connect.

Paramètres facultatifs (tous les clients OAuth)

ENABLED = { TRUE | FALSE }

Spécifie s’il faut initier le fonctionnement de l’intégration ou le suspendre.

  • TRUE permet l’intégration.

  • FALSE désactive l’intégration de la maintenance. Toute intégration entre Snowflake et un service tiers échoue.

Par défaut : FALSE. Si une intégration de sécurité est créée sans définir ce paramètre sur TRUE, Snowflake définit le paramètre sur FALSE.

Paramètres facultatifs supplémentaires (applications partenaires)

Valable lorsque OAUTH_CLIENT = <application_partenaire> (c’est-à-dire lors de la création d’une intégration pour une application partenaire)

OAUTH_ISSUE_REFRESH_TOKENS = { TRUE | FALSE }

Booléen qui spécifie s’il faut autoriser le client à échanger un jeton d’actualisation contre un jeton d’accès lorsque le jeton d’accès actuel a expiré. Si défini sur FALSE, aucun jeton d’actualisation n’est émis, quelle que soit la valeur entière définie dans OAUTH_REFRESH_TOKEN_VALIDITY. Le consentement de l’utilisateur est révoqué et l’utilisateur doit confirmer l’autorisation à nouveau.

Par défaut : TRUE

Note

Si ce paramètre est défini sur FALSE et que l’intégration de sécurité a également ENABLED = TRUE, le flux OAuth Snowflake se répète, un jeton d’accès non configurable est émis et le jeton d’accès est valide pendant 600 secondes (10 minutes). Une fois ce jeton d’accès expiré, l’utilisateur doit à nouveau s’authentifier.

Si vous définissez ce paramètre sur FALSE et ENABLED = FALSE, aucun jeton n’est émis et l’intégration est désactivée.

OAUTH_REFRESH_TOKEN_VALIDITY = integer

Entier qui spécifie la durée pendant laquelle les jetons d’actualisation doivent être valides (en secondes). Cela peut être utilisé pour entraîner l’expiration périodique du jeton d’actualisation. Notez que OAUTH_ISSUE_REFRESH_TOKENS doit être défini sur TRUE.

Lorsqu’un jeton d’actualisation expire, l’application doit rediriger l’utilisateur à travers le flux d’autorisation pour obtenir un nouveau jeton d’actualisation.

Les valeurs minimale, maximale et par défaut prises en charge sont les suivantes :

Application

Minimum

Maximum

Par défaut

Tableau Desktop

60 (1 minute)

36000 (10 heures)

36000 (10 heures)

Tableau Server ou Tableau Online

60 (1 minute)

7776000 90 jours

7776000 90 jours

Client personnalisé

3600 (1 heure)

7776000 90 jours

7776000 90 jours

Si votre entreprise a besoin de réduire la valeur minimale ou d’augmenter la valeur maximale, demandez à votre administrateur de compte d’envoyer une demande au support Snowflake.

OAUTH_USE_SECONDARY_ROLES = { IMPLICIT | NONE }
  • IMPLICIT : les rôles secondaires définis par défaut dans les propriétés de l’utilisateur sont activés par défaut dans la session en cours d’ouverture.

  • NONE : les rôles secondaires par défaut ne sont pas pris en charge dans la session en cours d’ouverture.

Par défaut : NONE

BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Liste des rôles Snowflake séparés par des virgules qu’un utilisateur ne peut pas accepter explicitement d’utiliser après l’authentification (par exemple, 'BLOCKED_ROLES_LIST = ('custom_role1', 'custom_role2')).

Par défaut, Snowflake empêche les rôles ACCOUNTADMIN, ORGADMIN, et SECURITYADMIN de s’authentifier. Pour permettre à ces rôles privilèges de s’authentifier, utilisez la commande ALTER ACCOUNT pour définir le paramètre de compte OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST sur FALSE.

COMMENT = 'string_literal'

Spécifie un commentaire pour l’intégration.

Par défaut : aucune valeur

Paramètres facultatifs supplémentaires (clients personnalisés)

Valable lorsque OAUTH_CLIENT = CUSTOM (c’est-à-dire lors de la création d’une intégration pour un client personnalisé)

OAUTH_ALLOW_NON_TLS_REDIRECT_URI = { TRUE | FALSE }

Si TRUE, autorise le paramétrage de OAUTH_REDIRECT_URI sur une URI non protégée par TLS. Nous vous recommandons vivement d’utiliser TLS pour empêcher les redirections man-in-the-middle OAuth utilisées lors des attaques de hameçonnage.

Par défaut : FALSE

OAUTH_ENFORCE_PKCE = { TRUE | FALSE }

Booléen qui spécifie si la clé de vérification pour l’échange de code (PKCE) doit être requise pour l’intégration.

Par défaut, PKCE est facultatif et n’est appliqué que si les paramètres code_challenge et code_challenge_method sont tous deux inclus dans l’URL du point de terminaison d’autorisation. Cependant, nous conseillons vivement à votre client d’exiger PKCE pour toutes les autorisations afin de sécuriser davantage le flux de données OAuth. Pour plus d’informations, voir Configurer Snowflake OAuth pour les clients personnalisés.

Par défaut : FALSE

OAUTH_USE_SECONDARY_ROLES = { IMPLICIT | NONE }
  • IMPLICIT : les rôles secondaires définis par défaut dans les propriétés de l’utilisateur sont activés par défaut dans la session en cours d’ouverture.

  • NONE : les rôles secondaires par défaut ne sont pas pris en charge dans la session en cours d’ouverture.

Par défaut : NONE

PRE_AUTHORIZED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Liste des rôles Snowflake séparés par des virgules qu’un utilisateur n’a pas besoin d’accepter explicitement d’utiliser après l’authentification (par exemple PRE_AUTHORIZED_ROLES_LIST = ('custom_role1', 'custom_role2')). Notez que les rôles ACCOUNTADMIN, ORGADMIN et SECURITYADMIN ne peuvent pas être inclus dans cette liste.

Note

Ce paramètre est pris en charge pour les clients confidentiels uniquement.

BLOCKED_ROLES_LIST = ( 'role_name' [ , 'role_name' , ... ] )

Liste des rôles Snowflake séparés par des virgules qu’un utilisateur ne peut pas accepter explicitement d’utiliser après l’authentification (par exemple, BLOCKED_ROLES_LIST = ('custom_role1', 'custom_role2')).

Notez que les rôles ACCOUNTADMIN, ORGADMIN, et SECURITYADMIN sont inclus par défaut dans cette liste. Toutefois, si ces rôles doivent être supprimés pour votre compte, demandez à votre administrateur de compte d’envoyer une demande au support Snowflake.

OAUTH_ISSUE_REFRESH_TOKENS = { TRUE | FALSE }

Booléen qui spécifie s’il faut autoriser le client à échanger un jeton d’actualisation contre un jeton d’accès lorsque le jeton d’accès actuel a expiré. Si défini sur FALSE, aucun jeton d’actualisation n’est émis. Le consentement de l’utilisateur est révoqué et l’utilisateur doit confirmer l’autorisation à nouveau.

Par défaut : TRUE

OAUTH_REFRESH_TOKEN_VALIDITY = integer

Entier qui spécifie la durée pendant laquelle les jetons d’actualisation doivent être valides (en secondes). Cela peut être utilisé pour entraîner l’expiration périodique du jeton d’actualisation. Notez que OAUTH_ISSUE_REFRESH_TOKENS doit être défini sur TRUE.

Notez que si votre entreprise souhaite que les valeurs minimales ou maximales soient abaissées ou augmentées, respectivement, demandez à votre administrateur de compte d’envoyer une demande au support Snowflake.

Valeurs

86400 (1 jour) à 7776000 (90 jours)

Par défaut

7776000

NETWORK_POLICY = 'network_policy'

Spécifie une stratégie réseau existante active pour votre compte. La stratégie réseau restreint la liste des adresses IP des utilisateurs lors de l’échange d’un code d’autorisation contre un jeton d’accès ou d’actualisation et lors de l’utilisation d’un jeton d’actualisation pour obtenir un nouveau jeton d’accès. Si ce paramètre n’est pas défini, la politique réseau du compte (le cas échéant) est utilisée à la place.

OAUTH_CLIENT_RSA_PUBLIC_KEY = public_key1

Spécifie une clé publique RSA.

OAUTH_CLIENT_RSA_PUBLIC_KEY_2 = public_key2

Spécifie une seconde clé publique RSA. Utilisée pour la rotation des clés.

COMMENT = 'string_literal'

Spécifie un commentaire pour l’intégration.

Par défaut : aucune valeur

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

Un rôle utilisé pour exécuter cette commande SQL doit avoir les privilèges suivants définis au minimum ainsi :

Privilège

Objet

Remarques

CREATE INTEGRATION

Compte

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.

Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.

Notes sur l’utilisation

  • Concernant les métadonnées :

    Attention

    Les clients doivent s’assurer qu’aucune donnée personnelle (autre que pour un objet utilisateur), donnée sensible, donnée à exportation contrôlée ou autre donnée réglementée n’est saisie comme métadonnée lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de métadonnées dans Snowflake.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.

Exemples

Exemple Tableau Desktop

L’exemple suivant crée une intégration OAuth avec les paramètres par défaut :

CREATE SECURITY INTEGRATION td_oauth_int1
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_desktop;
Copy

Afficher les paramètres d’intégration à l’aide de DESCRIBE INTEGRATION :

DESC SECURITY INTEGRATION td_oauth_int1;
Copy

L’exemple suivant crée une intégration OAuth avec des jetons d’actualisation expirant après 10 heures (36 000 secondes). L’intégration empêche les utilisateurs de démarrer une session avec SYSADMIN comme rôle actif :

CREATE SECURITY INTEGRATION td_oauth_int2
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_desktop
  OAUTH_REFRESH_TOKEN_VALIDITY = 36000
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy

Exemple Tableau Online ou Tableau Server

L’exemple suivant crée une intégration OAuth avec les paramètres par défaut :

CREATE SECURITY INTEGRATION ts_oauth_int1
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_server;
Copy

Afficher les paramètres d’intégration à l’aide de DESCRIBE INTEGRATION :

DESC SECURITY INTEGRATION ts_oauth_int1;
Copy

L’exemple suivant crée une intégration OAuth avec des jetons d’actualisation expirant après un jour (86 400 secondes). L’intégration empêche les utilisateurs de démarrer une session avec SYSADMIN comme rôle actif :

CREATE SECURITY INTEGRATION ts_oauth_int2
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = tableau_server
  OAUTH_REFRESH_TOKEN_VALIDITY = 86400
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy

Exemple de client personnalisé

L’exemple suivant crée une intégration OAuth qui utilise l’authentification par paire de clés. L’intégration permet d’actualiser les jetons, qui expirent après 1 jour (86 400 secondes). L’intégration empêche les utilisateurs de démarrer une session avec SYSADMIN comme rôle actif :

CREATE SECURITY INTEGRATION oauth_kp_int
  TYPE = oauth
  ENABLED = true
  OAUTH_CLIENT = custom
  OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
  OAUTH_REDIRECT_URI = 'https://localhost.com'
  OAUTH_ISSUE_REFRESH_TOKENS = TRUE
  OAUTH_REFRESH_TOKEN_VALIDITY = 86400
  PRE_AUTHORIZED_ROLES_LIST = ('MYROLE')
  BLOCKED_ROLES_LIST = ('SYSADMIN');
Copy