시크릿 관리 및 Streamlit 앱 구성하기¶
Streamlit 앱은 API 키, 비밀번호 및 기타 자격 증명과 같은 민감한 정보에 액세스해야 하는 경우가 많습니다. Streamlit 앱에서 시크릿을 관리하는 방법은 사용 중인 런타임 환경에 따라 다릅니다. Streamlit in Snowflake 는 Warehouse Runtime 및 Container Runtime 모두에서 시크릿에 액세스하기 위한 안전한 기본 제공 메커니즘을 제공합니다. Streamlit 구성의 경우 각 런타임에는 다른 제한 사항도 있습니다.
Streamlit 라이브러리에서 앱은 .streamlit/ 디렉터리를 사용하여 구성 및 시크릿을 저장합니다.
.streamlit/config.toml: 테마, 레이아웃, 서버 동작과 같은 앱 설정을 사용자 지정합니다..streamlit/secrets.toml: API 키 및 자격 증명과 같은 민감한 정보를 저장합니다(로컬 개발 시).
Streamlit in Snowflake 는 런타임 환경에 따라 몇 가지 제한 사항이 있지만 이러한 파일을 지원합니다. 다음 테이블에는 Warehouse Runtime 및 Container Runtime에서의 해당 파일에 대한 지원이 요약되어 있습니다.
특징 |
Warehouse Runtime |
Container Runtime |
|---|---|---|
|
구성 옵션의 제한된 하위 세트 |
구성 옵션의 광범위한 하위 세트 |
|
지원되지 않음 |
지원되지만, 시크릿이 아닌 환경 변수에만 권장됨 |
:file:`secrets.toml`의 경우, Streamlit in Snowflake 는 민감한 정보를 관리하는 데 권장되는 보다 안전한 기본 제공 시크릿 관리 시스템을 제공합니다. 다음 섹션에서는 앱에서 Snowflake 시크릿을 사용하는 방법을 설명합니다.
Snowflake에 대한 연결 관리하기¶
Snowflake에 대한 연결을 관리하기 위해 |st.connection|을 사용할 수 있습니다. 이를 통해 로컬 개발 환경과 배포된 앱 모두에서 Snowflake에 연결할 수 있습니다.
Warehouse Runtime에서는 Snowpark의 get_active_session() 함수를 사용하여 활성 세션을 가져올 수도 있습니다.
중요
:code:`get_active_session()`은 스레드로부터 안전하지 않으며 Container Runtime에서 사용할 수 없습니다.
Container Runtime의 시크릿¶
st.secrets 를 사용하여 Container Runtime Streamlit in Snowflake 앱에서 Snowflake 시크릿에 액세스할 수 있습니다. 이를 통해 API 키, 자격 증명 및 기타 구성 값과 같은 민감한 정보를 안전하게 저장하고 검색할 수 있습니다. Streamlit이 로컬 개발에서 :file:`.streamlit/secrets.toml`에 대해 하는 것처럼, Streamlit in Snowflake 는 환경 변수에 대한 시크릿도 채웁니다.
참고
Container Runtime은 _snowflake 모듈에 액세스할 수 없습니다. _snowflake 시크릿 함수를 사용하는 이전 Warehouse Runtime 앱을 마이그레이션하는 경우, 이 섹션에 설명된 대로 해당 호출을 st.secrets 로 바꿉니다.
Container Runtime에서 시크릿에 액세스하기¶
``@my_stage/app_folder/streamlit_app.py``에서 다음 Python 파일을 스테이징합니다. 파일 스테이징에 대한 자세한 내용은 Snowsight를 사용하여 파일 스테이징하기 섹션을 참조하세요.
Snowflake 계정에서 시크릿을 생성합니다.
자세한 내용은 CREATE SECRET 섹션을 참조하십시오.
외부 액세스 통합(EAI)을 생성하여 여기에 시크릿을 할당합니다.
SECRETS 매개 변수를 사용하여 시크릿을 참조하는 Streamlit 앱을 생성합니다.
참고
EAI 및 Streamlit 오브젝트에 대한 시크릿을 모두 할당해야 합니다. Streamlit 오브젝트에 시크릿을 단독으로 할당할 수는 없습니다.
일반 문자열 시크릿 ``my_secret``은 SECRETS 매개 변수의 문자열 ``”my_secret_name”``에 연결되므로, :code:`st.secrets[“my_secret_name”]`을 사용하여 Streamlit 앱 코드의 시크릿에 액세스할 수 있습니다.
지원되는 시크릿 유형 및 환경 변수¶
Container Runtime은 일반 문자열 및 기본 인증 시크릿을 지원합니다. |sis|는 st.secrets`뿐 아니라 환경 변수에도 시크릿을 매핑합니다. 환경 변수 이름은 대/소문자를 구분합니다. 기본 인증 시크릿의 경우 사용자 이름(``_USERNAME` 접미사) 및 비밀번호(_PASSWORD 접미사)의 두 환경 변수가 생성됩니다.
시크릿 유형 |
|
환경 변수 액세스 |
|---|---|---|
일반 문자열 |
|
|
기본 인증(사용자 이름) |
|
|
기본 인증(비밀번호) |
|
|
참고
클라우드 공급자, 대칭 키 및 OAuth 시크릿 유형은 현재 지원되지 않습니다.
일반 문자열 시크릿¶
일반 문자열 시크릿은 :code:`st.secrets`에 최상위 키로 저장됩니다.
사전 또는 특성 표기법을 사용하여 시크릿에 액세스할 수 있습니다.
기본 인증 및 시크릿¶
기본 인증 시크릿은 "username" 및 "password" 특성과 함께 사전과 같은 오브젝트로 저장됩니다.
사전 또는 특성 표기법을 사용하여 시크릿에 액세스할 수 있습니다.
인증된 패키지 리포지토리의 시크릿¶
시크릿은 자동으로 환경 변수로 노출됩니다. 특히, 이를 통해 JFrog Artifactory와 같은 비공개 패키지 리포지토리를 사용하여 인증할 수 있습니다.
대부분의 인증된 패키지 리포지토리의 경우 기본 인증 시크릿을 사용합니다. 시크릿은 _USERNAME 및 _PASSWORD 접미사를 사용하여 환경 변수로 자동 변환됩니다. 다른 명명 규칙이 필요한 경우 일반 문자열 시크릿을 사용하고 각 환경 변수의 이름을 수동으로 설정합니다. uv가 사용하는 환경 변수에 대한 자세한 내용은 uv 설명서의 `패키지 인덱스 <https://docs.astral.sh/uv/concepts/indexes/#providing-credentials-directly>`_를 참조하세요.
예: 비공개 JFrog Artifactory 리포지토리에 인증¶
@my_stage/app_folder``에서 앱의 소스 파일을 스테이징합니다. 앱의 소스 파일에는 ``[[tool.uv.index]]테이블에서 비공개 패키지 인덱스를 구성하는pyproject.toml파일을 포함해야 합니다.pyproject.toml파일에서 앱의 종속성을 선언하는 방법에 대한 자세한 내용은 Streamlit 앱의 종속성 관리하기 섹션을 참조하세요.JFrog 자격 증명으로 기본 인증 시크릿을 생성합니다.
비공개 리포지토리에 대한 외부 액세스 통합을 생성합니다.
참고
DNS 오류를 방지하기 위해 네트워크 규칙 값 목록에 리포지토리의 클라우드 공급자를 포함해야 할 수 있습니다. 예를 들어, 리포지토리가 AWS에 있는 경우 네트워크 규칙에 다음 값 목록이 필요할 수 있습니다.
Streamlit 앱에 EAI 및 시크릿을 첨부합니다.
기본 인증 시크릿
jfrog_creds``는 SECRETS 매개 변수의 문자열 ``"UV_INDEX_MY_JFROG_REPO"``에 연결되므로, 런타임은 uv에 필요한 ``UV_INDEX_MY_JFROG_REPO_USERNAME및UV_INDEX_MY_JFROG_REPO_PASSWORD환경 변수를 자동으로 삽입합니다.
로컬 .streamlit/secrets.toml 파일의 우선 순위¶
Snowflake 관리 시크릿을 앱의 소스 디렉터리에 있는 로컬 .streamlit/secrets.toml 파일과 결합할 수 있습니다. 둘 다 있는 경우 Streamlit 라이브러리는 이들을 병합합니다. 로컬에서 정의된 .streamlit/secrets.toml 파일은 Snowflake 관리 시크릿보다 우선합니다.
.streamlit/secrets.toml`은 스테이징된 파일에 일반 텍스트로 저장되므로, 여기에 실제 시크릿을 저장하는 것은 보안 모범 사례가 아닙니다. 민감한 자격 증명의 경우 Snowflake의 기본 제공 시크릿 관리를 사용합니다. 로컬에서 정의된 :file:.streamlit/secrets.toml` 파일을 사용하여 민감하지 않은 구성 값 또는 환경별 설정을 저장합니다.
Streamlit 앱의 시크릿 제거 또는 변경¶
Streamlit in Snowflake 앱에서 모든 시크릿을 제거하려면 :doc:`/sql-reference/sql/alter-streamlit`에 UNSET SECRETS 절을 사용합니다.
그러면 Streamlit in Snowflake 앱에서 모든 시크릿 연결이 제거됩니다. 기본 시크릿 오브젝트는 Snowflake 계정에 유지되며 나중에 다시 할당할 수 있습니다. EAI 연결도 제거하려면 EXTERNAL_ACCESS_INTEGRATIONS 속성도 설정 해제합니다.
첨부된 시크릿을 업데이트하거나 수정하려면 SET SECRETS에 :doc:`/sql-reference/sql/alter-streamlit`을 사용합니다.
예: 인증된 외부 API를 사용하여 Container Runtime Streamlit 앱 생성¶
이 예제에서는 시크릿 API 키를 통해 외부 API를 호출하는 Streamlit in Snowflake 앱을 생성하는 방법을 보여줍니다.
Container Runtime에서 Cortex Agent 호출하기¶
Container Runtime 앱에서 Cortex Agent를 호출하려면 기본 Snowpark Container Services 컨테이너에서 세션 토큰을 읽은 후 requests 라이브러리를 사용합니다. 이는 :code:`_snowflake.send_snow_api_request()`에 권장되는 대체 방법입니다.
Warehouse Runtime의 시크릿¶
Warehouse Runtime에서는 _snowflake 모듈을 사용하여 Streamlit 앱 코드에서 직접 시크릿에 액세스합니다. Warehouse Runtime은 저장 프로시저의 _snowflake 모듈에 대한 액세스 권한을 상속하며, 이를 통해 Streamlit 오브젝트에서 참조되는 시크릿을 검색할 수 있습니다.
Warehouse Runtime에서 시크릿을 사용하려면 다음을 수행합니다.
Snowflake에서 시크릿 오브젝트를 만듭니다. 자세한 내용은 CREATE SECRET 섹션을 참조하십시오.
외부 액세스 통합을 만들고 여기에 시크릿을 할당합니다.
SECRETS 매개 변수를 사용하여 Streamlit 오브젝트에서 시크릿을 참조합니다.
외부 액세스 통합 및 시크릿 모두를 Streamlit 오브젝트에 할당해야 합니다. Streamlit 오브젝트에 시크릿을 단독으로 할당할 수는 없습니다.
Streamlit 앱 코드에서
_snowflake모듈을 가져와 시크릿을 검색합니다.
_snowflake 모듈을 사용한 시크릿 액세스에 대한 자세한 내용은 시크릿 액세스를 위한 Python API 섹션을 참조하세요.
Streamlit 구성¶
Streamlit 앱에는 구성 파일(.streamlit/config.toml)이 포함될 수 있습니다. 이 파일을 사용하면 테마, 레이아웃, 동작 등 앱의 다양한 측면을 사용자 지정할 수 있습니다. 구성 파일은 TOML 형식으로 작성됩니다. 사용 가능한 구성 옵션에 대한 자세한 내용은 |config.toml|에 대한 Streamlit 설명서를 참조하세요.
구성 옵션에 대한 지원은 런타임 환경에 따라 다릅니다. Container Runtime은 일반적으로 특히 정적 서비스의 경우 Warehouse Runtime보다 구성 옵션에 대한 광범위한 지원을 제공합니다. 다음 테이블은 Warehouse Runtime 및 Container Runtime에서 지원되는 구성 섹션을 보여줍니다.
구성 섹션 |
Warehouse Runtime |
Container Runtime |
|---|---|---|
|
지원되지 않음 |
제한된 지원( |
|
지원되지 않음 |
지원되지 않음 |
|
지원되지 않음 |
제한된 지원( |
|
지원되지 않음 |
지원됨 |
|
지원되지 않음 |
지원되지 않음 |
|
지원되지 않음 |
지원되지 않음 |
|
지원되지 않음 |
지원됨(사용 중단됨, 대신 환경 변수 사용) |
|
지원됨 |
지원됨 |
|
지원됨 |
지원됨 |
|
지원되지 않음 |
지원됨(단, 시크릿이 아닌 환경 변수에만 권장됨) |
|
지원됨 |
해당 없음 |
[snowflake.sleep] 섹션을 통해 Warehouse Runtime에서 슬립 타이머를 구성하는 방법에 대한 자세한 내용은 Streamlit 앱용 사용자 지정 슬립 타이머 섹션을 참조하세요.
다음 디렉터리 구조는 구성 파일이 있는 Streamlit 앱의 예를 보여줍니다.