Catégories :

Utilisateur et sécurité DDL (Intégrations de services tiers)

CREATE SECURITY INTEGRATION (External OAuth)

Crée une nouvelle intégration de sécurité External OAuth dans le compte ou remplace une intégration existante. Une intégration de sécurité External OAuth permet à un client d’utiliser un serveur d’autorisation tiers pour obtenir les jetons d’accès nécessaires pour interagir avec Snowflake.

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

Voir aussi :

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

Dans ce chapitre :

Syntaxe

CREATE [ OR REPLACE ] SECURITY INTEGRATION [IF NOT EXISTS]
  <name>
  TYPE = EXTERNAL_OAUTH
  ENABLED = { TRUE | FALSE }
  EXTERNAL_OAUTH_TYPE = { OKTA | AZURE | PING_FEDERATE | CUSTOM }
  EXTERNAL_OAUTH_ISSUER = '<string_literal>'
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = '<string_literal>' | ('<string_literal>', '<string_literal>' [ , ... ] )
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME | EMAIL_ADDRESS'
  [ EXTERNAL_OAUTH_JWS_KEYS_URL = '<string_literal>' ] -- For OKTA | PING_FEDERATE | CUSTOM
  [ EXTERNAL_OAUTH_JWS_KEYS_URL = '<string_literal>' | ('<string_literal>' [ , '<string_literal>' ... ] ) ] -- For Azure
  [ EXTERNAL_OAUTH_BLOCKED_ROLES_LIST = ( '{role_name}' [ , '{role_name}' , ... ] ) ]
  [ EXTERNAL_OAUTH_ALLOWED_ROLES_LIST = ( '{role_name}' [ , '{role_name}' , ... ] ) ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY = <public_key1> ]
  [ EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = <public_key2> ]
  [ EXTERNAL_OAUTH_AUDIENCE_LIST = ('<string_literal>') ]
  [ EXTERNAL_OAUTH_ANY_ROLE_MODE = DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE ]
  [ EXTERNAL_OAUTH_SCOPE_DELIMITER = '<string_literal>' ] -- Only for EXTERNAL_OAUTH_TYPE = CUSTOM

Paramètres requis

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 = EXTERNAL_OAUTH

Distingue l’intégration OAuth externe d’une intégration Snowflake OAuth.

ENABLED = TRUE | FALSE

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

  • TRUE permet l’exécution de l’intégration en fonction des paramètres spécifiés dans la définition de canal.

  • FALSE suspend l’intégration pour la maintenance. Toute intégration entre Snowflake et un service tiers échoue.

EXTERNAL_OAUTH_TYPE = OKTA | AZURE | PING_FEDERATE | CUSTOM

Indique que le serveur d’autorisation OAuth 2.0 doit être Okta, Microsoft Azure AD, Ping Identity PingFederate ou un serveur d’autorisation personnalisé OAuth 2.0.

EXTERNAL_OAUTH_ISSUER = 'string_literal'

Spécifie l’URL pour définir le serveur d’autorisation OAuth 2.0.

EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'string_literal' | ('string_literal', 'string_literal' [ , ... ] )

Spécifie la ou les revendications de jeton d’accès qui peuvent être utilisées pour mapper le jeton d’accès à un enregistrement utilisateur Snowflake.

Le type de données de la revendication doit être une chaîne ou une liste de chaînes.

EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'LOGIN_NAME | EMAIL_ADDRESS'

Indique quel attribut d’enregistrement utilisateur Snowflake doit être utilisé pour mapper le jeton d’accès à un enregistrement utilisateur Snowflake.

Paramètres facultatifs

EXTERNAL_OAUTH_JWS_KEYS_URL = 'string_literal'

Spécifie le point de terminaison à partir duquel télécharger les clés publiques ou les certificats pour valider un jeton d’accès External OAuth.

Cette syntaxe s’applique aux intégrations de sécurité où EXTERNAL_OAUTH_TYPE = OKTA | PING_FEDERATE | CUSTOM

EXTERNAL_OAUTH_JWS_KEYS_URL = 'string_literal' | ('string_literal' [ , 'string_literal' ... ] )

Spécifie le point de terminaison ou une liste de points de terminaison à partir desquels télécharger les clés publiques ou les certificats pour valider un jeton d’accès External OAuth. Le nombre maximum d’URLs qui peuvent être spécifiées dans la liste est 3.

Cette syntaxe s’applique aux intégrations de sécurité où EXTERNAL_OAUTH_TYPE = AZURE

EXTERNAL_OAUTH_RSA_PUBLIC_KEY = public_key1

Spécifie une clé publique RSA d’encodage Base64, sans les en-têtes -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY-----.

EXTERNAL_OAUTH_RSA_PUBLIC_KEY_2 = public_key2

Spécifie une deuxième clé publique RSA, sans les en-têtes -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY-----. Utilisée pour la rotation des clés.

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

Spécifie la liste des rôles qu’un client ne peut pas définir comme rôle principal. Un rôle de cette liste ne peut pas être utilisé lors de la création d’une session Snowflake basée sur le jeton d’accès du serveur d’autorisation External OAuth.

Par défaut, cette liste comprend les rôles ACCOUNTADMIN et SECURITYADMIN. Pour supprimer ces rôles à hauts privilèges de la liste, utilisez la commande ALTER ACCOUNT pour définir le paramètre de compte EXTERNAL_OAUTH_ADD_PRIVILEGED_ROLES_TO_BLOCKED_LIST sur FALSE.

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

Spécifie la liste des rôles que le client peut définir comme rôle principal.

Un rôle de cette liste peut être utilisé lors de la création d’une session Snowflake basée sur le jeton d’accès du serveur d’autorisation External OAuth.

Prudence

Ce paramètre prend en charge les rôles système ACCOUNTADMIN et SECURITYADMIN.

Faites preuve de prudence lorsque vous créez une session Snowflake avec ces rôles à hauts privilèges définis comme rôle principal.

EXTERNAL_OAUTH_AUDIENCE_LIST = ('string_literal')

Spécifie des valeurs supplémentaires qui peuvent être utilisées pour la validation de l’audience du jeton d’accès en plus de l’utilisation de l’URL du compte Snowflake du client (c’est-à-dire, <identificateur_de_compte>.snowflakecomputing.com). Pour plus d’informations, voir Identificateurs de compte.

Pour plus de détails sur cette propriété lorsque vous utilisez Power BI SSO, reportez-vous à Intégrations de sécurité Power BI SSO.

Actuellement, plusieurs URLs d’audience ne peuvent être spécifiées que pour les clients personnalisés External OAuth. Chaque URL doit être placée entre guillemets simples, avec une virgule séparant chaque URL. Par exemple :

external_oauth_audience_list = ('https://example.com/api/v2/', 'https://example.com')
EXTERNAL_OAUTH_ANY_ROLE_MODE = DISABLE | ENABLE | ENABLE_FOR_PRIVILEGE

Spécifie si le client ou l’utilisateur OAuth peut utiliser un rôle qui n’est pas défini dans le jeton d’accès OAuth. Notez qu’avec une intégration Power BI à Snowflake, l’utilisateur PowerBI ne peut pas changer de rôle même si ce paramètre est activé.

  • DISABLE n’autorise pas le client ou l’utilisateur OAuth à changer de rôle (c’est-à-dire use role <rôle>;). Par défaut.

  • ENABLE permet au client ou à l’utilisateur OAuth de changer de rôle.

  • ENABLE_FOR_PRIVILEGE permet au client ou à l’utilisateur OAuth de changer de rôle uniquement pour un client ou un utilisateur avec le privilège USE_ANY_ROLE. Ce privilège peut être accordé et révoqué à un ou plusieurs rôles disponibles pour l’utilisateur. Par exemple :

Notez que la valeur peut éventuellement être placée entre guillemets simples (par exemple, DISABLE ou 'DISABLE').

grant USE_ANY_ROLE on integration external_oauth_1 to role1;
revoke USE_ANY_ROLE on integration external_oauth_1 from role1;
EXTERNAL_OAUTH_SCOPE_DELIMITER = 'string_literal'

Spécifie le délimiteur de champ d’application dans le jeton d’autorisation.

Le délimiteur peut être un caractère unique quelconque, tel qu’une virgule (',') ou un espace (' ').

Cette propriété d’intégration de la sécurité est facultative et peut être utilisée pour remplacer la virgule de délimitation par défaut. Notez que cette propriété n’est prise en charge que pour les intégrations External OAuth personnalisées, où :

EXTERNAL_OAUTH_TYPE = CUSTOM

Contactez le support Snowflake pour activer cette propriété dans votre compte Snowflake.

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 Contrôle d’accès dans Snowflake.

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. Autrement dit, lorsque l’objet est remplacé, la suppression de l’ancien objet et la création du nouvel objet sont traitées en une seule transaction.

Exemples

Exemple avec AD Microsoft Azure

L’exemple suivant crée une intégration de sécurité External OAuth pour un serveur d’autorisation Microsoft Azure AD OAuth 2.0.

create security integration external_oauth_azure_1
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = '<AZURE_AD_JWS_KEY_ENDPOINT>'
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

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

DESC SECURITY INTEGRATION external_oauth_azure_1;

Exemple avec Okta

L’exemple suivant crée une intégration de sécurité External OAuth pour un serveur d’autorisation Okta OAuth 2.0.

create security integration external_oauth_okta_1
    type = external_oauth
    enabled = true
    external_oauth_type = okta
    external_oauth_issuer = '<OKTA_ISSUER>'
    external_oauth_jws_keys_url = '<OKTA_JWS_KEY_ENDPOINT>'
    external_oauth_token_user_mapping_claim = 'sub'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

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

DESC SECURITY INTEGRATION external_oauth_okta_1;
Revenir au début