Verwenden von Geheimnissen in Notebooks in Workspaces

Unterstützung von Geheimnissen in Workspace-Notebooks

Snowflake-Notebooks, die in Workspaces laufen, können Geheimnisobjekte zusammen mit Integrationen für den externen Zugriff (EAIs) verwenden, sodass Anmeldeinformationen nie als Literale im Notebook-Code erscheinen. Konfigurieren Sie Geheimnisse und EAIs in SQL (z. B. in einem Arbeitsblatt). Verbinden Sie diese dann mit dem Notebook-Dienst, dem Scheduler oder dem EXECUTENOTEBOOKPROJECT-Aufruf.

Voraussetzungen: Einrichten von Geheimnissen und externem Zugriff

Bevor Sie Geheimnisse in einem Snowflake-Notebook verwenden können, konfigurieren Sie die zugrunde liegenden Sicherheitsobjekte und Netzwerkregeln. Diese Schritte werden außerhalb des Notebooks durchgeführt (z. B. in einem Snowflake-Arbeitsblatt).

Grundlegende Einrichtung von Geheimnissen

Um vorhandene Geheimnisse zu verwenden, führen Sie SHOW SECRETS aus (z. B.:code:SHOW SECRETS IN ACCOUNT;). Um ein neues Geheimnis zu erstellen, verwenden Sie CREATE SECRET.

Bemerkung

Ersetzen Sie SNOWPUBLIC und NOTEBOOKS in den Beispielen mit Ihrer Datenbank und Ihrem Schema.

-- Example: creating a GENERIC_STRING secret
CREATE OR REPLACE SECRET SNOWPUBLIC.NOTEBOOKS.MY_SECRET_STRING
  TYPE = GENERIC_STRING
  SECRET_STRING = 'your_api_key_here';

Weitere gängige Typen von Geheimnissen sind:

  • PASSWORD, das sowohl USERNAME und:code:PASSWORD erfordert.

  • OAUTH2, für Integrationen mit externen Anbietern (z. B.GitHub).

Integration für den externen Zugriff (EAI)

Damit ein Notebook beim Aufruf des öffentlichen Internets Geheimnisse verwenden kann, verbinden Sie eine Netzwerkregel und eine Integration für den externen Zugriff.

-- 1. Create a network rule to allow egress traffic
CREATE OR REPLACE NETWORK RULE my_api_rule
  MODE = EGRESS
  TYPE = HOST_PORT
  VALUE_LIST = ('api.example.com:443');

-- 2. Create the integration that bridges the rule and the secret
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_api_eai
  ALLOWED_NETWORK_RULES = (my_api_rule)
  ALLOWED_AUTHENTICATION_SECRETS = (SNOWPUBLIC.NOTEBOOKS.MY_SECRET_STRING)
  ENABLED = TRUE;

Erweiterte Authentifizierung (OAuth)

Für OAuth-basierte Anbieter erstellen Sie eine Sicherheitsintegration und vervollständigen Sie den manuellen OAuth-Ablauf mit SYSTEM$START_OAUTH_FLOW (und SYSTEM$FINISH_OAUTH_FLOW in derselben Sitzung). Dieser Ablauf ermöglicht es Snowflake, Token mit dem externen Anbieter auszutauschen. End-to-End-Beispiele finden Sie unter Beispiele für externen Netzwerkzugriff und Einrichten des externen Zugriffs für Snowflake Notebooks.

Notebook Service-Integration mit Geheimnissen

Sie können Geheimnisse in den Dialogen Erstellen, Bearbeiten und Zeitplaner des Notebooks auswählen.

  1. Wählen Sie im Navigationsmenü die Option Projects » Workspaces aus.

  2. Öffnen Sie Notebooks und starten Sie dann Create service (oder bearbeiten Sie einen bestehenden Service).

  3. Fügen Sie in Service settings eine Integration für den externen Zugriff hinzu, und wählen Sie ein oder mehrere Geheimnisse aus der Dropdown-Liste aus. Sie können mehrere Geheimnisse anhängen.

  4. Überprüfen Sie, ob der Dienst erfolgreich startet, und verwenden Sie dann Python-Zellen, um Geheimnisse mit der Snowpark Secrets-API oder von den in den folgenden Beispielen gezeigten Einbindungspfaden zu lesen.

Bemerkung

Wenn der vollständig qualifizierte Geheimnisname Sonderzeichen enthält (z. B.:code:SNOWPUBLIC.NOTEBOOKS."my secret 1"), normalisiert Snowflake den in Python und im Container verwendeten Pfad. Bindestriche, Leerzeichen und ähnliche Zeichen im Segment Name des Geheimnisses werden zu Unterstrichen. Bei Datenbank- und Schemasegmenten wird die Groß-/Kleinschreibung nicht berücksichtigt.

Beispiel: SNOWPUBLIC.NOTEBOOKS."my secret 1" ist für Python-Helpers als snowpublic/notebooks/my_secret_1 verfügbar (passen Sie Datenbank und Schema so an, dass sie mit dem Speicherort des Geheimnisses übereinstimmen).

Die Geheimnisdateien sind unter /secrets/ innerhalb des von Snowflake bereitgestellten Containers eingebunden. Ein generisches Zeichenfolgengeheimnis könnte zum Beispiel erscheinen unter:

/secrets/snowpublic/notebooks/my_secret_1/secret_string

Ersetzen Sie snowpublic und notebooks mit der Datenbank und dem Schema, die Eigentümer Ihrer Geheimnisse sind. Beim Abgleich von Datenbank-, Schema- und Geheimnisnamen wird die Groß-/Kleinschreibung nicht berücksichtigt.

Die Snowpark-Bibliothek stellt für jeden Geheimnistyp verschiedene Helper zur Verfügung, wie unten gezeigt.

Aufrufen von GENERIC_STRING-Geheimnisse aus einer Python-Zelle

from snowflake.snowpark.secrets import get_generic_secret_string

secret_1 = get_generic_secret_string('snowpublic/notebooks/my_secret_1')
print(secret_1)

print('Reading from the container mount path:')
print(open('/secrets/snowpublic/notebooks/my_secret_1/secret_string').read())

Aufrufen von PASSWORD-Geheimnisse aus einer Python-Zelle

from snowflake.snowpark.secrets import get_username_password

creds = get_username_password('snowpublic/notebooks/my_password_secret')
print('Username: ', creds.username)
print('Password: ', creds.password)

print('Container mount path:')
print(open('/secrets/snowpublic/notebooks/my_password_secret/username').read())
print(open('/secrets/snowpublic/notebooks/my_password_secret/password').read())

Aufrufen von OAUTH2-Geheimnisse aus einer Python-Zelle

from snowflake.snowpark.secrets import get_oauth_access_token

token = get_oauth_access_token('_/_/github_secret')
print(token)

print('Reading from the container mount path:')
print(open('/secrets/_/_/github_secret/access_token').read())

Ersetzen Sie _/_/github_secret mit dem normalisierten Pfad für Ihr OAuth2-Geheimnis (Datenbank/Schema/Name), nach den gleichen Regeln wie oben.

Planen von Notebooks mit Geheimnissen

Wenn Sie ein Notebook von Snowsight planen, fügen Sie im Planungsdialog die EAIs und Geheimnisse hinzu, welche die geplante Aufgabe verwenden sollte. Dadurch wird sichergestellt, dass der nicht interaktive Durchlauf denselben externen Zugriff und dieselben Anmeldeinformationen wie die interaktive Entwicklung erbt.

Nicht interaktive Durchläufe mit EXECUTE NOTEBOOK PROJECT und Geheimnissen

Nicht interaktive Durchläufe müssen sowohl EAIs als auch Geheimnisse auflisten, wenn das Notebook von ihnen abhängt. Übergeben Sie Integrationen mit EXTERNAL_ACCESS_INTEGRATIONS und übergeben Geheimnisse mit SECRETS. Die vollständige Syntax finden Sie unter EXECUTE NOTEBOOK PROJECT.

EXECUTE NOTEBOOK PROJECT "<database_name>"."<schema_name>"."<project_name>"
  MAIN_FILE = 'notebook.ipynb'
  COMPUTE_POOL = '<compute_pool_name>'
  RUNTIME = '<runtime_version>'
  QUERY_WAREHOUSE = '<warehouse_name>'
  ARGUMENTS = '<string>'
  REQUIREMENTS_FILE = '<path/to/requirements.txt>'
  EXTERNAL_ACCESS_INTEGRATIONS = ('integration_name')
  SECRETS = ( <database_name>.<schema_name>.<secret_name> [ , ... ] );

Ersetzen Sie die Platzhalter durch die Integrationen und vollqualifizierten Geheimnisse, die Ihr Notebook benötigt.