Workload Identity Federation

Dieses Dokument richtet sich an die folgenden Zielgruppen:

  • Entwickler von internen Clouddiensten.

  • Administratoren, die Integrationen mit internen und externen Diensten verwalten.

  • Entwickler von mehrinstanzenfähigen SaaS-Anwendungen, die OpenID Connect (OIDC) Federation ID-Token für einzelne Workloads ausgeben möchten, die auf ihrer Plattform ausgeführt werden, sodass sich jeder Kunden-Workload bei Snowflake als dedizierter Benutzer authentifizieren kann.

Workload Identity Federation (WIF) ist eine Methode der Dienst-zu-Dienst-Authentifizierung, mit der sich Workloads, wie Anwendungen, Dienste oder Container, bei Snowflake über das native Identitätssystem ihres Cloudanbieters authentifizieren können, z. B. AWS Identity and Access Management (AWS IAM)-Rollen, Microsoft Entra ID- und Google Cloud-Dienstkonten, um eine Berechtigung zu erhalten, die Snowflake verwenden und validieren kann.

Mit WIF entfällt die Notwendigkeit der Verwaltung und Speicherung von langlebigen Anmeldeinformationen wie Kennwörter, API-Schlüssel, Schlüsselpaare und programmgesteuerte Zugriffstoken für die Authentifizierung bei Snowflake. Außerdem vereinfacht WIF den Prozess zur Beschaffung von Anmeldeinformationen, während andere Methoden wie die externe OAuth häufig einen höheren Einrichtungsaufwand erfordert. Anwendungen, Dienste und Container, die Snowflake Connectors verwenden, erhalten automatisch kurzlebige Anmeldeinformationen vom Identitätsanbieter ihrer Plattform (IdP) durch die nativen Mechanismen der jeweiligen Plattform.

Vorteile

In diesem Abschnitt wird beschrieben, warum Sie die Verwendung von WIF für die Authentifizierung möglicherweise in Betracht ziehen sollten:

  • Kosteneffizient: Das Verwenden vorhandener IdPs zur Verwaltung von Dienstidentitäten reduziert den Bedarf an zusätzlichen Tools oder Lizenzen, was kostengünstig sein kann.

  • Interoperabilität: Gängige Cloudanbieter-Dienste, wie beispielsweise AWS IAM, Entra ID und Google Cloud, unterstützen und fördern WIF als Authentifizierungsmethode für externe Workloads.

  • Praktische Prüfung und Überwachung:

    • Administratoren können bestehende Cloudanbieter-Dienste nutzen, wie z. B. AWS CloudTrail und Azure Monitor, um Aktivitäten zu protokollieren und zu überwachen.

    • Snowflake-Administratoren können die Ansichten LOGIN_HISTORY und CREDENTIALS im ACCOUNT_USAGE-Schema zur Überwachung und Prüfung von Diensten abfragen, die WIF verwenden.

Workflow für die Implementierung der Workload Identity Federation

Sie können WIF verwenden, um eine Vielzahl von Workloads mit verschiedenen IdPs zu authentifizieren, aber der grundlegende Workflow, wie in den folgenden Schritten gezeigt, bleibt gleich:

  1. Konfigurieren Sie als Workload-Administrator Ihren Dienst so, dass er einen nativen Identitätsanbieter verwendet, damit der Anbieter eine Bescheinigung der Identität Ihres Workloads ausstellen kann. Diese Berechtigung ist oft, aber nicht immer, ein JSON Web Token (JWT).

  2. Erstellen Sie als Snowflake-Administrator einen Snowflake-Dienstbenutzer für Ihren Workload. Sie setzen die Eigenschaften dieses Benutzers auf die Werte, die Sie in der vom Anbieter gesendeten Berechtigung finden. Eine Benutzereigenschaft kann zum Beispiel den Namen einer IAM-Rolle oder die Aussteller-URL des Anbieters angeben.

  3. Als Workload-Entwickler können Sie Ihren Workload so konfigurieren, dass er einen Snowflake-Treiber verwendet. Die Treiber senden die Bescheinigung zur Überprüfung an Snowflake.

End-to-End-Beispiele dieses Workflows für verschiedene Typen von Workloads und IdPs finden Sie unter Anwendungsfälle.

Anforderungen an die Zugriffssteuerung

Für die Konfiguration von WIF für einen Snowflake-Dienstbenutzer, d. h. ein Benutzer mit der TYPE-Eigenschaft eingestellt auf SERVICE, müssen Sie Ihren aktivierten Rollen eine der folgenden Berechtigungen erteilen:

  • OWNERSHIP für den Dienstbenutzer.

  • MODIFY PROGRAMMATIC AUTHENTICATION METHODS für den Dienstbenutzer.

Unterstützte Snowflake-Treiber

Ein Workload verwendet einen Snowflake-Treiber, um eine Bescheinigung zu senden, wenn er sich mit Snowflake verbindet. Die folgenden Treiber unterstützen die Workload Identity Federation:

Treiber

Mindestversion

Go

v1.16.0

JDBC

v3.26.0

.NET

v4.8.0

Node.js

v2.2.0

ODBC

v3.11.0

Python

v3.17.0

Minimieren der Anzahl der Snowflake-Identitäten

Das Erstellen eines dedizierten Snowflake-Benutzers für jeden WIF-Workload kann bei umfangreicher Skalierung eine Herausforderung sein. Es ist oft besser, zu konsolidieren, sodass mehrere Workloads eine klar definierte, begrenzte Anzahl von Snowflake-Dienstbenutzern zur Authentifizierung verwenden. Dieser Ansatz reduziert die Anzahl der Identitäten in Snowflake, vereinfacht die Verwaltung des Benutzerlebenszyklus und ermöglicht konsistente Zugriffsmuster, ohne Snowflake-Benutzende eng an einzelne Workloads oder Infrastruktur zu binden.

Erstellen eines einzelnen Benutzers für mehrere Workloads

Bei einigen Cloudanbietern kann die einem Workload zugewiesene Identität eine andere Identität annehmen (impersonieren). Nehmen wir zum Beispiel an, ein Workload auf Google Cloud ist mit dem Dienstkonto A verbunden. Sie können den Identitätswechsel des Dienstkontos verwenden, sodass sich Dienstkonto``A`` als Dienstkonto B authentifiziert. Das heißt, Dienstkonto A nimmt die Identität des Dienstkontos B an, sodass sich der Workload bei Snowflake als Benutzer B authentifizieren kann.

Der Identitätswechsel ist besonders in einer Umgebung mit vielen Workloads nützlich, da die Erstellung einer 1:1-Zuordnung zwischen jedem Workload und einem Snowflake-Dienstbenutzer eine hohen Betriebsaufwand erfordert und nur schwer zu verwalten ist. Indem mehreren Workloads erlaubt wird, eine gemeinsame Snowflake-Identität zu übernehmen, können Teams den Snowflake-Zugriff über eine kleine Gruppe von Dienstbenutzern zentralisieren und gleichzeitig die Zugriffssteuerung über das IAM des Cloudanbieters durchsetzen.

Voraussetzung

Um den Identitätswechsel zu verwenden, sodass sich mehrere Workloads mit einer einzigen Snowflake-Identität authentifizieren, muss sich der Workload in Google Cloud oder AWS befinden. Derzeit unterstützt Microsoft Azure keinen Identitätswechsel.

Workflow

  1. Konfigurieren Sie als Workload-Admin die Workloads so, dass die zugehörigen Identitäten eine andere Identität übernehmen.

  2. Erstellen Sie als Snowflake-Admin einen Dienstbenutzer, der der Identität des Cloudanbieters entspricht, der sich bei Snowflake authentifiziert. Beispiel: Wenn Workloads das Dienstkonto D zum Authentifizieren verwenden, erstellen Sie einen Dienstbenutzer und setzen Sie dessen SUBJECT-Parameter auf den eindeutigen Bezeichner des Dienstkontos D.

  3. Verwenden Sie als Workload-Entwicklender einen Verbindungsparameter des Treibers, um die Identitätskette für die Workloads zu definieren, die den Identitätswechsel verwenden. Der Parameter wird auf eine Liste von Zeichenfolgen gesetzt, wobei jede Zeichenfolge eine Cloudanbieteridentität ist (z. B. eine Dienstkonto-ID).

    Der Treiber folgt der in der Liste definierten Identitätskette, um das Token zu erhalten, das zur Autorisierung der nächsten Cloudanbieteridentität benötigt wird. Jede Identität in der Kette benötigt nur die Berechtigung, um die nächste Identität zu übernehmen. Die letzte Identität in der Liste erhält das Snowflake-Verbindungstoken, das verwendet wird, um eine Verbindung zu Snowflake herzustellen.

    Informationen zum Ermitteln der Syntax des Verbindungsparameters für Ihren Treiber finden Sie in der Dokumentation des Treibers.

Beispiel

Angenommen, ein Google Cloud-Workload ist mit dem Dienstkonto A verknüpft, übernimmt aber die Identität des Dienstkontos B an, welches dann die Identität des Dienstkontos D übernimmt. Um den Python-Treiber so einzurichten, dass sich der Workload mit WIF unter Verwendung der Identität des Dienstkontos D authentifiziert, definieren Sie den Verbindungsparameter wie folgt:

workload_identity_impersonation_path=['service_account_a@my-project.iam.gserviceaccount.com',
                                      'service_account_b@my-project.iam.gserviceaccount.com',
                                      'service_account_d@my-project.iam.gserviceaccount.com']
Copy

Der Snowflake-Dienstbenutzer, der für den Workload erstellt wurde, sollte den Bezeichner der letzten Identität in der Identitätskette enthalten. Erstellen Sie den Dienstbenutzer anhand des obigen Beispiels mit dem folgenden Befehl:

CREATE USER <username>
  WORKLOAD_IDENTITY = (
    TYPE = GCP
    SUBJECT = 'service_account_d@my-project.iam.gserviceaccount.com'
  )
  TYPE = SERVICE
  DEFAULT_ROLE = PUBLIC;
Copy

Erstellen eines einzelnen Benutzers für mehrere GitHub- oder GitLab-Umgebungen

Wenn Sie GitHub-Aktionen oderGitLab-Projekte verwenden, können Sie den OIDC-Anbieter des Tools verwenden, um WIF zum Authentifizieren bei Snowflake einzusetzen. Standardmäßig enthält das OIDC-Token für jede GitHub-Aktion bzw. jedes GitLab-Projekt möglicherweise ein anderes Subjekt im sub-Anspruch, was erfordern würde, dass Sie mehrere Snowflake-Dienstbenutzer haben, einen für jedes Subjekt.

Allerdings lässt sich mit GitHub undGitLab der sub-Anspruch der jeweiligen OIDC-Token anpassen. Damit können Sie Ihr Tool so konfigurieren, dass das Subjekt von OIDC-Token für alle Ihre Umgebungen gleich ist. Wenn Sie einen Snowflake-Dienstbenutzer erstellen, geben Sie das Subjekt der OIDC-Token an, die er von GitHub oder GitLab erhält. Da das Subjekt in den Token immer dasselbe ist (d. h. der kundenspezifische Wert), benötigen Sie nur einen Dienstbenutzer für alle Ihre Umgebungen.

Weitere Informationen zur Anpassung des sub-Anspruchs eines GitHub- oderGitLab OIDC-Tokens finden Sie in den folgenden Ressourcen:

  • GitHub: Um den Subjektanspruch für eine Organisation oder ein Repository anzupassen, finden Sie entsprechende Informationen in der GitHub-Dokumentation.

  • GitLab: Informationen zur Verwendung der Project API zum Anpassen des sub-Anspruchs des GitLab OIDC-Token finden Sie in der GitLab-Dokumentation. Derzeit wird der Anspruch mit dem ci_id_token_sub_claim_components-Attribut angepasst.

Nachdem Sie einen kundenspezifischen sub-Anspruch definiert haben, der für alle IhreGitHub- bzw. GitLab-Umgebungen gleich ist, konfigurieren Sie den SUBJECT-Parameter Ihres Snowflake-Dienstbenutzers so, dass er dem kundenspezifischen übereinstimmt:code:sub-Anspruch entspricht.

Verstärkung der Sicherheitsfunktionen

Sie können eine :doc:` Authentifizierungsrichtlinie </user-guide/authentication-policies>` verwenden, um zu steuern, welche Snowflake-Dienstbenutzer sich mit WIF authentifizieren können. Sie können die Authentifizierungsrichtlinie auch so erstellen und festlegen, dass sich ein Workload nur authentifizieren kann, wenn dabei ein bestimmter Identitätsanbieter oder ein Konto bei diesem Anbieter verwendet wird.

Die folgende Authentifizierungsrichtlinie ermöglicht beispielsweise einem Workload sich nur zu authentifizieren, wenn dieser Microsoft Entra ID als Anbieter verwendet und der Aussteller der Bescheinigung ein Microsoft Entra ID-Mandant mit Mandanten-ID https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0 ist:

CREATE AUTHENTICATION POLICY workload_policy
  WORKLOAD_IDENTITY_POLICY=(
    ALLOWED_PROVIDERS = (AZURE)
    ALLOWED_AZURE_ISSUERS = (
      'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0')
  );
Copy

Weitere Informationen zum WORKLOAD_IDENTITY_POLICY-Parameter finden Sie unter CREATE AUTHENTICATION POLICY.

Weitere Informationen zum Einstellen einer Authentifizierungsrichtlinie, sodass sie erzwungen wird, finden Sie unter Festlegen einer Authentifizierungsrichtlinie für ein Konto oder einen Benutzer.

Anwendungsfälle

Die folgenden Anwendungsfälle sind Beispiele für die Implementierung von WIF für einen Workload:

Authentifizierung mit AWS IAM-Rollen und einem Snowflake Python-Treiber

Führen Sie die folgenden Aufgaben aus, um WIF zu verwenden, um sich bei Snowflake über Ihren AWS-Dienst zu authentifizieren:

AWS konfigurieren

Um Ihren AWS-Dienst für die Verwendung von AWS IAM als Identitätsanbieter zu konfigurieren, fügen Sie eine IAM-Rolle hinzu. Weitere Informationen dazu finden Sie in der AWS-Dokumentation, die Ihrem Workload entspricht.

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, müssen Sie den Amazon Resource Identifier (ARN) haben, der den AWS-Benutzer oder die Rolle, die mit der Instanz verbunden ist, die sich bei Snowflake authentifiziert, eindeutig identifiziert. Führen Sie die folgenden Schritte aus, um die ARN einer IAM-Rolle zu erhalten:

  1. Melden Sie sich bei der AWS-Konsole an, und navigieren Sie dann zum IAM-Dashboard.

  2. Wählen Sie im linken Navigationsbereich Roles aus.

  3. Wählen Sie den Namen der Rolle aus, die Sie mit Ihrer AWS-Instanz verknüpft haben.

  4. Im Summary-Abschnitt finden Sie die ARN. Wählen Sie dann das Copy-Symbol aus.

Snowflake akzeptiert die folgenden Formen von IAM-Bezeichnern:

  • arn:aws:iam::account:user/user_name_with_path

  • arn:aws:iam::account:role/role_name_with_path

  • arn:aws:sts::account:assumed-role/role_name/role_session_name

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AWS
        ARN = '<amazon_resource_identifier>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    Wobei ARN der Wert ist, den Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    import os
    import snowflake.connector
    
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AWS'
    )
    
    Copy
  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Authentifizierung mit Microsoft Entra ID und einem Snowflake Python-Treiber

Führen Sie die Schritte in den einzelnen unten aufgeführten Abschnitten aus, damit WIF verwendet wird, um sich bei Snowflake mithilfe von Microsoft Entra ID zu authentifizieren:

Microsoft Entra ID konfigurieren

Ein Microsoft Entra ID-Mandantenadministrator muss die folgenden Schritte ausführen, um die Verwendung der Snowflake-Workload-Identität zu ermöglichen. Diese Schritte müssen nur einmal pro Microsoft Entra ID-Mandant ausgeführt werden:

  1. Melden Sie sich beim Microsoft Azure-Portal an.

  2. Stellen Sie sicher, dass Sie über Admin-Berechtigungen für Azure-Mandanten verfügen.

  3. Stimmen Sie der Installation der mehrinstanzenfähigen Snowflake EntraID-App zu, indem Sie die Zustimmungs-URI aufrufen.

    Die mehrinstanzenfähige Snowflake EntraID-App ist vom Herausgeber verifiziert und repräsentiert Snowflake als Ressource. Die App wird als Zielgruppe für das Zugriffstoken verwendet, wenn Sie sich bei Snowflake authentifizieren. Diese App benötigt nur grundlegende Berechtigungen und ist nicht berechtigungsabhängig.

  4. Wählen Sie Accept aus, um der Snowflake EntraID-App Berechtigungen zu erteilen.

Microsoft Azure konfigurieren

Führen Sie die folgenden Schritte aus, um Ihren Microsoft Azure-Dienst für die Verwendung von WIF zu konfigurieren:

  1. Melden Sie sich beim Microsoft Azure-Portal an.

  2. Wählen Sie Ihren Workload aus, z. B. eine virtuelle Maschine oder einen App-Dienst.

  3. Navigieren Sie in der Seitenleiste zu Security » Identity.

  4. Aktivieren Sie eine verwaltete Identität für eine Azure VM oder eine Azure-Funktion.

  5. Speichern Sie die Object (Principal) ID für einen späteren Schritt.

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, benötigen Sie die folgenden Informationen:

  • Die Objekt-ID (Prinzipal-ID) mit Unterscheidung von Groß-/Kleinschreibung der verwalteten Identität, die Sie im vorherigen Schritt aktiviert haben. Sie können das Azure-Portal verwenden, um diesen Bezeichner von der Identity-Seite für Ihr Azure VM oder -Funktion zu kopieren.

  • Ihre Microsoft Entra-Mandanten-ID. Sie verwenden diesen Wert, um die URL für die Autorisierung zu erstellen.

    • Um die Mandanten-ID mithilfe der Microsoft Entra Console zu erhalten, siehe So finden Sie Ihre Microsoft Entra-Mandanten-ID.

    • Damit Sie die Mandanten-ID durch Verwendung von PowerShell erhalten, führen Sie die folgenden Befehle aus:

      Connect-AzAccount
      Get-AzTenant
      
      Copy

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AZURE
        ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0'
        SUBJECT = '<managed_identity_object_id>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    Wobei ISSUER und SUBJECT die Werte sind, die Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AZURE'
    )
    
    Copy
  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Bemerkung

Als Workload-Entwickler müssen Sie möglicherweise eine Umgebungsvariable festlegen, die sich auf die verwaltete Identität bezieht, die Ihr Workload-Administrator aktiviert hat. Wenn Ihr Administrator eine vom Benutzer zugewiesene verwaltete Identität anstelle einer vom System zugewiesenen verwalteten Identität aktiviert hat, müssen Sie die MANAGED_IDENTITY_CLIENT_ID-Umgebungsvariable für die Client-ID der verwalteten Identität festlegen, die Sie für die Authentifizierung bei Snowflake verwenden möchten.

Authentifizierung mit Google Cloud-Dienstkonten und einem Snowflake Python-Treiber

Führen Sie die folgenden Aufgaben aus, um WIF zu verwenden, um sich bei Snowflake über Ihren Google Cloud-Dienst zu authentifizieren:

Google Cloud konfigurieren

Um Ihren Dienst für die Verwendung von Google Cloud als Identitätsanbieter zu konfigurieren, verbinden Sie ein Dienstkonto mit GCE oder Ihrer Cloud Run-Instanz.

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, müssen Sie den Wert der uniqueId-Eigenschaft des Dienstkontos kennen. Um diese eindeutige ID zu erhalten, verwenden Sie die Google Cloud CLI, um den folgenden Befehl auszuführen:

gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
Copy

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = GCP
        SUBJECT = '<unique_id_of_service_account>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    Wobei SUBJECT der Wert ist, den Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='GCP'
    )
    
    Copy
  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Authentifizierung mit einem OpenID Connect (OIDC)-Aussteller von Elastic Kubernetes Service (EKS)

Führen Sie die Schritte in den einzelnen unten aufgeführten Abschnitten aus, damit WIF verwendet wird, um sich bei Snowflake mithilfe von Elastic Kubernetes Service (EKS) zu authentifizieren:

EKS konfigurieren

  1. Konfigurieren Sie EKS, um ID-Token auszugeben, die mit Snowflake kompatibel sind.

    1. Konfigurieren Sie Ihre Pod-Bereitstellung YAML, um ein projiziertes ServiceAccount-Token-Volumen einzufügen.

    2. Konfigurieren Sie die ID-Token, damit ein Zielgruppenanspruch (Audience Claim) mit snowflakecomputing.com enthalten ist.

      Das folgende Beispiel zeigt eine YAML-Konfiguration mit der richtigen Zielgruppe:

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, benötigen Sie die folgenden Informationen:

  • Die Aussteller-URL des OIDC-Anbieters, der das ID-Token für das Kubernetes-Dienstkonto generiert. Um diese Aussteller-URL zu erhalten, können Sie eine der folgenden Aufgaben ausführen:

    • Navigieren Sie zur Overview-Registerkarte Ihres Clusters, und kopieren Sie den Wert in das Feld OpenID Connect provider URL.

    • Führen Sie den folgenden Befehl mit Zugriff auf den API-Serverendpunkt aus:

      aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
      
      Copy
  • Der Namespace und der Name des Kubernetes-Dienstkontos. Sie verwenden diese Informationen, um das Subjekt des ID-Tokens zu erstellen, das vom OIDC-Anbieter ausgegeben wird.

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER my_eks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    Wobei ISSUER und SUBJECT die Werte sind, die Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    Wobei service_account_token_path derjenige ist, den Sie im Schritt EKS konfigurieren erstellt haben. Basierend auf dem YAML-Beispiel in diesem Schritt wäre der Token-Pfad /var/run/secrets/tokens/snowflake-token.

  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Authentifizierung mit einem OpenID Connect (OIDC)-Aussteller von Azure Kubernetes Service (AKS)

Führen Sie die Schritte in den einzelnen unten aufgeführten Abschnitten aus, damit WIF verwendet wird, um sich bei Snowflake mithilfe von Azure Kubernetes Service (AKS) zu authentifizieren:

AKS konfigurieren

Konfigurieren Sie AKS, um ID-Token auszugeben, die mit Snowflake kompatibel sind:

  1. Aktivieren Sie den OIDC-Aussteller auf Ihrem AKS-Cluster.

  2. Konfigurieren Sie AKS, um ID-Token auszugeben, die mit Snowflake kompatibel sind.

    1. Konfigurieren Sie Ihre Pod-Bereitstellung YAML, um ein projiziertes ServiceAccount-Token-Volumen einzufügen.

    2. Konfigurieren Sie die ID-Token, damit ein Zielgruppenanspruch (Audience Claim) mit snowflakecomputing.com enthalten ist.

      Das folgende Beispiel zeigt eine YAML-Konfiguration mit der richtigen Zielgruppe:

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, benötigen Sie die folgenden Informationen:

  • Die Aussteller-URL des OIDC-Anbieters, der das ID-Token für das Kubernetes-Dienstkonto generiert. Um diese Aussteller-URL zu erhalten, siehe die Microsoft -Dokumentation

  • Der Namespace und der Name des Kubernetes-Dienstkontos. Sie verwenden diese Informationen, um das Subjekt des ID-Tokens zu erstellen, das vom OIDC-Anbieter ausgegeben wird.

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER my_aks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    Wobei ISSUER und SUBJECT die Werte sind, die Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    Wobei service_account_token_path derjenige ist, den Sie im Schritt AKS konfigurieren erstellt haben. Basierend auf dem YAML-Beispiel in diesem Schritt wäre der Token-Pfad /var/run/secrets/tokens/snowflake-token.

  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Authentifizierung mit einem OpenID Connect (OIDC)-Aussteller von Google Kubernetes Engine (GKE)

Führen Sie die Schritte in den einzelnen unten aufgeführten Abschnitten aus, damit WIF verwendet wird, um sich bei Snowflake mithilfe von Google Kubernetes Engine (GKE) zu authentifizieren:

GKE konfigurieren

  1. Konfigurieren Sie GKE, um ID-Token auszugeben, die mit Snowflake kompatibel sind.

    1. Konfigurieren Sie Ihre Pod-Bereitstellung YAML, um ein projiziertes ServiceAccount-Token-Volumen einzufügen.

    2. Konfigurieren Sie die ID-Token, damit ein Zielgruppenanspruch (Audience Claim) mit snowflakecomputing.com enthalten ist.

      Das folgende Beispiel zeigt eine YAML-Konfiguration mit der richtigen Zielgruppe:

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, benötigen Sie die folgenden Informationen:

  • Die Google Cloud-Projekt-ID, die Region des Clusters und der Name des Clusters. Sie verwenden diese Informationen, um den OIDC-Aussteller zu erstellen.

  • Der Namespace und der Name des Kubernetes-Dienstkontos. Sie verwenden diese Informationen, um das Subjekt des ID-Tokens zu erstellen, das vom OIDC-Anbieter ausgegeben wird.

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER my_gke_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    Wobei ISSUER und SUBJECT die Werte sind, die Sie vor Beginn dieser Schritte erhalten haben.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    Wobei service_account_token_path derjenige ist, den Sie im Schritt GKE konfigurieren erstellt haben. Basierend auf dem YAML-Beispiel in diesem Schritt wäre der Token-Pfad /var/run/secrets/tokens/snowflake-token.

  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Authentifizierung mit einem benutzerdefinierten OpenID Connect (OIDC)-Anbieter

Führen Sie die Schritte in den einzelnen unten aufgeführten Abschnitten aus, damit WIF verwendet wird, um sich bei Snowflake mithilfe eines benutzerdefinierten OIDC-Anbieters zu authentifizieren:

OIDC-Anbieter konfigurieren

  1. Stellen Sie sicher, dass Ihr OIDC-Anbieter die OpenID-Konfiguration, wie in der Erkennungsspezifikation angegeben, unterstützt. Sowohl die Konfiguration als auch der jwks_uri-Endpunkt der Konfiguration muss öffentlich zugänglich sein.

  2. Konfigurieren Sie Ihren OpenID-Anbieter, um ID-Token mit einem Zielgruppenanspruch auszugeben, der auf snowflakecomputing.com festgelegt ist oder eine nicht leere kundenspezifische Liste ist. Wenn Sie eine nicht leere kundenspezifische Liste definieren, müssen Sie diese angeben, wenn Sie einen Dienstbenutzer in Snowflake erstellen.

Snowflake konfigurieren

Um Snowflake zu konfigurieren, erstellen Sie einen Snowflake-Dienstbenutzer, d. h. einen Benutzer vom Typ SERVICE, der zur Authentifizierung bei Snowflake WIF verwendet.

Bevor Sie beginnen

Um Snowflake erfolgreich zu konfigurieren, benötigen Sie die folgenden Informationen:

  • Die Aussteller-URL Ihres OIDC-Anbieters.

  • Der mit Ihrem Workload verbundene Subjektanspruch.

Sie können diese beiden Werte durch Analysieren (Parsen) der iss- und sub-Ansprüche aus einem ausgestellten ID-Token für Ihren Workload erhalten. Wenn Sie beispielsweise Zugriff auf eine Unix-ähnliche Umgebung mit jq, cat und echo haben, können Sie Ihr ID-Token in eine Datei speichern und die folgenden Befehle ausführen.

ID_TOKEN_PATH=<id_token_path>

JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
Copy

Auf welche Weise Sie ein ID-Token erhalten, siehe die Dokumentation zu Ihrem OIDC-Anbieter.

So erstellen Sie einen Dienstbenutzer für Ihren Workload:

  1. Melden Sie sich bei Snowsight an.

  2. Um die Liste der Arbeitsblätter zu öffnen, wählen Sie im Navigationsmenü Projects » Worksheets aus.

  3. Zum Öffnen eines neuen SQL-Arbeitsblatts wählen Sie + aus.

  4. Um einen Dienstbenutzer zu erstellen, der zur Authentifizierung bei Snowflake WIF verwendet, führen Sie eine CREATE USER-Anweisung im Arbeitsblatt aus:

    CREATE USER my_custom_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = '<issuer>'
        SUBJECT = '<subject>'
        OIDC_AUDIENCE_LIST = ('<custom_audience>')
      )
      TYPE = SERVICE;
    
    Copy

    Wobei:

    • ISSUER und SUBJECT sind die Werte, die Sie vor Beginn dieser Schritte erhalten haben.

    • OIDC_AUDIENCE_LIST ist eine nicht leere Obermenge des Zielgruppenanspruchs des ID-Tokens, der in OIDC-Anbieter konfigurieren festgelegt wurde. Sie müssen OIDC_AUDIENCE_LIST nicht angeben, wenn der Zielgruppenanspruch des ID-Tokens snowflakecomputing.com ist.

Workload für die Verwendung eines Snowflake-Treibers konfigurieren

Bemerkung

Sie können Ihren Workload so konfigurieren, dass sie jeden Snowflake-Treiber verwendet, der WIF unterstützt. Die vollständige Liste finden Sie unter Unterstützte Snowflake-Treiber.

Wenn Ihr Workload einen Python-Treiber benötigt, führen Sie die folgenden Schritte aus:

  1. Installieren Sie den Snowflake Connector für Python.

  2. Fügen Sie Ihrem Python-Anwendungscode den folgenden Quellcode hinzu:

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token='<id_token>'
    )
    
    Copy

    Wobei id_token ein nicht abgelaufenes ID-Token ist, das Sie von Ihrem OIDC-Anbieter für Ihren Workload erhalten haben. Wie Sie dieses Token erhalten, erfahren Sie in der Dokumentation zu Ihrem OIDC-Anbieter.

  3. Führen Sie Ihre Python-Anwendung aus. Sie authentifiziert sich bei Snowflake mitWIF .

Benutzereinstellungen des Dienstes anzeigen

Führen Sie den Befehl SHOW USER WORKLOAD IDENTITY AUTHENTICATION METHODS aus, um die Werte des Parameters WORKLOAD_IDENTITY für Benutzende des Dienstes anzuzeigen. Um beispielsweise die WIF-Einstellungen anzuzeigen, die der Dienstbenutzer my_custom_service verwendet, um sich bei Snowflake zu authentifizieren, führen Sie den folgenden Befehl aus:

SHOW USER WORKLOAD IDENTITY AUTHENTICATION METHODS FOR USER my_custom_service;
Copy

Einschränkungen und Hinweise

  • Azure-Workloads können sich nicht in souveränen Azure-Clouds befinden, wie z. B. Azure China und Azure US-Regierungsbehörden. Diese Beschränkung hat nichts mit der Snowflake-Region Ihres Kontos zu tun.