Einführung in OAuth

Snowflake unterstützt das OAuth 2.0-Protokoll für Authentifizierung und Autorisierung. OAuth ist ein Open-Standard-Protokoll, das unterstützten Clients autorisierten Zugriff auf Snowflake gewährt, ohne dass Anmeldeinformationen des Benutzers freigegeben oder gespeichert werden müssen. Dies wird als delegierte Autorisierung bezeichnet, da ein Benutzer den Client autorisiert, in seinem Namen zu handeln und seine Daten abzurufen. Snowflake bietet zwei OAuth-Pfade: Snowflake OAuth und External OAuth.

Snowflake OAuth verwendet den integrierten OAuth-Dienst von Snowflake und unterstützt die folgenden Anwendungen:

External OAuth integriert den OAuth 2.0-Server eines Kunden und unterstützt drei Autorisierungsserveroptionen, benutzerdefinierte Clients und eine Partneranwendung.

In der folgenden Tabelle werden Snowflake OAuth und External OAuth verglichen.

Kategorie

Snowflake OAuth

External OAuth

Clientanwendung ändern

Erforderlich

Erforderlich

Zugriff auf Browser der Clientanwendung

Erforderlich

Nicht erforderlich

Programmgesteuerte Clients

Benötigt einen Browser

Optimale Größe

Treibereigenschaft

authenticator = oauth

authenticator = oauth

Sicherheitsintegrationssyntax

create security integration type = oauth ...

create security integration type = external_oauth

OAuth-Ablauf

OAuth 2.0-Codegenehmigungsablauf

Jeder OAuth-Ablauf, den der Client mit dem External OAuth-Server initiieren kann

Snowflake erlaubt OAuth für Clients durch Integrationen. Eine Integration ist ein Snowflake-Objekt, das eine Schnittstelle zwischen Snowflake und Services von Drittanbietern bereitstellt. Administratoren konfigurieren OAuth mithilfe einer Sicherheitsintegration, einem Integrationstyp, mit dem Clients, die OAuth unterstützen, Benutzer auf eine Autorisierungsseite weiterleiten und Zugriffstoken (sowie optional Aktualisierungstoken) für den Zugriff auf Snowflake generieren können.

Unter diesem Thema:

OAuth-Konzepte

Autorisierungsserver

Dieser Server zeigt einem Benutzer eine Schnittstelle an, über die er den Clientzugriff auf seine Daten zulassen oder verweigern kann. Der Server stellt ein Zugriffstoken an den Client aus, nachdem der Benutzer authentifiziert und eine Autorisierungsanforderung erfolgreich validiert wurde.

Zugriffstoken

Eine Zeichenfolge, die die Autorisierung darstellt, die einem Client von einem Benutzer für den Zugriff auf seine Daten mittels einer angegebenen Rolle erteilt wird. Diese Token verfallen nach kurzer Zeit. Über einen Aktualisierungsmechanismus können jedoch neue Zugriffstoken abgerufen werden.

Aktualisierungstoken

Eine Zeichenfolge, die bei Ablauf eines Tokens zum Abrufen eines neuen Zugriffstokens dient. Zusammen mit einem Zugriffstoken wird vom Autorisierungsserver optional ein Aktualisierungstoken an den Client ausgegeben. Der Client kann das Aktualisierungstoken verwenden, um ein anderes Zugriffstoken anzufordern, ohne den Benutzer erneut beteiligen zu müssen, bis das Aktualisierungstoken abläuft. An diesem Punkt wird der OAuth-Workflow erneut aufgerufen.

Ressourcenserver

Dieser Server schützt die Ressourcen (d. h. Snowflake) und verarbeitet Anforderungen nach Zugriff auf die Ressource mithilfe von Zugriffstoken.

Vertrauliche und öffentliche Clients

Vertrauliche Clients können ein Geheimnis speichern. Sie werden in einem geschützten Bereich ausgeführt, auf den Endbenutzer nicht zugreifen können. Ein in der Cloud bereitgestellter, sicherer Service kann beispielsweise ein vertraulicher Client sein. Ein Client, der hingegen auf einem Desktop ausgeführt oder über einen App Store verteilt wird, kann ein öffentlicher Client sein.

Bei öffentlichen Clients muss der Benutzer jedes Mal seinen Snowflake-Benutzernamen und sein Kennwort eingeben, um Clientzugriff auf Snowflake mittels der angegebenen Rolle zu autorisieren. Bei vertraulichen Clients muss der Benutzer seine Anmeldeinformationen für die angegebene Rolle nur einmal eingeben.

Snowflake unterstützt OAuth für vertrauliche und öffentliche Clients.

Snowflake OAuth-Autorisierungsablauf

Der OAuth-Autorisierungsablauf sieht wie folgt aus:

Snowflake OAuth workflow
  1. Im Client versucht der Benutzer, mit OAuth eine Verbindung zu Snowflake herzustellen.

    Die Anwendung sendet eine Autorisierungsanforderung an den Snowflake-Autorisierungsserver. Daraufhin wird ein Autorisierungsbildschirm angezeigt, in dem der Benutzer aufgefordert wird, den Zugriff zu autorisieren.

  2. Der Benutzer gibt seinen Snowflake-Anmeldenamen und sein Kennwort ein. Daraufhin wird ihm ein Zustimmungsdialogfeld angezeigt, in dem er Snowflake den Clientzugriff unter Verwendung einer bestimmten Rolle in einer Benutzersitzung (z. B. SYSADMIN oder CUSTOM_ROLE1) erlaubt.

    Der Benutzer übermittelt seine Zustimmung, die spezifische Rolle in einer Sitzung zu verwenden.

    Der Snowflake-Autorisierungsserver sendet einen Autorisierungscode an den Client zurück.

  3. Der Client sendet den Autorisierungscode zurück an den Snowflake-Autorisierungsserver, um ein Zugriffstoken und optional ein Aktualisierungstoken anzufordern, damit der Client neue Zugriffstoken abrufen kann.

    Der Snowflake-Autorisierungsserver akzeptiert den Autorisierungscode und stellt dem Client ein Zugriffstoken zur Verfügung, das für die Benutzerressourcen im Snowflake-Ressourcenserver spezifisch ist. Je nach den Einstellungen in der Autorisierungsanforderung stellt der Autorisierungsserver ein Aktualisierungstoken aus, damit sich neue Zugriffstoken abrufen lassen, die an die bestimmte Ressource gebunden sind.

  4. Der Client sendet das Zugriffstoken an den Snowflake-Ressourcenserver.

    Der Ressourcenserver erkennt das gültige Zugriffstoken und richtet eine Benutzersitzung mit der autorisierten Rolle ein. Der Client hat jetzt Zugriff auf die Snowflake-Ressourcen, beschränkt durch die im Zugriffstoken angegebene Rolle.

Zugriffstoken haben eine kurze Lebensdauer (normalerweise 10 Minuten). Wenn das Zugriffstoken abläuft, kann der Client ein Aktualisierungstoken senden, um neue Zugriffstoken anzufordern. Ein Aktualisierungstoken wird an den Snowflake-Autorisierungsserver gesendet, um jedes Mal, wenn das aktuelle Zugriffstoken abläuft, ein neues Zugriffstoken anzufordern (Schritte 3-6). Wenn die Integration so konfiguriert ist, dass das Senden von Aktualisierungstoken verhindert wird, muss der Benutzer die oben genannten Schritte wiederholen, um den Client neu zu autorisieren.

Konfigurieren von OAuth-Unterstützung

Snowflake OAuth-Partneranwendungen

Derzeit unterstützt Snowflake OAuth-Autorisierung bei folgenden Snowflake-Partneranwendungen:

Client

Erforderliche Clientversion

Clienttyp

Tableau Desktop / Server / Online

2019.1 oder höher

Öffentlich

Looker

6.20 oder höher

Informationen zum Konfigurieren der Unterstützung finden Sie unter Snowflake OAuth für Partneranwendungen konfigurieren.

Wichtig

Derzeit unterstützt Tableau OAuth nur, wenn die Tableau-Technologie auf das öffentliche Internet zugreifen kann.

Daher können bei Kunden, die AWS PrivateLink verwenden, Probleme auftreten, wenn sie versuchen, OAuth und Tableau mit Snowflake zu verwenden. Wenden Sie sich bei Fragen oder für weitere Informationen an Tableau.

Benutzerdefinierte Snowflake OAuth-Clients

Snowflake unterstützt benutzerdefinierte Clients, die von Ihrer Organisation konfiguriert wurden. Informationen zum Konfigurieren der Unterstützung finden Sie unter Snowflake OAuth für benutzerdefinierte Clients konfigurieren.

External OAuth-Partneranwendungen

Derzeit unterstützt Snowflake Microsoft Power BI als External OAuth-Partneranwendung.

Benutzerdefinierte External OAuth-Clients

Snowflake unterstützt benutzerdefinierte External OAuth-Clients, die von Ihrem Unternehmen konfiguriert wurden. Informationen zum Konfigurieren der Unterstützung finden Sie unter Benutzerdefinierte Clients für External OAuth konfigurieren.

Überwachen von OAuth-Anmeldungen

Damit sich Anmeldeversuche von Snowflake-Benutzern abfragen lassen, stellt Snowflake einen Anmeldeverlauf zur Verfügung:

Wenn OAuth zur Authentifizierung verwendet wird (ob erfolgreich oder nicht), hat die Spalte FIRST_AUTHENTICATION_FACTOR in der Ausgabe den Wert OAUTH_ACCESS_TOKEN.

Integrations-DDL

Zur Unterstützung beim Erstellen und/oder Verwalten von Integrationen und delegierten Autorisierungen bietet Snowflake folgende spezielle DDL-Befehle:

OAuth und Verbundauthentifizierung

Snowflake unterstützt OAuth mit Verbundauthentifizierung und SSO (Single Sign-On) unter Verwendung beliebiger von Snowflake unterstützter Identitätsanbieter (IdP).

Wenn Verbundauthentifizierung konfiguriert ist, sieht der Autorisierungsablauf wie folgt aus:

  1. Im Client versucht der Benutzer, eine Verbindung zu Snowflake herzustellen.

    Die Anwendung sendet eine Autorisierungsanforderung an den Snowflake-Autorisierungsserver. Daraufhin wird ein Autorisierungsbildschirm angezeigt, in dem der Benutzer aufgefordert wird, den Zugriff zu autorisieren.

  2. Der Benutzer klickt auf die Option zum Anmelden via IdP und wird zur IdP-Authentifizierungsseite weitergeleitet.

  3. Der Benutzer gibt seinen IdP-Anmeldenamen und sein Kennwort ein. Daraufhin wird ihm ein Zustimmungsdialogfeld angezeigt, in dem er Snowflake den Clientzugriff unter Verwendung einer bestimmten Rolle in einer Benutzersitzung (z. B. SYSADMIN oder CUSTOM_ROLE1) erlaubt.

    Der Benutzer übermittelt seine Zustimmung, die spezifische Rolle in einer Sitzung zu verwenden.

    Der Snowflake-Autorisierungsserver sendet einen Autorisierungscode an den Client zurück.

  4. Der Client sendet den Autorisierungscode zurück an den Snowflake-Autorisierungsserver, um ein Zugriffstoken und optional ein Aktualisierungstoken anzufordern, damit der Client neue Zugriffstoken abrufen kann.

    Der Snowflake-Autorisierungsserver akzeptiert den Autorisierungscode und stellt dem Client ein Zugriffstoken zur Verfügung, das für die Benutzerressourcen im Snowflake-Ressourcenserver spezifisch ist. Je nach den Einstellungen in der Autorisierungsanforderung stellt der Autorisierungsserver ein Aktualisierungstoken aus, damit sich neue Zugriffstoken abrufen lassen, die an die bestimmte Ressource gebunden sind.

  5. Der Client sendet das Zugriffstoken an den Snowflake-Ressourcenserver.

    Der Ressourcenserver erkennt das gültige Zugriffstoken und richtet eine Benutzersitzung mit der autorisierten Rolle ein. Der Client hat jetzt Zugriff auf die Snowflake-Ressourcen, beschränkt durch die im Zugriffstoken angegebene Rolle.

OAuth und private Konnektivität

Snowflake unterstützt External OAuth mit AWS PrivateLink und Azure Private Link.

Derzeit funktioniert Snowflake OAuth weder mit AWS Private Link noch mit Azure Private Link, da sowohl Tableau als auch Looker Zugriff auf das öffentliche Internet benötigen. Weitere Informationen dazu finden Sie unter:

OAuth und Netzwerkrichtlinien

Sie können Netzwerkrichtlinien nur mit Snowflake OAuth verwenden. Die External OAuth-Sicherheitsintegration bietet keine Unterstützung für das Festlegen einer separaten Netzwerkrichtlinie.

Die Snowflake OAuth-Sicherheitsintegration verfügt über einen network_policy-Parameter, sodass die Snowflake OAuth-Integration Benutzer authentifizieren und autorisieren kann, ohne diese IP-Adressen für den normalen Benutzerzugriff hinzuzufügen.

Durch das Einrichten einer für die Snowflake OAuth-Integration spezifischen Netzwerkrichtlinie kann sich die Snowflake OAuth-Netzwerkrichtlinie von anderen Netzwerkrichtlinien unterscheiden, die möglicherweise für das Snowflake-Konto gelten. Die Snowflake OAuth-Netzwerkrichtlinie wirkt sich nicht auf andere Netzwerkrichtlinien des Kontos aus, und ebenso wirken sich andere Netzwerkrichtlinien des Kontos nicht auf die Snowflake OAuth-Netzwerkrichtlinie aus. Daher ermöglicht die Snowflake OAuth-Netzwerkrichtlinie die Authentifizierung und Autorisierung von Benutzern wie beabsichtigt.

Wichtig

Wenn eine Netzwerkrichtlinie pro Benutzer oder Konto festgelegt ist und Sie einen Dienst verwenden, der an einem anderen Speicherort ausgeführt wird (z. B. Microsoft Power BI), können Sie keine Verbindung zu Snowflake herstellen.

Legen Sie nach dem Erstellen der Snowflake OAuth-Sicherheitsintegration die OAuth-Netzwerkrichtlinie mit dem folgenden Befehl fest:

alter security integration <OAuth-Integration> set network_policy = <OAuth-Netzwerkrichtlinie>;

Verwenden Sie folgenden Befehl, um die OAuth-Netzwerkrichtlinie zu deaktivieren:

alter security integration <OAuth-Integration> unset <OAuth-Netzwerkrichtlinie>;

Wobei:

<oauth_integration>

Gibt den Namen der OAuth-Sicherheitsintegration an.

<oauth_network_policy>

Gibt die Snowflake OAuth-Netzwerkrichtlinie in Snowflake an.

Weitere Informationen dazu finden Sie unter Netzwerkrichtlinien und ALTER SECURITY INTEGRATION.

OAuth mit Clients, Treibern und Konnektoren

Unterstützte Clients, Treiber und Konnektoren können OAuth verwenden, um die Anmeldeinformationen des Benutzers zu überprüfen.

Beachten Sie Folgendes:

  • Es ist notwendig, den Parameter authenticator auf oauth und den Parameter token auf oauth_access_token zu setzen.

  • Wenn Sie den token-Wert als URL-Abfrageparameter übergeben, muss der oauth_access_token-Wert als URL codiert werden.

  • Wenn Sie den token-Wert an ein Properties-Objekt übergeben (z. B. JDBC-Treiber), sind keine Anpassungen erforderlich.

Weitere Informationen dazu finden Sie in den Verbindungsparametern für jeden Client, Treiber oder Konnektor.