Exemples d’accès au réseau externe¶
Cette rubrique fournit des exemples d’accès à des emplacements réseau externes à partir de fonctions et de procédures définies par l’utilisateur.
Accès à PyPi pour l’installation de paquets dans le conteneur Snowpark¶
Vous pouvez accéder au référentiel de paquets PyPi en créant une intégration d’accès externe. Vous pouvez procéder ainsi lorsque vous souhaitez autoriser les utilisateurs de Notebooks sur Container Runtime à installer les paquets pip à l’aide de la commande pip install. Avec ce type d’intégration, vous pouvez également permettre à Snowpark Container Services d’installer des paquets pip.
Cet exemple utilise la règle de réseau gérée par Snowflake snowflake.external_access.pypi_rule décrite dans Privilèges et commandes.
Créez une intégration de l’accès externe à l’aide de la règle de réseau
snowflake.external_access.pypi_rule.Créez un rôle
developerpour les utilisateurs qui doivent utiliserpip installdans un Conteneur Snowpark ou Notebook sur Container Runtime.Accordez au rôle
developerles privilèges nécessaires pour utiliser l’intégration de l’accès externe que vous avez créée.
Accès à l’API Google Translate avec OAuth¶
Les étapes suivantes comprennent le code permettant de créer une intégration d’accès externe pour l’accès à l’API Google Translation. Les étapes ajoutent l’intégration de la sécurité et les autorisations nécessaires à l’exécution des instructions.
Créez une règle réseau représentant l’emplacement externe.
Pour plus d’informations sur le rôle d’une règle de réseau dans l’accès externe, y compris les privilèges requis, voir Création d’une règle de réseau pour représenter l’emplacement réseau externe.
Créez une intégration de sécurité pour contenir les identifiants de connexion OAuth requis pour s’authentifier auprès de l’emplacement du réseau externe spécifié par la règle réseau
google_apis_network_rule.Pour des informations de référence sur la commande, y compris les privilèges requis, voir CREATE SECURITY INTEGRATION (authentification API externe).
Créer un secret pour représenter les identifiants de connexion contenus dans l’intégration de sécurité
google_translate_oauth.Pour plus d’informations sur le rôle du secret dans l’accès externe, y compris les privilèges requis, voir Création d’un secret pour représenter les identifiants de connexion.
Le secret doit spécifier un jeton d’actualisation avec son paramètre OAUTH_REFRESH_TOKEN. Pour obtenir un jeton d’actualisation auprès du fournisseur de services (dans ce cas, auprès du service de l’API Google Cloud Translation), vous pouvez utiliser un moyen proposé par le fournisseur ou utiliser les fonctions système Snowflake.
Pour créer un secret avec un jeton d’actualisation, utilisez soit Google OAuth Playground, soit les fonctions système Snowflake, comme décrit ci-dessous :
Fonctions système Snowflake
Exécutez CREATE SECRET pour créer un secret. Vous le mettrez à jour avec le jeton d’actualisation à une étape ultérieure.
Exécutez la fonction SYSTEM$START_OAUTH_FLOW pour récupérer une URL avec laquelle vous pouvez obtenir un jeton d’actualisation, en spécifiant comme argument le nom du secret que vous avez précédemment créé.
La fonction génère une URL que vous pouvez utiliser pour compléter le processus de consentement OAuth.
Dans un navigateur, accédez à l’URL générée et effectuez le processus de consentement OAuth2. Lorsque vous avez terminé, laissez le navigateur ouvert à la dernière page du processus.
Dans la barre d’adresse du navigateur, copiez l’ensemble du texte après le point d’interrogation dans l’URL de la dernière page du processus de consentement.
Exécutez la fonction SYSTEM$FINISH_OAUTH_FLOW, en spécifiant comme argument les paramètres que vous venez de copier depuis la barre d’adresse du navigateur pour mettre à jour le secret avec un jeton d’actualisation.
Assurez-vous d’exécuter SYSTEM$FINISH_OAUTH_FLOW dans la même session que SYSTEM$START_OAUTH_FLOW. SYSTEM$FINISH_OAUTH_FLOW met à jour le secret que vous avez spécifié dans SYSTEM$START_OAUTH_FLOW via le jeton d’accès et le jeton d’actualisation obtenus auprès du serveur OAuth.
Google OAuth Playground
Dans Google OAuth Playground, sélectionnez et autorisez l’API Cloud Translation comme spécifié à l’étape 1.
A l’étape 2, cliquez sur exchange authorization code for tokens, puis copiez la valeur du jeton refresh token.
Exécutez CREATE SECRET pour créer un secret qui spécifie la valeur du jeton d’actualisation que vous avez copiée.
Pour plus d’informations sur le rôle d’un secret dans l’accès externe, y compris les privilèges requis, voir Création d’un secret pour représenter les identifiants de connexion.
Créez une intégration d’accès externe à l’aide de la règle de réseau et du secret.
Pour plus d’informations sur le rôle d’une intégration d’accès externe, y compris les privilèges requis, voir Création d’une intégration d’accès externe.
Créez un rôle
developerqui sera attribué aux utilisateurs qui doivent créer une UDF ou une procédure utilisant l’intégration.Accordez au rôle
developerles privilèges nécessaires pour créer une UDF qui utilise les objets pour l’accès externe. Cela comprend les éléments suivants :Le privilège READ sur le secret.
Le privilège USAGE sur le schéma qui contient le secret.
Le privilège USAGE sur l’intégration.
Créez une UDF
google_translate_pythonqui traduit le texte spécifié en une phrase dans la langue spécifiée. Pour plus d’informations, voir Utilisation de l’intégration de l’accès externe dans une fonction ou une procédure.Accordez le privilège USAGE à la fonction
google_translate_pythonafin que les personnes ayant le rôleuserpuissent l’appeler.Exécutez la fonction
google_translate_pythonpour traduire une phrase.Cette opération génère la sortie suivante.
Accès à une fonction lambda externe avec l’authentification de base¶
Les étapes suivantes comprennent un exemple de code pour créer une intégration d’accès externe pour l’accès à une fonction lambda externe à Snowflake. L’exemple utilise un espace réservé pour le point de terminaison externe lui-même, mais il pourrait s’agir d’une fonction disponible sur un point de terminaison de service REST, par exemple.
L’accès externe est utilisé dans une UDF vectorisée Python qui reçoit un Pandas DataFrame contenant les données.
Créez une règle réseau
lambda_network_rulereprésentant l’emplacement externemy_external_service(ici, une valeur d’espace réservé pour l’emplacement d’un point de terminaison externe).Pour plus d’informations sur le rôle d’une règle réseau dans l’accès externe, voir Création d’une règle de réseau pour représenter l’emplacement réseau externe.
Créez un secret pour représenter les identifiants de connexion requis par le service externe.
Le code du gestionnaire, plus loin dans cet exemple, récupère les identifiants de connexion du secret à l’aide d’une API Snowflake pour Python.
Pour plus d’informations sur le rôle du secret dans l’accès externe, voir Création d’un secret pour représenter les identifiants de connexion.
Créez un rôle
developeret accordez-lui des privilèges READ sur le secret. Ce rôle sera attribué aux utilisateurs qui doivent créer une UDF ou une procédure utilisant le secret.Créez également le rôle que les utilisateurs utiliseront pour appeler la fonction.
Accordez au rôle
developerles privilèges nécessaires pour créer une UDF qui utilise les objets pour l’accès externe. Cela comprend les éléments suivants :Le privilège READ sur le secret.
Le privilège USAGE sur le schéma qui contient le secret.
Créez une intégration d’accès externe pour spécifier le point de terminaison externe et les identifiants de connexion par le biais de la règle réseau et du secret que vous avez créés.
Pour plus d’informations sur le rôle d’une intégration d’accès externe, y compris les privilèges requis, voir Création d’une intégration d’accès externe.
Créez une UDF vectorisée Python
return_double_columnqui accède à un emplacement réseau externe pour traiter les données reçues en tant que Pandas DataFrame.Pour plus d’informations sur l’utilisation de l’accès externe dans une UDF, voir Utilisation de l’intégration de l’accès externe dans une fonction ou une procédure.
Accordez le privilège USAGE à la fonction
return_double_columnafin que les personnes ayant le rôleuserpuissent l’appeler.Exécutez la fonction
return_double_column, en adressant une demande au point de terminaison externe.Le code de l’exemple suivant crée une table à deux colonnes et insère 100 000 000 lignes contenant des entiers de 4 octets. Le code exécute ensuite la fonction
return_double_column, transmettant les valeurs de la colonneapour un traitement par le point de terminaison externe.
Accéder à Amazon S3 avec AWS IAM¶
Les étapes suivantes incluent un exemple de code pour se connecter à un compartiment S3 AWS avec IAM.
Pour plus d’informations sur AWS IAM, voir la documentation sur AWS IAM.
Créez une règle de réseau,
aws_s3_network_rule, qui représente le compartiment S3 AWS à l’emplacement spécifié par le paramètre VALUE_LIST.Pour plus d’informations sur le rôle d’une règle réseau dans l’accès externe, voir Création d’une règle de réseau pour représenter l’emplacement réseau externe.
Créez une intégration de sécurité pour contenir les identifiants de connexion AWS IAM Amazon Resource Name (ARN) requis pour s’authentifier auprès de l’emplacement du réseau externe spécifié par la règle réseau
aws_s3_network_rule.Pour des informations de référence sur la commande, y compris les privilèges requis, voir CREATE SECURITY INTEGRATION (authentification IAM AWS).
Obtenez l’ARN et l’ID pour l’utilisateur IAM USER.
Exécutez la commande DESC sur l’intégration de sécurité que vous avez créée.
À partir de la sortie affichée, copiez les valeurs des propriétés suivantes à utiliser à l’étape suivante :
API_AWS_IAM_USER_ARN
API_AWS_EXTERNAL_ID
Accordez les autorisations de l’utilisateur IAM nécessaires pour accéder au compartiment.
Utilisez les valeurs ARN et ID lors de la configuration d’une politique de confiance comme décrit à l’étape 5 de Option 1: Configure a Snowflake storage integration to access Amazon S3.
Créez un secret de type CLOUD_PROVIDER_TOKEN pour représenter les identifiants de connexion requis par le service externe.
Le code du gestionnaire, plus loin dans cet exemple, récupère les identifiants de connexion du secret à l’aide d’une API Snowflake.
Pour plus d’informations sur le rôle du secret dans l’accès externe, voir Création d’un secret pour représenter les identifiants de connexion.
Créez un rôle
developeret accordez-lui des privilèges READ sur le secret. Ce rôle sera attribué aux utilisateurs qui doivent créer une UDF ou une procédure utilisant le secret.Créez également le rôle que les utilisateurs utiliseront pour appeler la fonction.
Accordez au rôle
developerles privilèges nécessaires pour créer une UDF qui utilise les objets pour l’accès externe. Cela comprend les éléments suivants :Le privilège READ sur le secret.
Le privilège USAGE sur le schéma qui contient le secret.
Créez une intégration d’accès externe pour spécifier le point de terminaison externe et les identifiants de connexion par le biais de la règle réseau et du secret que vous avez créés.
Pour plus d’informations sur le rôle d’une intégration d’accès externe, y compris les privilèges requis, voir Création d’une intégration d’accès externe.
Créez une UDF qui utilise l’intégration d’accès externe pour se connecter au compartiment S3 Amazon spécifié dans la règle réseau que vous avez créée.
Le code du gestionnaire utilise des APIs Snowflake pour récupérer un jeton du secret que vous avez créé. À partir de ce jeton, vous pouvez utiliser des APIs Snowflake pour récupérer les valeurs nécessaires à la création d’une session de connexion à Amazon S3, y compris un ID de clé d’accès, une clé d’accès secrète et un jeton de session.
Pour plus d’informations sur l’utilisation de l’accès externe dans une UDF, voir Utilisation de l’intégration de l’accès externe dans une fonction ou une procédure.
Accordez le privilège USAGE à l’UDF afin que les personnes ayant le rôle
userpuissent l’appeler.Exécutez la fonction pour vous connecter au point de terminaison externe.