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 :

  1. 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');
    
    Copy

    Pour plus d’informations, voir Création d’une règle de réseau pour représenter l’emplacement réseau externe.

  2. 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>';
    
    Copy

    Pour plus d’informations, voir Création d’un secret pour représenter les identifiants de connexion.

  3. 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;
    
    Copy
  4. 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;
    
    Copy
  5. 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);
    
    Copy

    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);
    
    Copy
  6. 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
    # ...
    
    Copy