Einrichten des externen Zugriffs für Snowflake Notebooks¶
Wenn Sie mit Notebooks arbeiten, müssen Sie möglicherweise externe Dienste aufrufen, für die oft sensible Anmeldeinformationen wie API-Schlüssel erforderlich sind. Um sensible Informationen zu schützen, können Sie in Snowflake verwaltete Geheimnisse verwenden, anstatt Anmeldeinformationen in Ihrem Notebook zu codieren.
Externe Zugriffsintegrationen (EAIs) werden über Netzwerkregeln konfiguriert und können optional Snowflake-Geheimnisse zur Authentifizierung verwenden.
Standardmäßig schränkt Snowflake den Datenverkehr von externen Endpunkten im Netzwerk ein. Um auf externe Endpunkte zuzugreifen, gehen Sie folgendermaßen vor:
Eine Netzwerkregel erstellen.
Erstellen Sie eine externe Netzwerkzugriffsintegration, die diese Regel verwendet.
Erstellen Sie ein Geheimnis für die Authentifizierung (falls erforderlich). Generische Zeichenfolgen-Geheimnisse erfordern ebenfalls eine EAI.
Verbinden Sie das Geheimnis mit der EAI.
Verknüpfen Sie EAI und das Geheimnis mit dem Notebook.
Bemerkung
EAIs und Netzwerkregeln müssen von einem Administrator der Organisation erstellt werden. Für erforderliche Berechtigungen siehe Anforderungen an die Zugriffssteuerung.
Konfigurieren Sie ein Notebook mit externem Zugriff und Geheimnissen¶
Dieses End-to-End-Beispiel zeigt, wie Sie ein Notebook so konfigurieren, dass es mit einem generischen Zeichenfolgen-Geheimnis auf die OpenAI API zugreift.
-- 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);
Bemerkung
Geheimnisse müssen sowohl mit der externen Zugriffsintegration (EAI) als auch mit dem Notebook verknüpft sein. Wenn ein Geheimnis nur mit einem davon verknüpft ist, ist es nicht über den Notebook-Code zugänglich.
Zugriff auf das Geheimnis in einem Notebook¶
Nachdem Sie das Geheimnis mit dem Notebook verknüpft haben, verwenden Sie das Objekt
st.secrets
, um auf seinen Wert im Notebook-Code zuzugreifen:
import streamlit as st
api_key = st.secrets['openai_key']
Zusätzliche EAI-Beispiele¶
Diese Beispiele zeigen, wie Sie den externen Zugriff für gängige Websites für Data Science und maschinelles Lernen einrichten:
EAI für 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;
EAI für Hugging Face¶
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;
Erteilen Sie USAGE-Berechtigungen zur Nutzung externer Zugriffsintegrationen¶
Nachdem Sie die EAIs erstellt haben, gewähren Sie den Rollen, die sie verwenden werden, die Berechtigung USAGE für die Integration:
GRANT USAGE ON INTEGRATION openai_integration TO ROLE my_notebook_role;
Die Rolle, mit der Sie das Notebook erstellen, muss über USAGE auf EAI verfügen. Die Gewährung von USAGE an die Rolle PUBLIC wird nicht funktionieren.
Aktivieren Sie externe Zugriffsintegrationen in Snowsight¶
Nachdem Sie EAIs erstellt und bereitgestellt haben, starten Sie die Notebook-Sitzung neu, um die von Ihnen erstellten Zugriffsintegrationen im Bereich External Access zu sehen.
Um Integrationen mit Snowsight zu ermöglichen:
Weitere Beispiele für Authentifizierung¶
OAuth-Zugriffstoken¶
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);
Geheimnis-Typ: GENERIC_STRING¶
Verwenden Sie ein GENERIC_STRING
-Geheimnis, um einen einzelnen Wert zu speichern, wie z. B. einen API-Schlüssel oder ein Token.
Erstellen Sie das Geheimnis:
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);
Bei GENERIC_STRING können Sie auf die Geheimnisse per Wörterbuch oder Attribut zugreifen:
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
Geheimnistyp: PASSWORD (Beispiel: GitHub Basic Auth)¶
Verwenden Sie ein PASSWORD
-Geheimnis, um ein Paar aus Benutzernamen und Kennwort zu speichern. Diese werden häufig für die grundlegende Authentifizierung mit externen APIs benötigt.
In diesem Beispiel greift das Notebook über ein PASSWORD
-Geheimnis und eine externe Zugriffsintegration auf die GitHub REST API zu.
Erstellen Sie das Geheimnis:
CREATE SECRET password_secret
TYPE = PASSWORD
USERNAME = 'my_user_name'
PASSWORD = 'my_password';
Verwenden Sie das Geheimnis als Teil einer EAI:
ALTER NOTEBOOK github_user_info
SET EXTERNAL_ACCESS_INTEGRATIONS = (github_access_int),
SECRETS = ('cred' = password_secret);
Greifen Sie auf das Geheimnis in Ihrem Code zu:
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())
Zusätzliche Ressourcen¶
Eine ausführliche Syntax finden Sie unter Überblick über den externen Netzwerkzugriff.
Einzelheiten zur Verwendung von CREATE SECRET finden Sie unter Erstellen eines Geheimnisses zur Darstellung von Anmeldeinformationen.
Weitere Beispiele für EAIs finden Sie unter Beispiele für externen Netzwerkzugriff oder Externen Zugriff für Snowflake Notebooks auf Github einrichten.