Streamlit in Snowflake 中的外部网络访问¶
本主题介绍如何创建对 Snowflake 外部网络位置的安全访问。
Streamlit in Snowflake 中的外部网络访问¶
您可以创建对 Snowflake 外部特定网络位置的安全访问,并且可以从 Streamlit 应用程序代码中使用该访问。可以通过外部访问集成启用访问权限。
要使 Streamlit 应用能够使用外部访问集成 (EAI),您可以运行 CREATE STREAMLIT 或 ALTER STREAMLIT 命令,并将 EXTERNAL_ACCESS_INTEGRATIONS 参数设置为包含该 EAI。
借助 EAI,您可以使用访问外部位置的 Python 库(例如 requests 或者 urllib),并使用需要访问网络位置的第三方库。
有关更多信息,请参阅 外部网络访问概述。
示例:访问 OpenAI API¶
以下示例演示了如何为发往 OpenAI API 的出站请求创建 EAI:
要创建表示外部网络位置和访问限制的网络规则,可以使用 CREATE NETWORK RULE 命令:
CREATE OR REPLACE NETWORK RULE network_rules MODE = EGRESS TYPE = HOST_PORT VALUE_LIST = ('api.openai.com');
有关更多信息,请参阅 创建网络规则以表示外部网络位置。
要创建表示对外部网络位置进行身份验证所需凭据的密钥,可以使用 CREATE SECRET 命令:
CREATE OR REPLACE SECRET openai_key TYPE = GENERIC_STRING SECRET_STRING = '<any_string>';
有关更多信息,请参阅 创建表示凭据的密钥。
要创建 EAI,请运行 CREATE EXTERNAL ACCESS INTEGRATION 命令,将 ALLOWED_NETWORK_RULES 设置为您创建的网络规则,并将 ALLOWED_AUTHENTICATION_SECRETS 设置为您创建的密钥:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_access_int ALLOWED_NETWORK_RULES = (network_rules) ALLOWED_AUTHENTICATION_SECRETS = (openai_key) ENABLED = TRUE;
要授予所需权限以便使用 SECRET 和 INTEGRATION 对象对 Streamlit 应用程序创建器进行外部访问,可以使用 GRANT <privileges> ... 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;
要使 Streamlit 应用程序能够使用集成,可以运行 ALTER STREAMLIT 命令,并将 EXTERNAL_ACCESS_INTEGRATIONS 属性设置为该集成:
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);
备注
还可以在运行 CREATE STREAMLIT 命令时指定 EXTERNAL_ACCESS_INTEGRATIONS 参数,从而设置新的 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);
在 Streamlit 应用程序代码中,调用外部 API:
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 # ...