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:
| Anforderung | Beschreibung |
|---|---|
| Identitätsanbieter | Okta, Azure AD oder Ping Federate, zum Gewähren von Client-Anmeldeinformationen konfiguriert |
| Snowflake-Konto | Enterprise Edition (oder höher) mit ACCOUNTADMIN-Zugriff |
| OAuth-Anwendung | API-Dienste (Okta), App-Registrierung (Azure AD) oder gleichwertig |
| Benutzerdefinierte Bereiche | Bereiche 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
Melden Sie sich in Ihrer Okta-Administratorkonsole an.
Wechseln Sie zu **Applications > Applications (Anwendungen > Anwendungen).
Wählen Sie ** Create App Integration App-Integration erstellen) aus.
Wählen Sie **API Services** (API-Dienste) und dann **Next (Weiter) aus.
Geben Sie einen Anwendungsnamen ein (z. B.
snowflake-tableau-service).Wählen Sie Save (Speichern) aus.
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.
Wechseln Sie in Ihren Anwendungseinstellungen zu General > Client Credentials (Allgemein > Client-Anmeldeinformationen).
Deaktivieren Sie das Kontrollkästchen Require Demonstrating Proof of Possession (DPoP) header in token requests (Erfordert DPoP-Kopfzeile in Tokenanforderungen).
Wählen Sie Save (Speichern) aus.
Schritt 3: Hinzufügen benutzerdefinierter Bereiche
Snowflake benötigt benutzerdefinierte Bereiche, um der authentifizierten Sitzung Rollen zuzuweisen.
Wechseln Sie zu Security > API > Authorization Servers (Sicherheit > API > Autorisierungsserver).
Wählen Sie den standardmäßigen Autorisierungsserver (Default) aus (oder Ihren benutzerdefinierten Server).
Wählen Sie die Registerkarte Scopes (Bereiche) aus, und klicken Sie dann auf Add Scope (Bereich hinzufügen).
Fügen Sie die folgenden Bereiche hinzu:
Bereichsname Beschreibung snowflake Allgemeiner Zugriffsbereich für Snowflake session:role:SYSADMIN Weist 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
Wählen Sie die Registerkarte Access Policies (Zugriffsrichtlinien) aus.
Wählen Sie eine vorhandene Richtlinie aus, oder erstellen Sie eine neue.
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)
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';| Parameter | Beschreibung |
|---|---|
EXTERNAL_OAUTH_TYPE | Ihr Identitätsanbieter: OKTA , AZURE oder PING_FEDERATE |
EXTERNAL_OAUTH_ISSUER | Die Aussteller-URL von Ihrem Autorisierungsserver |
EXTERNAL_OAUTH_JWS_KEYS_URL | Der JWKS-Endpunkt für die Tokenvalidierung |
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA
IM | Der JWT-Anspruch, der den Benutzer identifiziert. Verwenden Sie sub für Okta. |
EXTERNAL_OAUTH_ANY_ROLE_MODE | Legen 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
Wählen Sie in Tableau Desktop Verbinden > Snowflake aus.
Geben Sie die Einzelheiten Ihrer Verbindung ein:
Feld Wert Server Ihre Snowflake-Konto-URL (z. B. account.snowflakecomputing.com)Rolle Die zu verwendende Rolle (z. B. SYSADMIN)Warehouse Ihr Snowflake-Warehouse Authentifizierung OAuth-Client-Anmeldeinformationen Geben Sie die OAuth-Konfiguration ein:
Feld Wert OAuth-Token-Anforderungs-URL https://<your-okta-domain>.okta.com/oauth2/default/ v1/tokenBenutzername Ihre OAuth-Client-ID Kennwort Ihr OAuth-Client-Geheimnis OAuth-Bereich snowflake session:role:SYSADMINHinweis: Der OAuth-Bereich muss alle benutzerdefinierten Bereiche beinhalten, die Sie für die Rollenzuweisung konfiguriert haben.
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:
Wählen Sie im Dialogfeld Veröffentlichen die Option Bearbeiten neben Datenquellen aus.
Wählen Sie bei Authentifizierung die Option Eingebettetes Kennwort aus.
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:
Melden Sie sich in Tableau Cloud an.
Navigieren Sie zu der veröffentlichten Datenquelle.
Wählen Sie Verbindungen aus.
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
| Fehlermeldung | Ursache | Lösung |
|---|---|---|
| „Benutzer ist nicht vorhanden oder nicht autorisiert“ | Snowflake-Benutzer LOGIN_NAME stimmt nicht mit der OAuth-Client-ID überein | Legen 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 fehlt | Fü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 aktiviert | Deaktivieren Sie „Require Demonstrating Proof of Possession (DPoP)“ in Ihrer Okta-App. |
| „Ungültiger Bereich“ | Benutzerdefinierte Bereiche nicht konfiguriert | Fügen Sie Ihrem Autorisierungsserver die erforderlichen Bereiche hinzu, tragen Sie openid nicht mit ein. |
| Fehler bei der Tokenvalidierung | Falsche(r) JWKS-URL oder -Aussteller | Vergewissern Sie sich, dass EXTERNAL_OAUTH_JWS_KEYS
_URL und EXTERNAL_OAUTH_ISSUER mit Ihrem Autorisierungsserver übereinstimmen. |
Siehe auch
Konfigurieren von OAuth für Snowflake-Verbindungen in Tableau Server(Link wird in neuem Fenster geöffnet) – Erfahren Sie mehr über gewöhnliche OAuth-Authentifizierung mit Snowflake.
External OAuth Security Integrations(Link wird in neuem Fenster geöffnet) (Externe OAuth-Sicherheitsintegrationen) – Snowflake-Dokumentation über die Konfiguration externer OAuth-Anbieter.
Okta Client Credentials Flow(Link wird in neuem Fenster geöffnet) (Flow für Okta-Client-Anmeldeinformationen) – Okta-Dokumentation zum Implementieren von Client-Anmeldeinformationen.
Aktualisieren einer Datenquellenverbindung(Link wird in neuem Fenster geöffnet) – Referenz zur Tableau-REST API für das Aktualisierungen von Anmeldeinformationen.
