Configurer des clients personnalisés pour OAuth externe¶
Ce chapitre décrit comment configurer Snowflake en tant que ressource OAuth et un client personnalisé en tant que serveur d’autorisation externe OAuth pour permettre un accès automatique sécurisé aux données Snowflake.
Dans ce chapitre :
Vue d’ensemble¶
Snowflake prend en charge une intégration personnalisée pour les fournisseurs d’identité (IdPs) qui ne sont pas autrement pris en charge pour vérifier les utilisateurs et générer des jetons d’accès OAuth pour permettre un accès automatique sécurisé aux données Snowflake.
Exigences de charge utile de jeton OAuth externe¶
Pour les clients personnalisés OAuth externes, le tableau suivant répertorie les informations de charge utile que le jeton d’accès OAuth externe doit contenir pour que Snowflake traite le jeton d’accès. Pour plus d’informations sur la colonne Réclamations, voir Réclamations JWT.
Réclamations |
Description |
---|---|
scp |
Champs d’application. Une liste des champs d’application dans le jeton d’accès. |
scope |
Champs d’application. Une chaîne de champs d’application séparés par des virgules dans le jeton d’accès. |
aud |
Audience. Identifie les destinataires auxquels le jeton d’accès est destiné en tant que URI de chaîne. |
exp |
Heure d’expiration. Identifie l’heure d’expiration à partir de laquelle le jeton d’accès ne doit pas être accepté pour le traitement. |
iss |
Émetteur. Identifie le principal qui a émis le jeton d’accès sous la forme d’un URI de chaîne. |
iat |
Émis à. Requis. Identifie l’heure à laquelle le JWT a été émis. |
Note
Snowflake prend en charge la revendication nbf
(pas avant) qui identifie l’heure avant laquelle le jeton d’accès ne doit pas être accepté pour le traitement.
Si votre serveur d’autorisation prend en charge la revendication nbf
(pas avant), vous pouvez facultativement inclure la revendication nbf
dans le jeton d’accès.
Pour vérifier que votre jeton contient les informations requises, vous pouvez tester le jeton sur le site JSON Web Tokens .
En tant qu’exemple représentatif, l’interface PAYLOAD: DATA affiche la charge utile du jeton comme suit.
{
"aud": "<audience_url>",
"iat": 1576705500,
"exp": 1576709100,
"iss": "<issuer_url>",
"scp": [
"session:role:analyst"
]
}
Procédure de configuration¶
Les étapes suivantes supposent que votre IdP et votre environnement peuvent être configurés pour obtenir les valeurs nécessaires pour créer l’intégration de sécurité Snowflake.
Important
Les étapes de ce chapitre sont un exemple représentatif de la configuration des clients personnalisés pour les OAuth externes.
Vous pouvez configurer votre environnement 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 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.
Étape 1 : Obtenir des valeurs d’environnement clés pour utiliser OAuth externe¶
Configurez votre IdP et votre serveur d’autorisation. Il est nécessaire d’identifier les valeurs suivantes à inclure dans l’intégration de sécurité Snowflake à l’étape suivante.
- URL de l’émetteur
Incluez cette URL avec le paramètre
external_oauth_issuer
.- Clé publique RSA
Incluez cette valeur avec le
external_oauth_rsa_public_key_value
.- URLs d’audience
Si plusieurs URL d’audiences sont nécessaires, séparez chaque URL par une virgule dans le paramètre
external_oauth_audience_list
.- Attribut de champ d’application
Cette valeur est configurable pour utiliser
scp
ouscope
. Incluez cette valeur dansexternal_oauth_scope_mapping_attribute
. Pour plus d’informations, voir Exigences de charge utile de jeton OAuth externe.- Attribut utilisateur
Cet attribut fait référence à un attribut permettant d’identifier les utilisateurs de votre IdP. Incluez cette valeur d’attribut dans le
external_oauth_user_mapping_claim
.- Attribut utilisateur Snowflake
L’attribut dans Snowflake pour identifier les utilisateurs. Incluez cette valeur dans
external_oauth_snowflake_user_mapping_attribute
.
Étape 2 : 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 et valider les jetons de votre IdP, et fournir 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 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 dans Snowflake
create security integration external_oauth_custom type = external_oauth enabled = true external_oauth_type = custom external_oauth_issuer = '<authorization_server_url>' external_oauth_rsa_public_key = '<public_key_value>' external_oauth_audience_list=('<audience_url_1>', '<audience_url_2>') external_oauth_scope_mapping_attribute = 'scp' 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.
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-à-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 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 de clients personnalisés en tant que serveur d’autorisation, vous devez :
Vérifier que l’utilisateur de test existe dans votre IdP et possède un mot de passe.
Vérifier que l’utilisateur de test existe dans Snowflake avec sa valeur d’attribut
login_name
définie sur<réclamation_mappage_utilisateur_jeton_oauth_externe>
.Enregistrer un client OAuth
Autorisez le client OAuth à faire une demande POST au point de terminaison de jeton personnalisé 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 votre serveur d’autorisation OAuth.
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=<IdP_USER_USERNAME>" \
--data-urlencode "password=<IdP_USER_PASSWORD>" \
--data-urlencode "grant_type=password" \
--data-urlencode "scope=session:role:analyst" \
<IdP_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_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é.