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:

  1. Eine Netzwerkregel erstellen.

  2. Erstellen Sie eine externe Netzwerkzugriffsintegration, die diese Regel verwendet.

  3. Erstellen Sie ein Geheimnis für die Authentifizierung (falls erforderlich). Generische Zeichenfolgen-Geheimnisse erfordern ebenfalls eine EAI.

  4. Verbinden Sie das Geheimnis mit der EAI.

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

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']
Copy

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

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

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

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:

  1. Wählen Sie Projects » Notebooks aus.

  2. Öffnen Sie Ihr Notebook.

  3. Wählen Sie das Symbol Weitere Aktionen für das Arbeitsblatt oben rechts auf Ihrem Notebook.

  4. Wählen Sie Notebook settings, und wählen Sie dann den Bereich External access.

  5. Schalten Sie die EAIs ein, die Sie für das Notebook aktivieren möchten.

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

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

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
Copy

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

Verwenden Sie das Geheimnis als Teil einer EAI:

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

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

Zusätzliche Ressourcen