Konfigurieren von externem OAuth für Snowflake: Flow für Client-Anmeldeinformationen

Die Authentifizierung mit OAuth-Client-Anmeldeinformationen ermöglicht Computer-zu-Computer-Verbindungen zu Snowflake

ohne Benutzerinteraktion. Diese Methode ist ideal geeignet für:

  • Dienstkonten für automatisierte Datenaktualisierungen

  • Geplante Extraktaufträge

  • CI/CD-Pipelines

  • Veröffentlichte Datenquellen, die eingebettete Anmeldeinformationen erfordern

Im Gegensatz zu gewöhnlichem OAuth (das den Autorisierungscode-Flow verwendet) werden Benutzer beim Flow für Client-Anmeldeinformationen nicht aufgefordert,

sich anzumelden. Stattdessen authentifiziert sich Tableau direkt bei Ihrem Identitätsanbieter mithilfe von

Client-ID und -Geheimnis.

Hinweis: Der Flow für Client-Anmeldeinformationen erfordert das externe OAuth-Feature von Snowflake mit einem unterstützten Identitätsanbieter. Das ist der Unterschied zu nativem OAuth von Snowflake.

Voraussetzungen

Zum Verwenden von OAuth-Client-Anmeldeinformationen mit Snowflake benötigen Sie Folgendes:

AnforderungBeschreibung
IdentitätsanbieterOkta, Azure AD oder Ping Federate, zum Gewähren von Client-Anmeldeinformationen konfiguriert
Snowflake-KontoEnterprise Edition (oder höher) mit ACCOUNTADMIN-Zugriff
OAuth-AnwendungAPI-Dienste (Okta), App-Registrierung (Azure AD) oder gleichwertig
Benutzerdefinierte BereicheBereiche für Snowflake-Rollenzuweisung (z. B. „session:role:SYSADMIN“)

Konfigurieren Ihres Identitätsanbieters

In den folgenden Schritten wird Okta als Beispiel verwendet. Informationen über die Konfiguration von Client-Anmeldeinformationen bei anderen Anbietern entnehmen Sie bitte deren Dokumentation.

Schritt 1: Erstellen einer API-Dienste-Anwendung

  1. Melden Sie sich in Ihrer Okta-Administratorkonsole an.

  2. Wechseln Sie zu **Applications > Applications (Anwendungen > Anwendungen).

  3. Wählen Sie ** Create App Integration App-Integration erstellen) aus.

  4. Wählen Sie **API Services** (API-Dienste) und dann **Next (Weiter) aus.

  5. Geben Sie einen Anwendungsnamen ein (z. B. snowflake-tableau-service).

  6. Wählen Sie Save (Speichern) aus.

  7. Kopieren Sie die Client-ID und das Client-Geheimnis. Sie benötigen diese Werte später.

Schritt 2: Deaktivieren von DPoP (falls aktiviert)

Für den Client-Anmeldeinformationen-Flow muss DPoP (Demonstrating Proof of Possession) deaktiviert sein.

  1. Wechseln Sie in Ihren Anwendungseinstellungen zu General > Client Credentials (Allgemein > Client-Anmeldeinformationen).

  2. Deaktivieren Sie das Kontrollkästchen Require Demonstrating Proof of Possession (DPoP) header in token requests (Erfordert DPoP-Kopfzeile in Tokenanforderungen).

  3. Wählen Sie Save (Speichern) aus.

Schritt 3: Hinzufügen benutzerdefinierter Bereiche

Snowflake benötigt benutzerdefinierte Bereiche, um der authentifizierten Sitzung Rollen zuzuweisen.

  1. Wechseln Sie zu Security > API > Authorization Servers (Sicherheit > API > Autorisierungsserver).

  2. Wählen Sie den standardmäßigen Autorisierungsserver (Default) aus (oder Ihren benutzerdefinierten Server).

  3. Wählen Sie die Registerkarte Scopes (Bereiche) aus, und klicken Sie dann auf Add Scope (Bereich hinzufügen).

  4. Fügen Sie die folgenden Bereiche hinzu:

    BereichsnameBeschreibung
    snowflakeAllgemeiner Zugriffsbereich für Snowflake
    session:role:SYSADMINWeist die SYSADMIN-Rolle zu (die Sie an Ihre Rolle anpassen müssen)

    Hinweis: Erstellen Sie weitere Bereiche für alle anderen Rollen, die Ihr Dienstkonto benötigt.

Schritt 4: Konfigurieren einer Zugriffsrichtlinie

  1. Wählen Sie die Registerkarte Access Policies (Zugriffsrichtlinien) aus.

  2. Wählen Sie eine vorhandene Richtlinie aus, oder erstellen Sie eine neue.

  3. Fügen Sie eine Regel mit den folgenden Einstellungen hinzu:

    • Grant type (Berechtigungstyp): Client-Anmeldeinformationen

    • Scopes (Bereiche): Beliebige Bereiche (oder wählen Sie bestimmte Bereiche aus)

  4. Klicken Sie auf Create Rule (Regel erstellen) oder Save (Speichern).

Konfigurieren von Snowflake

Führen Sie die folgenden SQL-Anweisungen in Snowflake als ACCOUNTADMIN aus. Ersetzen Sie die Platzhalterwerte durch Ihre Konfiguration.

Schritt 1: Erstellen der externen OAuth-Integration

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE SECURITY INTEGRATION okta_oauth_integration
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = OKTA
  EXTERNAL_OAUTH_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
  EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://default', 'snowflake')
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
ParameterBeschreibung
EXTERNAL_OAUTH_TYPEIhr Identitätsanbieter: OKTA , AZURE oder PING_FEDERATE
EXTERNAL_OAUTH_ISSUERDie Aussteller-URL von Ihrem Autorisierungsserver
EXTERNAL_OAUTH_JWS_KEYS_URLDer JWKS-Endpunkt für die Tokenvalidierung
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMDer JWT-Anspruch, der den Benutzer identifiziert. Verwenden Sie sub für Okta.
EXTERNAL_OAUTH_ANY_ROLE_MODELegen Sie ENABLE fest, um Rollenzuweisung über Bereiche zu erlauben.

Schritt 2: Erstellen eines Dienstbenutzers

Erstellen Sie einen Snowflake-Benutzer mit einem Anmeldenamen (LOGIN_NAME), der mit der OAuth-Client-ID übereinstimmt.

CREATE USER IF NOT EXISTS service_account_user
LOGIN_NAME = '<your-okta-client-id>'
DISPLAY_NAME = 'OAuth Service Account'
MUST_CHANGE_PASSWORD = FALSE
DISABLED = FALSE;
-- Grant role to the service user
GRANT ROLE SYSADMIN TO USER service_account_user;
-- Set the default role
ALTER USER service_account_user SET DEFAULT_ROLE = 'SYSADMIN';
-- Grant warehouse access
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service_account_user;
-- Grant database and schema access
GRANT USAGE ON DATABASE <your-database> TO USER service_account_user;
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER
service_account_user;

Wichtig: Der LOGIN_NAME muss exakt mit dem sub-Anspruch in dem OAuth-Token übereinstimmen. Bei Okta-API-Dienste-Anwendungen ist dies die Client-ID.

Herstellen einer Verbindung in Tableau Desktop

  1. Wählen Sie in Tableau Desktop Verbinden > Snowflake aus.

  2. Geben Sie die Einzelheiten Ihrer Verbindung ein:

    FeldWert
    ServerIhre Snowflake-Konto-URL (z. B. account.snowflakecomputing.com)
    RolleDie zu verwendende Rolle (z. B. SYSADMIN)
    WarehouseIhr Snowflake-Warehouse
    AuthentifizierungOAuth-Client-Anmeldeinformationen
  3. Geben Sie die OAuth-Konfiguration ein:

    FeldWert
    OAuth-Token-Anforderungs-URLhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    BenutzernameIhre OAuth-Client-ID
    KennwortIhr OAuth-Client-Geheimnis
    OAuth-Bereichsnowflake session:role:SYSADMIN

    Hinweis: Der OAuth-Bereich muss alle benutzerdefinierten Bereiche beinhalten, die Sie für die Rollenzuweisung konfiguriert haben.

  4. Wählen Sie Anmelden aus.

Veröffentlichen in Tableau Cloud oder Tableau Server

Beim Veröffentlichen einer Arbeitsmappe oder Datenquelle, die OAuth-Client-Anmeldeinformationen verwendet, müssen Sie wie folgt durchführen:

  1. Wählen Sie im Dialogfeld Veröffentlichen die Option Bearbeiten neben Datenquellen aus.

  2. Wählen Sie bei Authentifizierung die Option Eingebettetes Kennwort aus.

  3. Die Client-Anmeldeinformationen werden in dem veröffentlichten Inhalt eingebettet.

Wichtig: Anders als bei gewöhnlichem OAuth werden Client-Anmeldeinformationen als eingebettete Kennwörter behandelt. Benutzer, die auf die veröffentlichten Inhalte zugreifen, verwenden die Dienstkonto-Anmeldeinformationen, nicht ihre eigene Identität.

Rotieren der Anmeldeinformationen

Wenn Ihr OAuth-Client-Geheimnis rotiert wird, müssen Sie die eingebetteten Anmeldeinformationen in Tableau Cloud aktualisieren:

  1. Melden Sie sich in Tableau Cloud an.

  2. Navigieren Sie zu der veröffentlichten Datenquelle.

  3. Wählen Sie Verbindungen aus.

  4. Aktualisieren Sie die Verbindung mit dem neuen Client-Geheimnis.

Verwenden Sie bei automatisierter Rotation die Tableau-REST API, um Verbindungs-Anmeldeinformationen programmgesteuert zu aktualisieren.

Häufig gestellte Fragen

Wann sollte ich OAuth-Client-Anmeldeinformationen anstelle von gewöhnlichem OAuth verwenden?

Verwenden Sie Client-Anmeldeinformationen, wenn Sie eine unbeaufsichtigte Authentifizierung (von Computer-zu-Computer) benötigen. Bei gewöhnlichem

OAuth ist eine Benutzerinteraktion für die erstmalige Anmeldung und dann in regelmäßigen Abständen eine erneute Authentifizierung erforderlich. Bei Client-Anmeldeinformationen

wird eine Dienstkontoidentität verwendet, und Benutzerinteraktionen sind nicht erforderlich.

Kann ich Client-Anmeldeinformationen mit nativem OAuth von Snowflake verwenden?

Nein. Natives OAuth von Snowflake unterstützt nur den Autorisierungscode-Flow. Client-Anmeldeinformationen erfordern externes OAuth mit einem unterstützten Identitätsanbieter (Okta, Azure AD oder Ping Federate).

Wie nehme ich die Rotation von Geheimnissen für veröffentliche Inhalte vor?

Wenn Ihr OAuth-Client-Geheimnis rotiert wird, müssen Sie die eingebetteten Anmeldeinformationen in Tableau Cloud aktualisieren. Sie können dies manuell über die Tableau Cloud-Benutzeroberfläche oder programmgesteuert über die Tableau-REST API durchführen. Erwägen Sie, diesen Vorgang im Rahmen Ihres Workflows für die Rotation von Geheimnissen zu automatisieren.

Warum schlägt meine Verbindung mit einem Rollenfehler fehl, obwohl „EXTERNAL_OAUTH_ABUSY_ROLE_MODE“ aktiviert ist?

Snowflake benötigt Rolleninformationen im OAuth-Token. Fügen Sie Ihrem Autorisierungsserver einen benutzerdefinierten Bereich hinzu (z. B. session:role:SYSADMIN), und tragen Sie ihn in dem Feld „OAuth-Bereich“ ein, wenn Sie eine Verbindung von Tableau aus herstellen.

Problembehebung

FehlermeldungUrsacheLösung
„Benutzer ist nicht vorhanden oder nicht autorisiert“Snowflake-Benutzer LOGIN_NAME stimmt nicht mit der OAuth-Client-ID übereinLegen Sie den LOGIN_NAME (Anmeldename) des Benutzers so fest, dass er mit dem sub-Anspruch (Client-ID für Okta) übereinstimmt.
„Die angeforderte Rolle ist im Zugriffstoken nicht aufgeführt“Rollenbereich im Token fehltFügen Sie session:role:<ROLE> zu Ihrem Autorisierungsserver hinzu, und nehmen Sie ihn in den OAuth-Bereich auf.
„Ungültiger DPoP-Beweis“DPoP ist in Okta aktiviertDeaktivieren Sie „Require Demonstrating Proof of Possession (DPoP)“ in Ihrer Okta-App.
„Ungültiger Bereich“Benutzerdefinierte Bereiche nicht konfiguriertFügen Sie Ihrem Autorisierungsserver die erforderlichen Bereiche hinzu, tragen Sie openid nicht mit ein.
Fehler bei der TokenvalidierungFalsche(r) JWKS-URL oder -AusstellerVergewissern Sie sich, dass EXTERNAL_OAUTH_JWS_KEYS _URL und EXTERNAL_OAUTH_ISSUER mit Ihrem Autorisierungsserver übereinstimmen.

Siehe auch

Vielen Dank für Ihr Feedback!Ihr Feedback wurde erfolgreich übermittelt. Vielen Dank.