Configurer Microsoft Azure AD pour OAuth externe¶
Ce chapitre décrit comment configurer Snowflake en tant que ressource OAuth et Azure AD en tant que serveur d’autorisation OAuth externe pour permettre un accès automatique sécurisé aux données Snowflake.
Dans ce chapitre :
Procédure de configuration¶
Les quatre étapes suivantes supposent que votre environnement n’a rien configuré concernant les serveurs d’autorisation Azure AD OAuth, 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 et un client d’autorisation Azure AD configurés, il n’est pas nécessaire de suivre toutes les étapes ci-dessous. Parcourez plutôt les trois é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 Azure AD OAuth configurés, suivez les quatre étapes ci-dessous.
Important
Ces étapes de ce chapitre sont un exemple représentatif sur la façon de configurer Azure AD pour OAuth externe.
Vous pouvez configurer Azure AD 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.
Les étapes 1-3 sont tirées de la documentation Azure AD sur OAuth 2.0 et l’authentification. Pour plus d’informations sur la façon dont Microsoft définit ses termes, son interface utilisateur et les options relatives à OAuth 2.0 et à l’authentification, consultez les guides Azure AD suivants :
Déterminer le flux OAuth dans Azure AD¶
Azure AD prend en charge deux flux OAuth différents dans lesquels un client OAuth peut obtenir un jeton d’accès.
Le serveur d’autorisation peut accorder au client OAuth un jeton d’accès au nom de l’utilisateur.
Le serveur d’autorisation peut accorder au client OAuth un jeton d’accès pour le client OAuth lui-même.
Dans le premier flux, l’identité du jeton d’accès fait référence à l’utilisateur. Dans le deuxième flux, l’identité du jeton d’accès fait référence au client OAuth.
Microsoft Azure AD n’autorise pas le même format de rôle pour chacun de ces deux flux OAuth. Le format de rôle à utiliser dépend du flux OAuth utilisé. Après avoir déterminé le flux OAuth à utiliser :
Effectuez la sous-étape 10 ou 11 dans Configurer la ressource OAuth dans Azure AD.
Effectuez la sous-étape 13 ou 14 dans Créer un client OAuth dans Azure AD.
Configurer la ressource OAuth dans Azure AD¶
Accédez au Microsoft Azure Portal et authentifiez-vous.
Accédez à Azure Active Directory.
Cliquez sur App Registrations.
Cliquez sur New Registration.
Entrez
Snowflake OAuth Resource
, ou une valeur similaire à Name.Vérifiez que Supported account types est défini sur Single Tenant.
Cliquez sur Register.
Cliquez sur Expose an API.
Cliquez sur le lien Set à côté de Application ID URI pour définir le
Application ID URI
.Important
Le
Application ID URI
doit être unique dans le répertoire de votre organisation, tel quehttps://your.company.com/4d2a8c2b-a5f4-4b86-93ca-294185f45f2e
. Cette valeur sera appelée<SNOWFLAKE_APPLICATION_ID_URI>
dans les étapes de configuration suivantes.Pour obtenir de l’aide sur l’obtention de l’ID d’URI de votre application, veuillez contacter votre administrateur interne Microsoft Azure AD.
Si l’URI ID de l’application n’est pas utilisé, il est nécessaire de créer une intégration de sécurité avec les audiences à l’aide de l’URL du compte Snowflake (c’est-à-dire
<identificateur_de_compte>.snowflakecomputing.com
). Pour plus d’informations, voir :L’intégration d’audience dans Créer une intégration de sécurité dans Snowflake.
Pour ajouter un rôle Snowflake en tant que champ d’application OAuth pour les flux OAuth où le client automatique agit au nom d’un utilisateur, cliquez sur Add a scope pour ajouter un champ d’application représentant le rôle Snowflake.
Entrez le champ d’application en ayant le nom du rôle Snowflake avec le préfixe
session:scope:
. Par exemple, pour le rôle Snowflake Analyst, entrezsession:scope:analyst
.Sélectionnez qui peut consentir.
Entrez un display name pour le champ d’application (par exemple : Administrateur du compte).
Entrez un description pour le champ d’application (par exemple : peut administrer le compte Snowflake).
Cliquez sur Add Scope.
Pour ajouter un rôle Snowflake en tant que rôle pour les flux OAuth où le client automatique demande un jeton d’accès pour lui-même :
Cliquez sur Manifest.
Recherchez l’élément
appRoles
.Saisissez un App Role avec les paramètres suivants.
Réglage
Description
allowedMemberTypes
Application.
description
Une description du rôle.
displayName
Un nom convivial à afficher pour les utilisateurs.
id
Un ID unique. Vous pouvez utiliser la fonction
[System.Guid]::NewGuid()
à partir de PowerShell pour générer un ID unique si nécessaire.isEnabled
Définissez sur :
true
.lang
La langue. Définissez sur :
null
.origin
Définissez sur :
Application
.value
Définissez le nom du rôle Snowflake avec le préfixe
session:role:
. . Pour le rôle Analyste, entrezsession:role:analyst
.Le App Role se manifeste comme suit.
"appRoles":[ { "allowedMemberTypes": [ "Application" ], "description": "Account Administrator.", "displayName": "Account Admin", "id": "3ea51f40-2ad7-4e79-aa18-12c45156dc6a", "isEnabled": true, "lang": null, "origin": "Application", "value": "session:role:analyst" } ]
Cliquez sur Save.
Créer un client OAuth dans Azure AD¶
Accédez au Microsoft Azure Portal et authentifiez-vous.
Accédez à Azure Active Directory.
Cliquez sur App Registrations.
Cliquez sur New Registration.
Entrez un nom pour le client tel que
Snowflake OAuth Client
.Vérifiez que les types de comptes pris en charge sont définis sur Client unique.
Cliquez sur Register.
Dans la section Overview, copiez le
ClientID
du champ Application (client) ID . Ce sera connu sous le nom de<OAUTH_CLIENT_ID>
dans les étapes suivantes.Cliquez sur Certificates & secrets puis sur New client secret.
Ajoutez une description du secret.
Sélectionnez never expire. À des fins de test, sélectionnez des secrets qui n’expirent jamais.
Cliquez sur Add. Copiez le secret. Ce sera connu sous le nom de
<OAUTH_CLIENT_SECRET>
dans les étapes suivantes.Pour les clients automatiques qui demanderont un jeton d’accès au nom d’un utilisateur, configurez les autorisations déléguées pour les applications comme suit.
Cliquez sur API Permissions.
Cliquez sur Add Permission.
Cliquez sur My APIs.
Cliquez sur la Snowflake OAuth Resource que vous avez créée dans Configurer la ressource OAuth dans Azure AD.
Cliquez sur la zone Delegated Permissions.
Vérifiez les autorisations relatives aux champs d’application définis dans l’application que vous souhaitez accorder à ce client.
Cliquez sur Add Permissions.
Cliquez sur le bouton Grant Admin Consent pour accorder les autorisations au client. Notez qu’à des fins de test, les autorisations sont configurées de cette façon. Cependant, dans un environnement de production, l’octroi d’autorisations de cette manière n’est pas recommandé.
Cliquez sur Yes.
Pour les clients automatiques qui demanderont un jeton d’accès pour eux-mêmes, configurez API permissions for Applications comme suit.
Cliquez sur API Permissions.
Cliquez sur Add Permission.
Cliquez sur My APIs.
Cliquez sur la Snowflake OAuth Resource que vous avez créée dans Configurer la ressource OAuth dans Azure AD.
Cliquez sur Application Permissions.
Vérifiez les Permission liées aux rôles définis manuellement dans le
Manifest
de l’application que vous souhaitez accorder à ce client.Cliquez sur Add Permissions.
Cliquez sur le bouton Grant Admin Consent pour accorder les autorisations au client. Notez qu’à des fins de test, les autorisations sont configurées de cette façon. Cependant, dans un environnement de production, l’octroi d’autorisations de cette manière n’est pas recommandé.
Cliquez sur Yes.
Recueillir les informations Azure AD pour Snowflake¶
Accédez au Microsoft Azure Portal et authentifiez-vous.
Accédez à Azure Active Directory.
Cliquez sur App Registrations.
Cliquez sur la Snowflake OAuth Resource que vous avez créée dans Configurer la ressource OAuth dans Azure AD.
Cliquez sur Endpoints dans l’interface Overview.
Sur le côté droit, copiez le OAuth 2.0 token endpoint (v2) et notez les URLs pour OpenID Connect metadata et Federation Connect metadata.
Le OAuth 2.0 token endpoint (v2) sera appelé le
<AZURE_AD_OAUTH_TOKEN_ENDPOINT>
dans les étapes de configuration suivantes. Le point de terminaison doit être similaire àhttps://login.microsoftonline.com/90288a9b-97df-4c6d-b025-95713f21cef9/oauth2/v2.0/token
.Pour le OpenID Connect metadata, ouvrez-les dans une nouvelle fenêtre de navigateur.
Recherchez le paramètre
"jwks_uri"
et copiez sa valeur.Cette valeur de paramètre sera appelée
<AZURE_AD_JWS_KEY_ENDPOINT>
dans les étapes de configuration suivantes. Le point de terminaison doit être similaire àhttps://login.microsoftonline.com/90288a9b-97df-4c6d-b025-95713f21cef9/discovery/v2.0/keys
.
Pour le Federation metadata document, ouvrez l’URL dans une nouvelle fenêtre de navigateur.
Recherchez le paramètre
"entityID"
dans leXML Root Element
et copiez sa valeur.Cette valeur de paramètre sera appelée
<AZURE_AD_ISSUER>
dans les étapes de configuration suivantes. La valeur entityID doit être similaire àhttps://sts.windows.net/90288a9b-97df-4c6d-b025-95713f21cef9/
.
Créer une intégration de sécurité dans Snowflake¶
Cette étape implique la création d’une intégration de sécurité dans Snowflake pour garantir que Snowflake peut communiquer avec Microsoft Azure AD en toute sécurité, valider les jetons depuis Azure AD et fournir l’accès aux données Snowflake approprié aux utilisateurs en fonction du rôle d’utilisateur associé au jeton OAuth.
Choisissez l’intégration de sécurité qui répond le mieux à votre cas d’utilisation et à vos besoins de configuration. Si votre intégration est uniquement basée sur la configuration précédente, utilisez la première intégration de sécurité. Pour plus d’informations, voir CREATE SECURITY INTEGRATION.
Important
Si vous essayez de créer une intégration de sécurité pour Microsoft Power BI, suivez les instructions de configuration dans SSO Power BI pour Snowflake.
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.
Vérifiez que toutes les valeurs correspondent exactement. Par exemple, si la valeur de l’émetteur ne se termine pas par une barre oblique inverse et que l’intégration de sécurité est créée avec une barre oblique inversée à la fin de l’URL, un message d’erreur se produit. Il serait alors nécessaire de supprimer l’objet d’intégration de sécurité en utilisant DROP INTEGRATION puis de recréer l’objet avec la valeur d’émetteur correcte en utilisant CREATE SECURITY INTEGRATION.
Créer une intégration de sécurité pour Azure AD
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';
Créer une intégration de sécurité avec des audiences
Le paramètre
external_oauth_audience_list
de l’intégration de sécurité doit correspondre à l” Application ID URI que vous avez spécifiée lors de la configuration d’Azure AD.create security integration external_oauth_azure_2 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_audience_list = ('<SNOWFLAKE_APPLICATION_ID_URI>') external_oauth_token_user_mapping_claim = 'upn' 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 (External OAuth).
Utilisation du rôle ANY avec External 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-à-direuse 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ègeUSE_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 rôles secondaires avec External OAuth¶
La portée souhaitée pour le rôle primaire est transmise dans le jeton externe : soit le rôle par défaut de l’utilisateur (session:role-any
), soit un rôle spécifique qui a été accordé à l’utilisateur (session:role:<nom_rôle>
).
Par défaut, Snowflake n’active pas les rôles secondaires par défaut pour un utilisateur (c’est-à-dire le DEFAULT_SECONDARY_ROLES) de la session.
Pour activer les rôles secondaires par défaut pour un utilisateur dans une session et autoriser l’exécution de la commande USE SECONDARY ROLES tout en utilisant External OAuth, effectuez les étapes suivantes :
Configurez l’intégration de la sécurité pour la connexion. Définissez la valeur du paramètre EXTERNAL_OAUTH_ANY_ROLE_MODE comme ENABLE ou ENABLE_FOR_PRIVILEGE lorsque vous créez l’intégration de sécurité (à l’aide de CREATE SECURITY INTEGRATION) ou ultérieurement (à l’aide de ALTER SECURITY INTEGRATION).
Configurez le serveur d’autorisation pour passer la valeur statique de
session:role-any
dans l’attribut scope du jeton. Pour plus d’informations sur le paramètre de scope, voir Présentation de External OAuth.
Utilisation de la redirection des clients avec External OAuth¶
Snowflake prend en charge l’utilisation de la redirection des clients avec External OAuth, y compris l’utilisation de la redirection des clients et OAuth avec les clients Snowflake pris en charge.
Pour plus d’informations, voir Rediriger les connexions du client.
Utilisation de politiques réseau avec External OAuth¶
Actuellement, les politiques réseau ne peuvent pas être ajoutées à votre intégration de sécurité OAuth externe. Cependant, vous pouvez toujours mettre en œuvre des politiques de réseau qui s’appliquent largement à l’ensemble du compte Snowflake.
Si votre cas d’utilisation nécessite une politique réseau spécifique à l’intégration de sécurité OAuth, utilisez Snowflake OAuth. Cette approche permet à la politique réseau OAuth de Snowflake d’être distincte des autres politiques réseau qui peuvent s’appliquer au compte Snowflake.
Pour plus d’informations, voir Politiques réseau.
Utilisation de la réplication avec External OAuth¶
Snowflake prend en charge la réplication et le basculement/la restauration de l’intégration de sécurité External OAuth d’un compte source à un compte cible.
Pour plus de détails, voir Réplication des intégrations de sécurité et des politiques réseau sur plusieurs comptes.
Procédure de test¶
Dans le cadre du test de OAuth lors de l’utilisation d’Azure AD en tant que serveur d’autorisation, vous devez :
Vérifier que l’utilisateur de test existe dans Azure AD et possède un mot de passe.
Vérifier que l’utilisateur de test existe dans Snowflake avec la valeur d’attribut
login_name
définie sur<AZURE_AD_USER_USERNAME>
Accorder le rôle SYSADMIN à cet utilisateur.
Enregistrer un client OAuth.
Autoriser le client OAuth à faire une demande POST au point de terminaison du jeton Azure AD 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
Voici un exemple pour obtenir un jeton d’accès en utilisant cURL. Notez que la portée doit être entièrement qualifiée, y compris l’URI de l’application Azure (par exemple, scope=https://example.com/wergheroifvj25/session:role-any
).
curl -X POST -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
--data-urlencode "client_id=<OAUTH_CLIENT_ID>" \
--data-urlencode "client_secret=<OAUTH_CLIENT_SECRET>" \
--data-urlencode "username=<AZURE_AD_USER>" \
--data-urlencode "password=<AZURE_AD_USER_PASSWORD>" \
--data-urlencode "grant_type=password" \
--data-urlencode "scope=<AZURE_APP_URI+AZURE_APP_SCOPE>" \
'<AZURE_AD_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
suroauth
et le paramètretoken
surexternal_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 valeurtoken
.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_identifier>",
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é.