Snowflake Notebooks 에 대한 외부 액세스 설정

노트북으로 작업할 때 외부 서비스를 호출해야 할 수 있는데, 이 경우 API 키와 같은 민감한 자격 증명이 필요한 경우가 많습니다. 민감한 정보를 보안을 유지하기 위해 노트북에 자격 증명을 하드코딩하는 대신 Snowflake 안에서 관리되는 시크릿을 사용할 수 있습니다.

외부 액세스 통합(EAIs) 은 네트워크 규칙을 사용하여 구성되며, 선택적으로 인증에 Snowflake 시크릿을 사용할 수 있습니다.

기본적으로 Snowflake는 외부 엔드포인트에서 발생하는 네트워크 트래픽을 제한합니다. 외부 엔드포인트에 액세스하려면 다음 단계를 따르십시오.

  1. 네트워크 규칙을 만듭니다.

  2. 규칙을 사용하는 외부 네트워크 액세스 통합 을 생성합니다.

  3. 인증 시크릿을 생성합니다(필요한 경우). 일반 문자열 시크릿에도 EAI 가 필요합니다.

  4. 시크릿을 EAI 에 연결합니다.

  5. 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);
Copy

참고

시크릿은 외부 액세스 통합(EAI)과 노트북 모두에 연결되어 있어야 합니다. 시크릿이 하나만 연결된 경우, 노트북 코드에서 액세스할 수 없습니다.

노트북 안의 시크릿에 액세스하기

  • 시크릿을 노트북에 연결한 후, 노트북 코드에서 해당 값에 액세스하려면 st.secrets 오브젝트를 사용하십시오.

import streamlit as st
api_key = st.secrets['openai_key']
Copy

추가 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;
Copy

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;
Copy

외부 액세스 통합을 사용할 수 있도록 USAGE 권한을 부여합니다

  • EAIs 를 생성한 후 이를 사용할 역할에 통합에 대한 USAGE 권한을 부여합니다.

    GRANT USAGE ON INTEGRATION openai_integration TO ROLE my_notebook_role;
    
    Copy

노트북을 생성하는 데 사용되는 역할은 EAI 에 USAGE 가 있어야 합니다. PUBLIC 역할에 USAGE 를 부여하면 작동하지 않습니다.

Snowsight 에서 외부 액세스 통합을 사용하도록 설정합니다.

EAIs 를 생성하고 프로비저닝한 후 노트북 세션을 다시 시작하면 External Access 창에서 생성한 액세스 통합을 확인할 수 있습니다.

Snowsight 를 사용해 통합을 활성화하려면:

  1. Projects » Notebooks 를 선택합니다.

  2. 노트북을 엽니다.

  3. 노트북 오른쪽 상단의 워크시트에 대한 추가 작업 아이콘을 선택합니다.

  4. Notebook settings 을 선택한 다음 External access 창을 선택합니다.

  5. 노트북에서 사용 설정할 EAIs 를 토글합니다.

추가 인증 예시

OAuth 액세스 토큰

CREATE OR REPLACE SECRET oauth_token
    TYPE = OAUTH2
    API_AUTHENTICATION = google_translate_oauth
    OAUTH_REFRESH_TOKEN = 'my-refresh-token';
Copy
# Using the secret as part of an EAI
  ALTER NOTEBOOK google_translate_test
    SET EXTERNAL_ACCESS_INTEGRATIONS=(google_translate_integration)
      SECRETS = ('cred' = oauth_token);
Copy

시크릿 유형: 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);
Copy

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
Copy

시크릿 유형: PASSWORD (예: GitHub 기본 인증)

PASSWORD 시크릿을 사용하여 사용자 이름와 비밀번호 쌍을 저장합니다. 이는 종종 외부 APIs 를 통한 기본 인증에 필수입니다.

이 예제에서는 노트북이 PASSWORD 시크릿과 외부 액세스 통합을 사용해 GitHub REST API 에 액세스합니다.

시크릿 생성:

CREATE SECRET password_secret
  TYPE = PASSWORD
  USERNAME = 'my_user_name'
  PASSWORD = 'my_password';
Copy

EAI 의 일부로 시크릿을 사용하십시오.

ALTER NOTEBOOK github_user_info
SET EXTERNAL_ACCESS_INTEGRATIONS = (github_access_int),
    SECRETS = ('cred' = password_secret);
Copy

코드의 시크릿에 액세스하십시오.

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())
Copy

추가 리소스