Streamlit in Snowflake 의 외부 네트워크 액세스

이 항목에서는 Snowflake 외부의 네트워크 위치에 대한 보안 액세스를 생성하는 방법에 대해 설명합니다.

Streamlit in Snowflake 의 외부 네트워크 액세스

Snowflake 외부의 특정 네트워크 위치에 대한 보안 액세스를 생성하고, Streamlit 앱 코드 내에서 해당 액세스를 사용할 수 있습니다. 외부 액세스 통합을 통해 액세스를 활성화할 수 있습니다.

Streamlit 앱이 외부 액세스 통합(EAI)을 사용하도록 활성화하려면 CREATE STREAMLIT 또는 ALTER STREAMLIT 명령을 실행하고 해당 EAI를 포함하도록 EXTERNAL_ACCESS_INTEGRATIONS 매개 변수를 설정하면 됩니다.

EAI를 사용하면 requests 또는 ``urllib``와 같이 외부 위치에 액세스하는 Python 라이브러리를 사용하고 네트워크 위치에 대한 액세스가 요구되는 서드 파티 라이브러리를 사용할 수 있습니다.

자세한 내용은 외부 네트워크 액세스 개요 섹션을 참조하십시오.

예: 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. Streamlit 앱 제작자에게 외부 액세스를 위해 SECRET 및 INTEGRATION 오브젝트를 사용하는 데 필요한 권한을 부여하려면 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