Accès au réseau externe dans Streamlit in Snowflake¶
Cette rubrique décrit comment créer un accès sécurisé à des emplacements réseau externes à Snowflake.
Accès au réseau externe dans Streamlit in Snowflake¶
Vous pouvez créer un accès sécurisé à des emplacements réseau spécifiques externes à Snowflake, puis utiliser cet accès à partir du code de l’application Streamlit. Vous pouvez activer cet accès par le biais d’une intégration d’accès externe.
Pour permettre à une application Streamlit d’utiliser une intégration d’accès externe (EAI), vous pouvez exécuter la commande CREATE STREAMLIT ou ALTER STREAMLIT et définir le paramètre EXTERNAL_ACCESS_INTEGRATIONS à inclure dans cette EAI.
Avec une EAI, vous pouvez utiliser des bibliothèques Python qui accèdent à des emplacements externes, tels que requests ou urllib, et utiliser des bibliothèques tierces qui nécessitent l’accès à un emplacement réseau.
Pour plus d’informations, voir Vue d’ensemble de l’accès au réseau externe.
Exemple : accéder à l’API OpenAI¶
L’exemple suivant montre comment créer une EAI pour une requête sortante vers l’API OpenAI :
Pour créer une règle réseau qui représente l’emplacement du réseau externe et les restrictions d’accès, utilisez la commande CREATE NETWORK RULE :
CREATE OR REPLACE NETWORK RULE network_rules MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('api.openai.com');
Pour plus d’informations, voir Création d’une règle de réseau pour représenter l’emplacement réseau externe.
Pour créer un secret qui représente les identifiants requis pour s’authentifier auprès de l’emplacement réseau externe, utilisez la commande CREATE SECRET :
CREATE OR REPLACE SECRET openai_key TYPE = GENERIC_STRING SECRET_STRING = '<any_string>';
Pour plus d’informations, voir Création d’un secret pour représenter les identifiants de connexion.
Pour créer une EAI, exécutez la commande CREATE EXTERNAL ACCESS INTEGRATION, en réglant ALLOWED_NETWORK_RULES sur la règle réseau que vous avez créée et ALLOWED_AUTHENTICATION_SECRETS sur le secret que vous avez créé :
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_access_int ALLOWED_NETWORK_RULES = (network_rules) ALLOWED_AUTHENTICATION_SECRETS = (openai_key) ENABLED = TRUE;
Pour accorder les privilèges nécessaires à l’utilisation des objets SECRET et INTEGRATION pour l’accès externe au créateur de l’application Streamlit, utilisez la commande GRANT <privilèges> … TO ROLE :
GRANT READ ON SECRET openai_key TO ROLE streamlit_app_creator_role; GRANT USAGE ON INTEGRATION openai_access_int TO ROLE streamlit_app_creator_role;
Pour permettre à l’application Streamlit d’utiliser l’intégration, exécutez la commande ALTER STREAMLIT, en définissant la propriété EXTERNAL_ACCESS_INTEGRATIONS sur l’intégration :
USE ROLE streamlit_app_creator_role; ALTER STREAMLIT streamlit_db.streamlit_schema.streamlit_app SET EXTERNAL_ACCESS_INTEGRATIONS = (openai_access_int) SECRETS = ('my_openai_key' = streamlit_db.streamlit_schema.openai_key);
Note
Vous pouvez également définir un nouvel objet Streamlit pour qu’il utilise une intégration d’accès externe en spécifiant le paramètre EXTERNAL_ACCESS_INTEGRATIONS lorsque vous exécutez la commande CREATE STREAMLIT :
CREATE STREAMLIT streamlit_db.streamlit_schema.streamlit_app ROOT_LOCATION = '<stage_path_and_root_directory>' MAIN_FILE = '<path_to_main_file_in_root_directory>' EXTERNAL_ACCESS_INTEGRATIONS = (openai_access_int) SECRETS = ('my_openai_key' = streamlit_db.streamlit_schema.openai_key);
Dans le code de votre application Streamlit, appelez l’API externe :
from openai import OpenAI import streamlit as st import _snowflake st.title(":speech_balloon: Simple chat app using an external LLM") st.write("This app shows how to call an external LLM to build a simple chat application.") # Use the _snowflake library to access secrets secret = _snowflake.get_generic_secret_string('my_openai_key') client = OpenAI(api_key=secret) # ... # code to use API # ...