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:
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');
Para obter mais informações, consulte Criação de uma regra de rede para representar o local da rede externa.
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>';
Para obter mais informações, consulte Criação de um segredo para representar credenciais.
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;
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;
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);
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);
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 # ...