SELECTSELECT

SELECT

Secrets Management in Snowflake: Schritt-für-Schritt-Anleitung

By Jeff SkoldbergJan 24, 20254 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Was sind Snowflake Secrets?

Ein Secret in Snowflake ist ein Objekt auf Schema-Ebene, in dem Sie sensible Informationen wie API-Keys oder Passwörter ablegen können.

Wozu gibt es dieses Feature?

Snowflake hat in den letzten Monaten zahlreiche Funktionen ausgerollt, mit denen sich Anwendungen und Datenpipelines direkt in Snowflake entwickeln lassen:

  • Mit Snowpark Container Services lassen sich eigene Anwendungen in beliebigen Programmiersprachen betreiben.
  • Snowpark for Python etabliert sich als beliebte Wahl für Data-Engineering-Aufgaben – bis hin zu kompletten ELT-/ETL-Pipelines.
  • Alerts lassen sich inzwischen per E-Mail, Slack oder Microsoft Teams (via Webhook) verschicken.
  • Snowflake erlaubt mittlerweile API-Aufrufe ins öffentliche Internet – viele Nutzer wollen damit etwa die OpenAI-APIs in ihrem Snowflake-Account nutzen.

In all diesen Szenarien müssen Secrets gespeichert und abgerufen werden, um sich gegenüber verschiedenen Anwendungen und Services zu authentifizieren.

Vorteile, Secrets in Snowflake zu verwalten

  • In Snowflake angelegte Secrets nutzen dieselbe RBAC-Logik, die Sie bereits aus Snowflake kennen (z. B. grant usage on secret to role <role>).
  • Das Secret liegt direkt neben Ihrem Anwendungs- oder Pipeline-Code – kein zusätzliches System, das gepflegt werden muss.
  • Ein externer Secrets Manager (etwa AWS Secrets Manager) wäre nur schwer einsetzbar, solange es keinen schlanken Weg gibt, sich überhaupt gegenüber diesem Secrets Manager zu authentifizieren.

So erstellen Sie ein Snowflake Secret

In Snowflake gibt es vier Arten von Secrets; das DDL unterscheidet sich je nach Typ leicht.

OAuth:

Syntax

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = OAUTH2
  API_AUTHENTICATION = <security_integration_name>
  OAUTH_SCOPES = ( '<scope_1>' [ , '<scope_2>' ... ] )
  [ COMMENT = '<string_literal>' ]

Beispiel

-- Assume an integration exists:
CREATE OR REPLACE SECURITY INTEGRATION my_oauth2_integration
  TYPE = API_AUTHENTICATION
  AUTH_TYPE = OAUTH2
  ENABLED = TRUE
  OAUTH_CLIENT_ID = 'your_client_id'
  OAUTH_CLIENT_SECRET = 'your_client_secret'
  OAUTH_TOKEN_ENDPOINT = 'https://oauth2.example.com/token'
  OAUTH_ALLOWED_SCOPES = ('scope1', 'scope2');

-- create the secret
CREATE OR REPLACE SECRET my_oauth2_secret
  TYPE = OAUTH2
  API_AUTHENTICATION = my_oauth2_integration
  OAUTH_SCOPES = ('scope1', 'scope2')

Code ausklappen

Cloud Provider:

Syntax:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = CLOUD_PROVIDER_TOKEN
  API_AUTHENTICATION = '<cloud_provider_security_integration>'
  [ COMMENT = '<string_literal>' ]

Beispiel:

-- assume this integration exists called test_integration:
CREATE OR REPLACE SECRET test_secret
 TYPE = CLOUD_PROVIDER_TOKEN
 API_AUTHENTICATION = 'TEST_INTEGRATION';

Basic Auth:

Syntax:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = PASSWORD
  USERNAME = '<username>'
  PASSWORD = '<password>'
  [ COMMENT = '<string_literal>' ]

Beispiel:

CREATE OR REPLACE SECRET my_password_secret
 TYPE = PASSWORD
 USERNAME = 'db_user'
 PASSWORD = 'MySecurePass123!'
 COMMENT = 'Database credentials for application access';

Generic String:

Syntax:

CREATE [ OR REPLACE ] SECRET [ IF NOT EXISTS ] <name>
  TYPE = GENERIC_STRING
  SECRET_STRING = '<string_literal>'
  [ COMMENT = '<string_literal>' ]

Beispiel:

CREATE OR REPLACE SECRET my_string_secret
 TYPE = GENERIC_STRING
 SECRET_STRING = 'my-secret-api-key-123'
 COMMENT = 'API key for service authentication';

So nutzen Sie ein Snowflake Secret in Ihrem Code

Secrets lassen sich ausschließlich aus Java oder Python heraus abrufen. Wenn Sie eine Anwendung in Snowpark Container Services in einer anderen Programmiersprache betreiben, brauchen Sie ein kleines eigenes Modul in Java oder Python, das das Secret abruft und den Wert an Ihre Anwendung zurückgibt.

Hier ein Beispiel, wie Sie ein Secret mit Python abrufen.

Schritt 1: Funktion anlegen, die ein Secret per Name abruft

CREATE OR REPLACE FUNCTION get_secret_by_name(secret_name STRING)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = 3.9
HANDLER = 'get_secret_by_name'
EXTERNAL_ACCESS_INTEGRATIONS = (external_access_integration)
AS
$$
import _snowflake

def get_secret_by_name(secret_name):
    username_password_object = _snowflake.get_username_password(secret_name)

    username_password_dictionary = {}
    username_password_dictionary["Username"] = username_password_object.username

Code ausklappen

Schritt 2: Funktion aufrufen

1SELECT get_secret_by_name('jeffs_credentials');

Secrets in Notification Integrations / Webhooks einsetzen

Snowflake bietet einen komfortablen Weg, ein Secret an Notification Integrations zu übergeben, um Alerts an Webhooks (Slack, Microsoft Teams etc.) zu schicken.

Übergeben Sie dazu einfach den voll qualifizierten Namen database.schema.<secret_name> an das Argument WEBHOOK_SECRET des create notification integration-Statements. Zum Beispiel:

CREATE OR REPLACE NOTIFICATION INTEGRATION my_slack_webhook_int
  TYPE=WEBHOOK
  ENABLED=TRUE
  WEBHOOK_URL='https://hooks.slack.com/services/SNOWFLAKE_WEBHOOK_SECRET'
  WEBHOOK_SECRET=my_secrets_db.my_secrets_schema.my_slack_webhook_secret
  WEBHOOK_BODY_TEMPLATE='{"text": "SNOWFLAKE_WEBHOOK_MESSAGE"}'
  WEBHOOK_HEADERS=('Content-Type'='application/json');

Secrets in Snowflake verwalten

Alle Secrets anzeigen

Mit dem Befehl show secrets listen Sie alle Secrets auf.

show secrets; -- shows all secrets in account
show secrets in account; -- verbose way of `show secrets`
show secrets in database analytics; -- shows secrets for a database named analytics

Alle Secrets in Snowflake anzeigen

Secret löschen

Mit drop löschen Sie ein Secret:

drop secret my_oauth2_secret; -- this works if your worksheet or connection has a database and schema context set.
drop secret <fully qualified secret name> -- this will always work

Alle Secrets in Snowflake anzeigen

Secret ändern

Mit alter secret rotieren Sie Keys oder Passwörter oder passen beliebige andere Eigenschaften eines Secrets an.

1alter secret <fully qualitfied secret name> set <parameter> = <value>;

Secret beschreiben

Wenn Sie ein Secret mit describe secret <fully qualified secret name> beschreiben, liefert Snowflake folgende Felder zurück:

  • created on
  • name
  • schema_name
  • database_name
  • owner
  • comment
  • secret_type
  • username
  • oauth_access_token_expiry_time
  • oauth_refresh_token_expiry_time
  • oauth_scopes
  • integration_name

Alle Secrets in Snowflake anzeigen

Secrets direkt in Snowflake zu verwalten, ist ein wirkungsvoller Weg, den Umgang mit sensiblen Daten bei der Entwicklung von Anwendungen, Pipelines oder Alerts in Snowflake zu vereinfachen.

Im nächsten Artikel setzen wir dieses Wissen in die Praxis um und bauen einen Slack-Alert in Snowflake.

Jeff ist Data- und Analytics-Consultant mit über 15 Jahren Erfahrung in der Automatisierung von Insights und im Einsatz von Daten zur Steuerung von Geschäftsprozessen. Technologisch ist er auf Snowflake + dbt + Tableau spezialisiert. Branchenseitig bringt er Erfahrung aus Versorgungswirtschaft, klinischen Studien, Verlagswesen, CPG und Fertigung mit. Sie erreichen ihn jederzeit unter [email protected].