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 zwei 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 |
|
|
Sicherheitsintegrationssyntax |
|
|
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:
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.
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.
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.
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 |
---|---|---|
2019.1 oder höher |
Öffentlich |
|
6.20 oder höher |
Informationen zum Konfigurieren der Unterstützung finden Sie unter Snowflake OAuth für Partneranwendungen konfigurieren.
Weitere Informationen zur Verwendung von OAuth unter Umgehung des öffentlichen Internets finden Sie unter OAuth und private Konnektivität.
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:
LOGIN_HISTORY , LOGIN_HISTORY_BY_USER (Tabellenfunktion)
LOGIN_HISTORY-Ansicht (Ansicht)
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:
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.
Der Benutzer klickt auf die Option zum Anmelden via IdP und wird zur IdP-Authentifizierungsseite weitergeleitet.
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.
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.
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.
Snowflake OAuth und Tableau können entweder mit AWS PrivateLink oder mit Azure Private Link wie folgt verwendet werden:
- Tableau Desktop
Ab Tableau 2020.4 enthält Tableau einen eingebetteten OAuth-Client, der die Verbindung zu Snowflake mit der Konto-URL für AWS PrivateLink oder Azure Private Link unterstützt.
Nach dem Upgrade auf Tableau 2020.4 ist keine weitere Konfiguration erforderlich. Verwenden Sie die entsprechende private Konnektivitäts-URL für AWS oder Azure, um sich mit Snowflake zu verbinden.
- Tableau Server
Ab Tableau 2020.4 können Benutzer Tableau Server optional so konfigurieren, dass der eingebettete OAuth-Client verwendet wird, um eine Verbindung zu Snowflake über die Konto-URL für AWS PrivateLink oder Azure Private Link herzustellen.
Zur Verwendung dieser Funktion müssen Sie eine neue Custom Client-Sicherheitsintegration erstellen und die Tableau-Anweisungen befolgen.
- Tableau Online
Tableau Online bietet keine Unterstützung der Snowflake-Konto-URL für AWS PrivateLink oder Azure Private Link, da Tableau Online Zugriff auf das öffentliche Internet benötigt.
Wenden Sie sich an Tableau, um weitere Informationen darüber zu erhalten, wann Tableau Online private Konnektivität über Snowflake-Konto-URLs für AWS PrivateLink und Azure Private Link unterstützen wird.
Wichtig
Um die Konto-URL zu bestimmen, die mit AWS PrivateLink oder Azure Private Link verwendet werden soll, führen Sie die Funktion SYSTEM$GET_PRIVATELINK_CONFIG aus.
- Looker
Derzeit erfordert die Kombination von Snowflake OAuth und Looker einen Zugang zum öffentlichen Internet. Daher können Sie Snowflake OAuth und Looker weder mit AWS PrivateLink noch mit Azure Private Link verwenden.
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
aufoauth
und den Parametertoken
aufoauth_access_token
zu setzen.Wenn Sie den
token
-Wert als URL-Abfrageparameter übergeben, muss deroauth_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.