Snowflake Notebooks の外部アクセスの設定

ノートブックで作業する際、外部サービスを呼び出す必要があるかもしれません。その際、 API キーなどの認証情報を必要とすることがよくあります。機密情報をセキュアに保つために、ノートブックに認証情報をハードコーディングする代わりに、Snowflake内で管理するシークレットを使用することができます。

外部アクセス統合 (EAIs) はネットワークルールを使用して構成され、オプションで認証に Snowflake シークレットを使用できます。

デフォルトでは、Snowflakeは外部エンドポイントからのネットワークトラフィックを制限します。外部エンドポイントにアクセスするには、以下の手順に従います。

  1. ネットワークルールを作成します。

  2. このルールを使用する 外部ネットワークアクセス統合 を作成します。

  3. 認証のためのシークレット(必要な場合)を作成します。一般的な文字列シークレットには、 EAI も必要です。

  4. シークレットを EAI に関連付けます。

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

注釈

シークレットは外部アクセス統合 (EAI) とノートブックの両方に関連付けなければなりません。シークレットが1つしか関連付けられていない場合、ノートブックコードからはアクセスできません。

ノートブックの中のシークレットにアクセスする

  • シークレットをノートブックに関連付けた後、ノートブックのコードでその値にアクセスするには、 st.secrets オブジェクトを使います。

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

追加の 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;
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 で外部アクセス統合を有効にします。

External Access ペインに作成したアクセス統合を表示するには、 EAIs を作成してプロビジョニングした後、Notebook セッションを再起動します。

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 Basic Auth)

ユーザー名とパスワードのペアを保存するには、 PASSWORD シークレットを使用します。これらは、外部認証コード (APIs) での基本認証に必要となることがよくあります。

この例では、Notebooksは 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

追加のリソース