Exemple - Accès externe à l’aide de OAuth¶
Cette rubrique fournit un exemple qui décrit comment utiliser les références pour permettre aux fournisseurs d’accorder l’accès à un point de terminaison externe à Snowflake. Cet exemple utilise un secret OAuth2 et une intégration d’accès externe pour autoriser l’accès.
Ajouter des références au fichier manifeste¶
Pour permettre l’accès à un point de terminaison externe à l’aide de OAuth, un fournisseur peut ajouter les entrées suivantes dans le fichier manifest.yml
:
Référence EXTERNAL ACCESS INTEGRATION avec le privilège USAGE
Référence SECRET avec le privilège READ
L’exemple de fichier manifest.yml
suivant montre comment définir ces références :
manifest_version: 1
configuration:
log_level: warn
trace_level: off
...
references:
- consumer_secret:
label: "Consumer's Secret"
description: "Needed to authenticate with xyz.com"
privileges:
- READ
object_type: SECRET
register_callback: config.register_my_secret
configuration_callback: config.get_config_for_ref
- consumer_external_access:
label: "Default External Access Integration"
description: "This is required to access xyz.com"
privileges:
- USAGE
object_type: EXTERNAL ACCESS INTEGRATION
register_callback: config.register_reference
configuration_callback: config.get_config_for_ref
required_at_setup: true
Note
Ces références ne peuvent pas avoir la propriété multi_valued
réglée sur true.
Les références aux secrets et aux objets d’accès externe nécessitent également une fonction configuration_callback
dans le script de configuration. Pour plus d’informations, voir Ajouter la fonction configuration_callback au script d’installation.
Ajouter la fonction configuration_callback au script d’installation¶
Après avoir ajouté les références pour l’intégration du secret et de l’accès externe, vous devez ajouter la fonction configuration_callback
au script d’installation. Pour créer une intégration ou un secret d’accès externe, l’application doit pouvoir déterminer les valeurs du port hôte, du type de secret, du point de terminaison de l’autorisation et du jeton pour OAuth, etc. configuration_callback
fournit ces informations du compte du consommateur à l’application.
Snowsight exécute cette procédure de rappel pour remplir la boîte de dialogue de configuration qui invite l’utilisateur à configurer les objets. La procédure doit être attribuée à un rôle d’application pour être exécutée.
Note
configuration_callback n’est pris en charge que pour l’intégration de l’accès externe et les objets secrets.
La fonction de rappel doit remplir les conditions suivantes :
La fonction de rappel doit accepter un argument contenant un nom de référence. Cela permet à la même fonction de rappel de gérer plusieurs références.
La fonction de rappel doit renvoyer un objet JSON bien formé. L’objet JSON contient les propriétés suivantes :
type
Indique le type de message. Les valeurs valides sont :
CONFIGURATION
: renvoie une charge utile contenant les valeurs de configuration de l’objet en fonction du type d’objet.ERROR
: renvoie une erreur avec le message associé qui est affiché dans Snowsight.
payload
Contient le contenu de la réponse en fonction de la valeur de la propriété
type
et du type d’objet configuré.
La signature du rappel de configuration est la suivante :
CREATE OR REPLACE PROCEDURE configuration_callback_name(ref_name string)
RETURNS STRING
language <language>
as
$$
...
$$
Dans le script d’installation, vous devez accorder le privilège USAGE aux rôles d’application utilisés pour configurer l’appli afin qu’ils aient la permission d’appeler la procédure stockée. L’exemple suivant montre comment accorder le privilège USAGE à une procédure stockée :
GRANT USAGE ON PROCEDURE configuration_callback_name(string)
TO APPLICATION ROLE app_role;
La fonction de rappel renvoie un objet JSON. Pour plus d’informations, voir Format JSON de la réponse du rappel de configuration.
L’exemple suivant montre une fonction de rappel typique pour gérer l’accès externe et les références de secrets.
Cette fonction permet d’effectuer les opérations suivantes :
Pour une référence à une intégration d’accès externe, la procédure renvoie un objet JSON contenant les informations de configuration requises. Pour plus d’informations, voir Format JSON pour l’intégration d’accès externe.
Pour une référence à un secret, la procédure renvoie un objet JSON contenant une configuration de secret de type OAuth2. Voir Format JSON des références de secrets pour plus d’informations.
CREATE OR REPLACE PROCEDURE config.get_config_for_ref(ref_name STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
CASE (ref_name)
WHEN 'CONSUMER_EXTERNAL_ACCESS' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"host_ports":["google.com"],
"allowed_secrets" : "LIST",
"secret_references":["CONSUMER_SECRET"]}}';
WHEN 'CONSUMER_SECRET' THEN
RETURN '{
"type": "CONFIGURATION",
"payload":{
"type" : "OAUTH2",
"security_integration": {
"oauth_scopes": ["https://www.googleapis.com/auth/analytics.readonly"],
"oauth_token_endpoint": "https://oauth2.googleapis.com/token",
"oauth_authorization_endpoint":
"https://accounts.google.com/o/oauth2/auth"}}}';
END CASE;
RETURN '';
END;
$$;
GRANT USAGE ON PROCEDURE config.get_config_for_ref(string)
TO APPLICATION ROLE app_admin;
Utilisation du SDK d’autorisation d’accès Python pour les secrets et les intégrations d’accès externes¶
Python Permission SDK prend en charge les objets d’intégration d’accès secret et externe. Cependant, le comportement est légèrement différent pour ces objets.
Lorsqu’un fournisseur appelle permission.request_reference()
et transmet le nom d’une référence dont la valeur est object_type
de SECRET
ou de EXTERNAL ACCESS INTEGRATION
, Snowsight effectue automatiquement les opérations suivantes :
Appelle la fonction
configuration_callback
dans le script d’installation.Valide les valeurs renvoyées par la fonction
configuration_callback
.Affiche la boîte de dialogue de configuration pour le consommateur.
Note
Si un fournisseur configure une intégration d’accès externe avec la propriété payload.allow_secrets
définie sur LIST
, il n’est pas nécessaire d’effectuer un appel séparé pour demander une référence pour le secret. La configuration du secret est implicitement incluse dans la configuration de l’intégration de l’accès externe.