Snowflake Notebooks の外部アクセスの設定¶
ノートブックで作業する際、外部サービスを呼び出す必要があるかもしれません。その際、 API キーなどの認証情報を必要とすることがよくあります。機密情報をセキュアに保つために、ノートブックに認証情報をハードコーディングする代わりに、Snowflake内で管理するシークレットを使用することができます。
外部アクセス統合 (EAIs) はネットワークルールを使用して構成され、オプションで認証に Snowflake シークレットを使用できます。
デフォルトでは、Snowflakeは外部エンドポイントからのネットワークトラフィックを制限します。外部エンドポイントにアクセスするには、以下の手順に従います。
ネットワークルールを作成します。
このルールを使用する 外部ネットワークアクセス統合 を作成します。
認証のためのシークレット(必要な場合)を作成します。一般的な文字列シークレットには、 EAI も必要です。
シークレットを EAI に関連付けます。
EAI とシークレットをNotebooksに関連付けます。
注釈
EAIs およびネットワークルールは、組織管理者が作成する必要があります。必要な権限については、 アクセス制御の要件 を参照してください。
外部アクセスとシークレットを持つノートブックの構成¶
このエンドツーエンドの例では、一般的な文字列シークレットを使って OpenAI API にアクセスするように Notebooks を構成する方法を示します。
-- 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) とノートブックの両方に関連付けなければなりません。シークレットが1つしか関連付けられていない場合、ノートブックコードからはアクセスできません。
ノートブックの中のシークレットにアクセスする¶
シークレットをノートブックに関連付けた後、ノートブックのコードでその値にアクセスするには、
st.secrets
オブジェクトを使います。
import streamlit as st
api_key = st.secrets['openai_key']
追加の EAI 例¶
これらの例では、一般的なデータサイエンスや機械学習サイトの外部アクセスのセットアップ方法を紹介します。
PyPI の EAI¶
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 で外部アクセス統合を有効にします。¶
External Access ペインに作成したアクセス統合を表示するには、 EAIs を作成してプロビジョニングした後、Notebook セッションを再起動します。
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 Basic Auth)¶
ユーザー名とパスワードのペアを保存するには、 PASSWORD
シークレットを使用します。これらは、外部認証コード (APIs) での基本認証に必要となることがよくあります。
この例では、Notebooksは 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の外部アクセスを設定する をご参照ください。