Streamlit in Snowflake 中的外部网络访问

本主题介绍如何创建对 Snowflake 外部网络位置的安全访问。

Streamlit in Snowflake 中的外部网络访问

您可以创建对 Snowflake 外部特定网络位置的安全访问,并且可以从 Streamlit 应用程序代码中使用该访问。可以通过外部访问集成启用访问权限。

要使 Streamlit 应用能够使用外部访问集成 (EAI),您可以运行 CREATE STREAMLITALTER STREAMLIT 命令,并将 EXTERNAL_ACCESS_INTEGRATIONS 参数设置为包含该 EAI。

借助 EAI,您可以使用访问外部位置的 Python 库(例如 requests 或者 urllib),并使用需要访问网络位置的第三方库。

有关更多信息,请参阅 外部网络访问概述

示例:访问 OpenAI API

以下示例演示了如何为发往 OpenAI API 的出站请求创建 EAI:

  1. 要创建表示外部网络位置和访问限制的网络规则,可以使用 CREATE NETWORK RULE 命令:

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

    有关更多信息,请参阅 创建网络规则以表示外部网络位置

  2. 要创建表示对外部网络位置进行身份验证所需凭据的密钥,可以使用 CREATE SECRET 命令:

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

    有关更多信息,请参阅 创建表示凭据的密钥

  3. 要创建 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;
    
    Copy
  4. 要授予所需权限以便使用 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;
    
    Copy
  5. 要使 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);
    
    Copy

    备注

    还可以在运行 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);
    
    Copy
  6. 在 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
    # ...
    
    Copy
语言: 中文