Configurer des serveurs d’autorisation personnalisés pour External OAuth¶
Cette rubrique décrit comment créer une intégration de sécurité External OAuth dans Snowflake, afin que les clients puissent accéder aux données Snowflake en s’authentifiant auprès d’un serveur d’autorisation personnalisé.
Si votre serveur d’autorisation est un fournisseur d’identité pris en charge (IdP) plutôt qu’un fournisseur personnalisé, consultez la rubrique consacrée à la configuration de cet IdP spécifique.
Dans ce chapitre :
Exigences de charge utile de jeton External OAuth¶
Le jeton d’accès que les serveurs d’authentification personnalisés envoient à Snowflake doit contenir les informations de charge utile suivantes. 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. Snowflake prend en charge la spécification de n’importe quel caractère unique pour le délimiteur, tel qu’un espace (c’est-à-dire Contactez le support Snowflake pour activer cette propriété dans votre compte Snowflake. |
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 personnalisé 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 serveur d’autorisation 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 serveurs d’autorisation personnalisés.
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é External OAuth.
Notez que les étapes suivantes servent de guide pour obtenir les informations nécessaires à la création de l’intégration de sécurité External OAuth dans Snowflake.
Consultez vos politiques de sécurité internes avant de configurer un serveur d’autorisation personnalisé afin de vous assurer que votre organisation respecte toutes les réglementations et exigences de conformité.
Obtenir des valeurs d’environnement de clés pour utiliser External OAuth¶
Lorsque vous configurez votre IdP et votre serveur d’autorisation, vous devez rassembler les valeurs suivantes pour définir une intégration de sécurité External OAuth :
- URL de l’émetteur:
Incluez cette URL avec le paramètre
external_oauth_issuer
.- Clé publique RSA:
Incluez cette valeur avec le paramètre
external_oauth_rsa_public_key
.- 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:
Vous pouvez régler cette valeur sur
scp
ouscope
. Par défaut, cette valeur estscp
.Vous pouvez régler la valeur du paramètre
external_oauth_scope_mapping_attribute
sur cette valeur.Si vous n’utilisez pas la valeur par défaut,
scp
, réglez la valeur du paramètreexternal_oauth_scope_mapping_attribute
surscope
.Pour plus d’informations, reportez-vous à Exigences de charge utile de jeton External OAuth.
- 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 paramètre
external_oauth_user_mapping_claim
.- Attribut utilisateur Snowflake:
L’attribut dans Snowflake pour identifier les utilisateurs. Incluez cette valeur dans le paramètre
external_oauth_snowflake_user_mapping_attribute
.
Créer une intégration de sécurité External OAuth dans Snowflake¶
Cette étape crée une intégration de sécurité External OAuth dans Snowflake. L’intégration de la sécurité External OAuth garantit que Snowflake peut communiquer de manière sécurisée avec les jetons d’accès de votre serveur d’autorisation personnalisé, et permettre aux utilisateurs d’accéder aux données Snowflake en fonction de leur rôle d’utilisateur associé au jeton d’accès. 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é External OAuth sont sensibles à la casse et les valeurs que vous insérez dans l’intégration de sécurité External OAuth doivent correspondre à ces valeurs dans votre environnement. Si la casse d’une valeur ne correspond pas, le jeton d’accès ne sera pas validé, ce qui entraînera l’échec d’une tentative d’authentification.
Créer une intégration de sécurité External 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_token_user_mapping_claim = 'upn' external_oauth_snowflake_user_mapping_attribute = 'login_name';Copy
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;
Copyrevoke USE_ANY_ROLE on integration external_oauth_1 from role1;
Copy
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 External 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¶
Pour tester la configuration d’un serveur d’autorisation personnalisé :
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 2.0
Autorisez le client OAuth 2.0 à faire une demande POST au point de terminaison du 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
Inclure les champs d’application
L’exemple de commande demande le rôle personnalisé ANALYST
et suppose que session:role:analyst
a été défini dans votre serveur d’autorisation personnalisé.
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_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é.