Acesso à rede externa no Streamlit in Snowflake

Este tópico descreve como criar acesso seguro a locais de rede externos ao Snowflake.

Acesso à rede externa no Streamlit in Snowflake

É possível criar acesso seguro a locais de rede específicos externos ao Snowflake e usar esse acesso de dentro do código do aplicativo Streamlit. É possível habilitar o acesso por meio de uma integração de acesso externo.

Para que um app Streamlit use uma integração de acesso externo (EAI), é possível executar o comando CREATE STREAMLIT ou ALTER STREAMLIT e definir o parâmetro EXTERNAL_ACCESS_INTEGRATIONS para incluir essa EAI.

Com uma EAI, é possível usar bibliotecas Python que acessam locais externos, como requests ou urllib, e usar bibliotecas de terceiros que exigem acesso a um local de rede.

Para obter mais informações, consulte Visão geral do acesso à rede externa.

Exemplo: Acesse a API OpenAI

O exemplo a seguir mostra como criar uma EAI para uma solicitação de saída para a OpenAI API:

  1. Para criar uma regra de rede que represente o local da rede externa e as restrições de acesso, use o comando CREATE NETWORK RULE:

    CREATE OR REPLACE NETWORK RULE network_rules
      MODE = EGRESS
      TYPE = HOST_PORT
      VALUE_LIST = ('api.openai.com');
    
    Copy

    Para obter mais informações, consulte Criação de uma regra de rede para representar o local da rede externa.

  2. Para criar um segredo que represente as credenciais necessárias para autenticação no local da rede externa, use o comando CREATE SECRET:

    CREATE OR REPLACE SECRET openai_key
      TYPE = GENERIC_STRING
      SECRET_STRING = '<any_string>';
    
    Copy

    Para obter mais informações, consulte Criação de um segredo para representar credenciais.

  3. Para criar uma EAI, execute o comando CREATE EXTERNAL ACCESS INTEGRATION, configurando ALLOWED_NETWORK_RULES como a regra de rede que você criou e ALLOWED_AUTHENTICATION_SECRETS como o segredo que você criou:

    CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_access_int
      ALLOWED_NETWORK_RULES = (network_rules)
      ALLOWED_AUTHENTICATION_SECRETS = (openai_key)
      ENABLED = TRUE;
    
    Copy
  4. Para conceder os privilégios necessários para usar os objetos SECRET e INTEGRATION para acesso externo ao criador do aplicativo Streamlit, use o comando GRANT <privilégios> … 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. Para permitir que o aplicativo Streamlit use a integração, execute o comando ALTER STREAMLIT, configurando a propriedade EXTERNAL_ACCESS_INTEGRATIONS para a integração:

    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

    Nota

    Você também pode definir um novo objeto Streamlit para usar uma integração de acesso externo especificando o parâmetro EXTERNAL_ACCESS_INTEGRATIONS ao executar o comando 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. No código do aplicativo Streamlit, chame a API externa:

    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