Externer Zugriff auf das Netzwerk in Streamlit in Snowflake¶
Unter diesem Thema wird beschrieben, wie Sie einen sicheren Zugriff auf Netzwerkstandorte außerhalb von Snowflake erstellen.
Externer Zugriff auf das Netzwerk in Streamlit in Snowflake¶
Sie können einen sicheren Zugriff auf bestimmte Netzwerkstandorte außerhalb von Snowflake erstellen und diesen Zugriff über den Code der Streamlit-App nutzen. Sie können den Zugriff über eine externe Zugriffsintegration ermöglichen.
Um einer Streamlit-Anwendung die Verwendung einer Integration für externen Zugriff (External Access Integration, EAI) zu ermöglichen, können Sie den Befehl CREATE STREAMLIT oder ALTER STREAMLIT ausführen und den Parameter EXTERNAL_ACCESS_INTEGRATIONS so einstellen, dass diese EAI einbezogen wird.
Mit einer EAI können Sie Python-Bibliotheken verwenden, die auf externe Speicherorte zugreifen, wie z. B. requests oder urllib, und Bibliotheken von Drittanbietern nutzen, die Zugriff auf einen Netzwerkspeicherort benötigen.
Weitere Informationen dazu finden Sie unter Übersicht über externen Netzwerkzugriff.
Beispiel: Zugriff auf die OpenAI API¶
Das folgende Beispiel zeigt, wie Sie eine EAI für eine ausgehende Anfrage an die OpenAI API erstellen.
Um eine Netzwerkregel zu erstellen, die den Standort des externen Netzwerks und die Zugriffsbeschränkungen darstellt, verwenden Sie den Befehl CREATE NETWORK RULE:
CREATE OR REPLACE NETWORK RULE network_rules MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('api.openai.com');
Weitere Informationen dazu finden Sie unter Erstellen einer Netzwerkregel zur Darstellung des externen Netzwerkstandorts.
Um ein Geheimnis zu erstellen, das die Anmeldeinformationen darstellt, die für die Authentifizierung mit dem externen Speicherort des Netzwerks erforderlich sind, verwenden Sie den CREATE SECRET-Befehl:
CREATE OR REPLACE SECRET openai_key TYPE = GENERIC_STRING SECRET_STRING = '<any_string>';
Weitere Informationen dazu finden Sie unter Erstellen eines Geheimnisses zur Darstellung von Anmeldeinformationen.
Um eine EAI zu erstellen, führen Sie den CREATE EXTERNAL ACCESS INTEGRATION-Befehl aus und setzen ALLOWED_NETWORK_RULES auf die von Ihnen erstellte Netzwerkregel und ALLOWED_AUTHENTICATION_SECRETS auf das von Ihnen erstellte Geheimnis:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_access_int ALLOWED_NETWORK_RULES = (network_rules) ALLOWED_AUTHENTICATION_SECRETS = (openai_key) ENABLED = TRUE;
Um dem Ersteller der Streamlit-App die erforderlichen Berechtigungen zur Verwendung der Objekte SECRET und INTEGRATION für den externen Zugriff zu erteilen, verwenden Sie den Befehl GRANT <Berechtigungen> … 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;
Damit die Streamlit-App die Integration nutzen kann, führen Sie den Befehl ALTER STREAMLIT aus und setzen die Eigenschaft EXTERNAL_ACCESS_INTEGRATIONS auf die Integration:
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);
Bemerkung
Sie können ein neues Streamlit-Objekt auch so einrichten, dass es eine externe Zugriffsintegration verwendet, indem Sie den Parameter EXTERNAL_ACCESS_INTEGRATIONS angeben, wenn Sie den Befehl CREATE STREAMLIT ausführen:
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);
Rufen Sie im Code Ihrer Streamlit-App die externe API auf:
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 # ...