Snowflake Notebooks 에 대한 외부 액세스 설정¶
노트북으로 작업할 때 외부 서비스를 호출해야 할 수 있는데, 이 경우 API 키와 같은 민감한 자격 증명이 필요한 경우가 많습니다. 민감한 정보를 보안을 유지하기 위해 노트북에 자격 증명을 하드코딩하는 대신 Snowflake 안에서 관리되는 시크릿을 사용할 수 있습니다.
외부 액세스 통합(EAIs) 은 네트워크 규칙을 사용하여 구성되며, 선택적으로 인증에 Snowflake 시크릿을 사용할 수 있습니다.
기본적으로 Snowflake는 외부 엔드포인트에서 발생하는 네트워크 트래픽을 제한합니다. 외부 엔드포인트에 액세스하려면 다음 단계를 따르십시오.
네트워크 규칙을 만듭니다.
규칙을 사용하는 외부 네트워크 액세스 통합 을 생성합니다.
인증 시크릿을 생성합니다(필요한 경우). 일반 문자열 시크릿에도 EAI 가 필요합니다.
시크릿을 EAI 에 연결합니다.
EAI 및 시크릿을 노트북에 연결합니다.
참고
EAIs 및 네트워크 규칙은 조직 관리자가 생성해야 합니다. 필수 권한은 액세스 제어 요구 사항 을 참조하십시오.
외부 액세스 및 시크릿이 있는 노트북 구성하기¶
이 엔드투엔드 예제는 일반 문자열 시크릿을 사용해 OpenAI API 에 액세스하도록 노트북을 구성하는 방법을 보여 줍니다.
-- Step 1: Create a secret
CREATE SECRET openai_key
TYPE = GENERIC_STRING
SECRET_STRING = '<your-api-key>';
-- Step 2: Create a network rule
CREATE OR REPLACE NETWORK RULE openai_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('api.openai.com');
-- Step 3: Create an external access integration that uses the network rule and secret
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION openai_integration
ALLOWED_NETWORK_RULES = (openai_rule)
ALLOWED_AUTHENTICATION_SECRETS = (openai_key)
ENABLED = true;
-- Step 4: Associate the integration and secret with the notebook
ALTER NOTEBOOK my_notebook
SET EXTERNAL_ACCESS_INTEGRATIONS = (openai_integration),
SECRETS = ('openai_key' = openai_key);
참고
시크릿은 외부 액세스 통합(EAI)과 노트북 모두에 연결되어 있어야 합니다. 시크릿이 하나만 연결된 경우, 노트북 코드에서 액세스할 수 없습니다.
노트북 안의 시크릿에 액세스하기¶
시크릿을 노트북에 연결한 후, 노트북 코드에서 해당 값에 액세스하려면
st.secrets
오브젝트를 사용하십시오.
import streamlit as st
api_key = st.secrets['openai_key']
추가 EAI 예제¶
이 예는 일반적인 데이터 과학 및 머신 러닝 사이트에 대한 외부 액세스를 설정하는 방법을 보여줍니다.
EAI (PyPI).¶
CREATE OR REPLACE NETWORK RULE pypi_network_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('pypi.org', 'pypi.python.org', 'pythonhosted.org', 'files.pythonhosted.org');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION pypi_access_integration
ALLOWED_NETWORK_RULES = (pypi_network_rule)
ENABLED = true;
Hugging Face용 EAI¶
CREATE OR REPLACE NETWORK RULE hf_network_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('huggingface.co', 'cdn-lfs.huggingface.co');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION hf_access_integration
ALLOWED_NETWORK_RULES = (hf_network_rule)
ENABLED = true;
외부 액세스 통합을 사용할 수 있도록 USAGE 권한을 부여합니다¶
EAIs 를 생성한 후 이를 사용할 역할에 통합에 대한 USAGE 권한을 부여합니다.
GRANT USAGE ON INTEGRATION openai_integration TO ROLE my_notebook_role;
노트북을 생성하는 데 사용되는 역할은 EAI 에 USAGE 가 있어야 합니다. PUBLIC 역할에 USAGE 를 부여하면 작동하지 않습니다.
Snowsight 에서 외부 액세스 통합을 사용하도록 설정합니다.¶
EAIs 를 생성하고 프로비저닝한 후 노트북 세션을 다시 시작하면 External Access 창에서 생성한 액세스 통합을 확인할 수 있습니다.
Snowsight 를 사용해 통합을 활성화하려면:
추가 인증 예시¶
OAuth 액세스 토큰¶
CREATE OR REPLACE SECRET oauth_token
TYPE = OAUTH2
API_AUTHENTICATION = google_translate_oauth
OAUTH_REFRESH_TOKEN = 'my-refresh-token';
# Using the secret as part of an EAI
ALTER NOTEBOOK google_translate_test
SET EXTERNAL_ACCESS_INTEGRATIONS=(google_translate_integration)
SECRETS = ('cred' = oauth_token);
시크릿 유형: GENERIC_STRING¶
API 키 또는 토큰과 같은 단일 값을 저장하려면 GENERIC_STRING
시크릿을 사용합니다.
시크릿 생성:
CREATE SECRET sf_openai_key
TYPE = GENERIC_STRING
SECRET_STRING = '<string_literal>';
-- SQL: Associate the secret and EAI with the notebook
ALTER NOTEBOOK openai_test
SET EXTERNAL_ACCESS_INTEGRATIONS = (openai_access_int),
SECRETS = ('openai_key' = sf_openai_key);
GENERIC_STRING 시크릿의 경우 사전 또는 특성 스타일로 액세스합니다.
import streamlit as st
# Access the string value directly
my_openai_key = st.secrets['openai_key']
# or using attribute access
my_openai_key = st.secrets.openai_key
시크릿 유형: PASSWORD (예: GitHub 기본 인증)¶
PASSWORD
시크릿을 사용하여 사용자 이름와 비밀번호 쌍을 저장합니다. 이는 종종 외부 APIs 를 통한 기본 인증에 필수입니다.
이 예제에서는 노트북이 PASSWORD
시크릿과 외부 액세스 통합을 사용해 GitHub REST API 에 액세스합니다.
시크릿 생성:
CREATE SECRET password_secret
TYPE = PASSWORD
USERNAME = 'my_user_name'
PASSWORD = 'my_password';
EAI 의 일부로 시크릿을 사용하십시오.
ALTER NOTEBOOK github_user_info
SET EXTERNAL_ACCESS_INTEGRATIONS = (github_access_int),
SECRETS = ('cred' = password_secret);
코드의 시크릿에 액세스하십시오.
import streamlit as st
import requests
from requests.auth import HTTPBasicAuth
# Access credentials from the secret
username = st.secrets.cred.username
password = st.secrets.cred.password
# Make an authenticated request
response = requests.get(
'https://api.github.com/user',
auth=HTTPBasicAuth(username, password)
)
print(response.status_code)
print(response.json())
추가 리소스¶
자세한 구문은 외부 네트워크 액세스 개요 를 참조하십시오.
CREATE SECRET 사용에 대한 자세한 내용은 자격 증명을 나타내는 시크릿 만들기 섹션을 참조하십시오.
EAIs의 추가 예제는 외부 네트워크 액세스 예시 또는 Github의 Snowflake Notebooks에 대한 외부 액세스 설정하기 를 참조하십시오.