Configurer Okta pour OAuth externe

Ce chapitre décrit comment configurer Snowflake en tant que ressource OAuth et Okta en tant que serveur d’autorisation externe OAuth pour permettre un accès automatique sécurisé aux données Snowflake.

Dans ce chapitre :

Procédure de configuration

Les cinq étapes suivantes supposent que votre environnement n’a rien configuré concernant les serveurs d’autorisation OAuth Okta, les clients OAuth, les champs d’application et les métadonnées nécessaires.

Les informations des étapes 1-3 seront utilisées pour créer une intégration de sécurité dans Snowflake.

Si vous avez déjà un serveur d’autorisation et un client Okta configurés, il n’est pas nécessaire de suivre toutes les étapes ci-dessous. Parcourez plutôt les quatre étapes suivantes et vérifiez que vous pouvez obtenir les informations souhaitées, créer des champs d’application, affecter des champs d’application à une ou plusieurs politiques et accéder aux métadonnées.

Si vous n’avez pas un serveur et un client d’autorisation Okta OAuth configurés, suivez les cinq étapes ci-dessous.

Important

Les étapes de ce chapitre sont un exemple représentatif de la configuration d’Okta pour OAuth externe.

Vous pouvez configurer Okta sur n’importe quel état souhaité et utiliser n’importe quel flux OAuth à condition que vous puissiez obtenir les informations nécessaires pour l” intégration de la sécurité (dans ce chapitre).

Notez que les étapes suivantes servent de guide pour obtenir les informations nécessaires à la création de l’intégration de sécurité dans Snowflake.

Assurez-vous de consulter vos politiques de sécurité internes concernant la configuration d’un serveur d’autorisation pour vous assurer que votre organisation respecte toutes les réglementations et exigences de conformité nécessaires.

Les étapes 1-3 sont tirées de la documentation Okta sur les serveurs d’autorisation. Pour plus d’informations sur la façon dont Okta définit ses termes, son interface utilisateur et les options relatives aux serveurs d’autorisation, consultez les guides Okta suivants :

Étape 1 : Créer un client compatible OAuth à utiliser avec Snowflake

  1. Accédez à la console d’administration Okta.

  2. Cliquez sur Applications.

  3. Cliquez sur Add Application.

  4. Cliquez sur Create New App.

    • Pour Platform, sélectionnez Native App.

  5. Cliquez sur Create.

  6. Saisissez un nom pour l’application.

  7. Dans la zone Login redirect URIs, ajoutez l’URL complète du compte Snowflake (c’est-à-dire https://<compte>.< région>.snowflakecomputing.com).

  8. Cliquez sur Save.

  9. Depuis New Applications dans l’interface General, cliquez sur Edit.

  10. Cochez Refresh Token et Resource Owner Password.

  11. Cliquez sur Save.

  12. Cliquez sur le bouton Edit à côté de Client Credentials.

  13. Sélectionnez l’option Use Client Authentication.

  14. Cliquez sur Save.

  15. Dans le conteneur Client Credentials, enregistrez les ClientID et Secret. Ces deux valeurs seront appelées <OAUTH_CLIENT_ID> et <OAUTH_CLIENT_SECRET>, respectivement dans les étapes suivantes.

Étape 2 : Créer un serveur d’autorisation OAuth dans Snowflake

  1. Accédez à la console d’administration Okta.

  2. Dans le menu Security, cliquez sur API.

  3. Cliquez sur Authorization Servers.

  4. Cliquez sur Add Authorization Server.

  5. Entrez un nom.

  6. Entrez le Snowflake Account URL comme valeur Audience.

    • Le public doit être unique dans le répertoire de votre organisation. Par exemple, https://<compte>.<région>.snowflakecomputing.com. Cette valeur sera connue sous le nom de <SNOWFLAKE_AUDIENCE> dans les étapes suivantes.

  7. Cliquez sur Save.

Effectuez les étapes suivantes pour le serveur d’autorisation nouvellement ajouté.

  1. Copiez la valeur Issuer. Son format devrait ressembler à https://dev-390798.oktapreview.com/oauth2/auslh9j9vf9ej7NfT0h7. Cette valeur sera connue sous le nom de <OKTA_ISSUER> dans les étapes suivantes.

  2. Cliquez sur Scopes.

  3. Cliquez sur Add Scope.

  4. Pour ajouter un rôle Snowflake en tant que champ d’application, entrez le champ d’application en ayant le nom du rôle Snowflake comme préfixe session:role: (par exemple : pour le rôle Analyste Snowflake, entrez session:role:analyst).

  5. Cliquez sur Create.

  6. Cliquez sur Access Policies.

  7. Cliquez sur Add Policy.

  8. Saisissez un nom et une description pour la politique. Attribuez-les au client créé précédemment et cliquez sur Create.

  9. Dans la nouvelle politique d’accès ajoutée, cliquez sur Add Rule.

  10. Saisissez un nom de règle.

  11. Sélectionnez le Grant Types autorisé. Vous devez sélectionner Resource Owner Password et Client Credentials ainsi que tous ceux qui correspondent aux politiques de votre organisation.

  12. Pour les champs d’application, vous pouvez sélectionner l’un des champs d’application ou sélectionner les champs d’application souhaités créés précédemment que les clients affectés à cette politique pourront demander (y compris accès_horsligne pour actualiser les jetons si nécessaire). Configurez tous les paramètres supplémentaires selon vos besoins.

  13. Cliquez sur Create Rule.

Étape 3 : Recueillir des informations sur Okta

  1. Accédez à la console d’administration Okta.

  2. Dans le menu Security, cliquez sur API.

  3. Cliquez sur Authorization Servers.

  4. Cliquez sur le serveur d’autorisation pour la ressource Snowflake.

  5. Dans l’onglet Settings, copiez la valeur Issuer. Cette valeur sera connue sous le nom de <OKTA_ISSUER> dans les étapes suivantes. Son format devrait ressembler à https://dev-111111.oktapreview.com/oauth2/auslh9j9vf9ej7NfT0h7.

Dans le document Metadata :

  1. Copiez la valeur Metadata URI , ouvrez un onglet de navigateur et collez l’URL dans la barre d’adresses.

  2. Vous devriez voir le texte JSON dans le navigateur. Vous pouvez travailler avec ce texte dans un éditeur de texte ou dans le navigateur lui-même.

  3. Recherchez le paramètre "jwks_uri" et copiez sa valeur. Son format devrait ressembler à https://dev-111111.oktapreview.com/oauth2/auslh9j9vf9ej7NfT0h7/v1/keys. Ce point de terminaison sera appelé <OKTA_JWS_KEY_ENDPOINT> dans les étapes suivantes.

  4. Recherchez le paramètre "token_endpoint" et copiez sa valeur. Son format devrait ressembler à https://dev-111111.oktapreview.com/oauth2/auslh9j9vf9ej7NfT0h7/v1/token. Ce point de terminaison sera appelé <OKTA_OAUTH_TOKEN_ENDPOINT> dans les étapes suivantes.

Étape 4 : Créer un serveur d’autorisation OAuth dans Snowflake

Cette étape crée une intégration de sécurité dans Snowflake. L’intégration de sécurité garantit que Snowflake peut communiquer en toute sécurité avec Okta, valide les jetons d’Okta et fournit l’accès aux données Snowflake appropriées aux utilisateurs en fonction du rôle d’utilisateur associé au jeton OAuth.

Pour plus d’informations, voir CREATE SECURITY INTEGRATION.

Important

Seuls les administrateurs de compte (c’est-à-dire les utilisateurs dotés du rôle ACCOUNTADMIN) ou un rôle disposant du privilège global CREATE INTEGRATION peuvent exécuter cette commande SQL.

Les valeurs des paramètres d’intégration de sécurité sont sensibles à la casse et les valeurs que vous insérez dans l’intégration de sécurité doivent correspondre à ces valeurs dans votre environnement. Si la casse ne correspond pas, il est possible que le jeton d’accès ne soit pas validé, ce qui entraînera l’échec d’une tentative d’authentification.

Créer un serveur d’autorisation OAuth avec des audiences

Si la valeur Audience entrée lors de la création de l’application de ressources Snowflake OAuth dans Okta n’est pas l’URL du compte Snowflake (c’est-à-dire <compte>.< région>.snowflakecomputing.com), ajoutez le paramètre external_oauth_audience_list à l’intégration de sécurité et remplacez <SNOWFLAKE_AUDIENCE> par l’URL de votre compte Snowflake.

create security integration external_oauth_okta_2
    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_audience_list = ('<SNOWFLAKE_AUDIENCE>')
    external_oauth_token_user_mapping_claim = 'sub'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

Modification de votre intégration de sécurité externe OAuth

Vous pouvez mettre à jour votre intégration de sécurité externe OAuth en exécutant une instruction ALTER sur l’intégration de sécurité.

Pour plus d’informations, voir ALTER SECURITY INTEGRATION.

Utilisation du rôle ANY avec un serveur externe OAuth

Dans l’étape de configuration visant à créer une intégration de sécurité dans Snowflake, le jeton d’accès OAuth inclut la définition du champ d’application. Par conséquent, au moment de l’exécution, l’utilisation de l’intégration de sécurité externe OAuth ne permet ni au client OAuth ni à l’utilisateur d’utiliser un rôle non défini dans le jeton d’accès OAuth.

Après avoir validé le jeton d’accès et créé une session, le rôle ANY peut permettre au client et à l’utilisateur OAuth de décider de son rôle. Si nécessaire, le client ou l’utilisateur peut basculer vers un rôle différent de celui défini dans le jeton d’accès OAuth.

Pour configurer le rôle ANY, définissez le champ d’application en tant que SESSION:ROLE-ANY et configurez l’intégration de la sécurité avec le paramètre external_oauth_any_role_mode. Ce paramètre peut avoir trois valeurs de chaîne possibles :

  • 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 :

    grant USE_ANY_ROLE on integration external_oauth_1 to role1;
    
    revoke USE_ANY_ROLE on integration external_oauth_1 from role1;
    

Définissez l’intégration de la sécurité comme suit :

create security integration external_oauth_1
    type = external_oauth
    enabled = true
    external_oauth_any_role_mode = 'ENABLE'
    ...

Utilisation de politiques réseau avec OAuth externe

Actuellement, les politiques réseau ne peuvent pas être ajoutées à votre intégration de sécurité OAuth externe.

Si votre cas d’utilisation nécessite OAuth et une politique réseau Snowflake, utilisez Snowflake OAuth.

Pour plus d’informations, voir OAuth et politiques réseau.

Procédure de test

Dans le cadre du test de OAuth lors de l’utilisation d’Okta en tant que serveur d’autorisation, vous devez :

  1. Vérifier que l’utilisateur de test existe dans Okta et possède un mot de passe.

  2. Vérifier que l’utilisateur de test existe dans Snowflake avec la valeur d’attribut login_name définie sur <OKTA_USER_USERNAME>

  3. Enregistrer un client OAuth.

  4. Autorisez le client OAuth à faire une demande POST au point de terminaison de jeton Okta comme suit :

    • Type d’autorisation défini sur Propriétaire de la ressource

    • En-tête d’autorisation de base HTTP contenant le clientID et le secret

    • Données FORM contenant le nom d’utilisateur et le mot de passe de l’utilisateur

    • Inclure les champs d’application

L’exemple de commande demande à l’analyste et suppose que session:role:analyst a été défini dans Okta > OAuth App Resource.

Voici un exemple pour obtenir un jeton d’accès en utilisant cURL.

curl -X POST -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
  --user <OAUTH_CLIENT_ID>:<OAUTH_CLIENT_SECRET> \
  --data-urlencode "username=<OKTA_USER_USERNAME>" \
  --data-urlencode "password=<OKTA_USER_PASSWORD>" \
  --data-urlencode "grant_type=password" \
  --data-urlencode "scope=session:role:analyst" \
  <OKTA_OAUTH_TOKEN_ENDPOINT>

Connexion à Snowflake via OAuth externe

Après avoir configuré votre intégration de sécurité et obtenu votre jeton d’accès, vous pouvez vous connecter à Snowflake en utilisant l’un des éléments suivants :

Remarques :

  • Il est nécessaire de définir le paramètre authenticator sur oauth et le paramètre token sur external_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 token.

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

Par exemple, si vous utilisez le connecteur Python, définissez la chaîne de connexion comme indiqué ci-dessous.

ctx = snowflake.connector.connect(
   user="<username>",
   host="<hostname>",
   account="<account_name>",
   authenticator="oauth",
   token="<external_oauth_access_token>",
   warehouse="test_warehouse",
   database="test_db",
   schema="test_schema"
)

Vous pouvez maintenant utiliser OAuth externe pour vous connecter à Snowflake en toute sécurité.