Power BI SSO zu Snowflake

Unter diesem Thema wird beschrieben, wie Sie mit Microsoft Power BI eine Snowflake-Sitzung instanziieren und unter Verwendung von Single Sign-On (SSO) auf Snowflake zugreifen.

Unter diesem Thema:

Übersicht

Snowflake erlaubt Microsoft Power BI-Benutzern die Herstellung einer Verbindung zu Snowflake unter Verwendung der Anmeldeinformationen eines Identitätsanbieters und einer OAuth 2.0-Implementierung, sodass eine SSO-Erfahrung für den Zugriff auf Snowflake-Daten zur Verfügung steht.

Diese Funktion macht lokale Power BI Gateway-Implementierungen überflüssig, da der Power BI-Dienst für den Verbindungsaufbau zu Snowflake einen eingebetteten Snowflake-Treiber verwendet.

Allgemeiner Workflow

Das folgende Diagramm fasst den Autorisierungsablauf zum Instanziieren einer Snowflake-Sitzung von Power BI zusammen:

pbi sso workflow overview
  1. Der Benutzer meldet sich mit Microsoft Azure Active Directory (Azure AD) beim Power BI-Dienst an.

  2. (Optional) Wenn der Identitätsanbieter nicht Azure AD ist, verifiziert Azure AD den Benutzer vor Anmeldung beim Power BI-Dienst mithilfe der SAML-Authentifizierung.

  3. Wenn der Benutzer eine Verbindung zu Snowflake herstellt, fordert der Power BI-Dienst Azure AD auf, ihm ein Token für Snowflake zu übergeben.

  4. Der Power BI-Dienst verwendet den eingebetteten Snowflake-Treiber, um das Azure AD-Token als Teil der Verbindungszeichenfolge an Snowflake zu senden.

  5. Snowflake überprüft das Token, extrahiert aus dem Token den Benutzernamen, ordnet diesen dem Snowflake-Benutzer zu und erstellt eine Snowflake-Sitzung für den Power BI-Dienst unter Verwendung der Standardrolle dieses Benutzers.

Voraussetzungen

Überprüfen Sie Folgendes für Ihr Snowflake-Konto, bevor Sie die Power BI SSO-Funktion verwenden:

  • Wenn Sie in Snowflake Netzwerkrichtlinien verwenden, können Sie den Microsoft Azure IP-Bereich zulassen, der die Azure-Region enthält, in der Ihr Snowflake-Konto gehostet wird, sowie gegebenenfalls weitere Azure-Regionen.

    Wichtig

    Durchsuchen Sie den JSON-Download von Microsoft nach Ihrer Region, um eine für Power BI spezifische Netzwerkrichtlinie für die Azure-Region zu erstellen, in der sich Ihr Snowflake-Konto auf Azure befindet.

    Wenn sich Ihr Snowflake-Konto auf Azure beispielsweise in der Region Canada Central befindet, durchsuchen Sie den JSON-Download nach PowerBI.CanadaCentral. Wählen Sie in der addressPrefixes-Liste die IP-Adressbereiche aus. Verwenden Sie diese IP-Adressbereiche, um eine Netzwerkrichtlinie in Snowflake zu erstellen oder zu aktualisieren.

    Wenn die addressPrefixes-Liste leer ist, wenden Sie sich an Microsoft, um ein Update anzufordern.

    Wenn Sie mehrere Microsoft Azure-Dienste verwenden (z. B. Power BI, SCIM), wenden Sie sich an Ihren Azure-Administrator, um die korrekten IP-Adressbereiche zu überprüfen und sicherzustellen, dass die Snowflake-Netzwerkrichtlinie die korrekten IP-Adressbereiche enthält, damit Benutzer sie zulassen können, um auf Snowflake zuzugreifen.

  • Wenn für einen Benutzer entweder die Snowflake-Rolle ACCOUNTADMIN oder SECURITYADMIN verwendet werden muss, wenden Sie sich an den Snowflake-Support.

    Bemerkung

    Standardmäßig sind die Rollen des Kontoadministrators (d. h. Benutzer mit der Systemrolle ACCOUNTADMIN) und des Sicherheitsadministrators (d. h. Benutzer mit der Systemrolle SECURITYADMIN) für die Verwendung von Microsoft Power BI zur Instanziierung einer Snowflake-Sitzung gesperrt. Wenn Sie Benutzern aus geschäftlichen Gründen die Verwendung dieser Rollen gestatten müssen und Ihr Sicherheitsteam damit einverstanden ist, wenden Sie sich an den Snowflake-Support mit der Anforderung, dass die Rollen für Ihr Konto zugelassen werden.

  • Eines der Attribute login_name, name oder email des Snowflake-Benutzers muss dem Azure-Attribut AD upn zugeordnet werden. Wenn das Attribut login_name nicht definiert ist, wird standardmäßig das Attribut name verwendet.

Hinweise

Mit Power BI-Gateway

AWS PrivateLink und Azure Private Link werden unterstützt. Wenn Sie einen der beiden Dienste verwenden müssen, um eine Verbindung zu Snowflake herzustellen, verwenden Sie dafür das lokale Gateway.

Ohne Power BI-Gateway

AWS PrivateLink und Azure Private Link werden nicht unterstützt. Erstellen Sie für Power BI Service und Power BI Desktop eine Netzwerkrichtlinie, um die öffentlichen IP-Adressbereiche von Azure Active Directory zuzulassen. Beachten Sie, dass bei Netzwerkrichtlinien die erlaubten IP-Adressen auf 100.000 Zeichen begrenzt sind.

Token und Schlüssel

Snowflake versucht, Azure Active Directory über den URL-Wert in der external_oauth_jws_keys_url-Eigenschaft (siehe unten) oder über die erlaubten IP-Adressen in der Netzwerkrichtlinie zu verifizieren, falls eine Netzwerkrichtlinie existiert. Microsoft aktualisiert seine Token und Schlüssel alle 24 Stunden. Weitere Informationen zu den Microsoft-Aktualisierungen finden Sie unter Übersicht zu Token in Azure Active Directory B2C.

Erste Schritte

In diesem Abschnitt wird erläutert, wie Sie eine Power BI-Sicherheitsintegration in Snowflake erstellen und wie Sie über Power BI auf Snowflake zugreifen.

Erstellen einer Power BI-Sicherheitsintegration

Bemerkung

Dieser Schritt ist nicht erforderlich, wenn Sie die Verbindung zu Snowflake über den Power BI-Dienst herstellen und dabei das Power BI-Gateway verwenden oder wenn Sie sich bei Snowflake mittels Benutzername und Kennwort authentifizieren.

Um mit Power BI über SSO auf Snowflake-Daten zuzugreifen, muss mit CREATE SECURITY INTEGRATION eine Sicherheitsintegration für Power BI erstellt werden (siehe unten).

Die Sicherheitsintegration muss den korrekten Wert für den Parameter external_oauth_issuer haben. Ein Teil dieses Werts wird Ihrem Azure AD -Mandanten zugeordnet. Sie finden diesen Wert im Abschnitt About Ihres Power BI-Mandanten.

Wenn Ihre Organisation über eine erweiterte Bereitstellung des Power BI-Dienstes verfügt, wenden Sie sich an Ihren Azure AD-Administrator, um den korrekten Wert des Azure AD-Mandanten für die Erstellung der Aussteller-URL zu ermitteln.

Wenn die ID Ihres Azure AD-Mandanten beispielsweise a828b821-f44f-4698-85b2-3c6749302698 ist, erstellen Sie den AZURE_AD_ISSUER-Wert ähnlich wie https://sts.windows.net/a828b821-f44f-4698-85b2-3c6749302698/. Es ist wichtig, am Ende des Werts einen Schrägstrich (d. h. /) einzufügen.

Führen Sie nach dem Erstellen des Werts für AZURE_AD_ISSUER den Befehl CREATE SECURITY INTEGRATION aus. Stellen Sie sicher, dass der Wert für den Sicherheitsintegrationsparameter external_oauth_audience_list korrekt festgelegt wird, je nachdem, ob sich Ihr Snowflake-Konto in der Microsoft Azure Government-Cloudregion befindet oder nicht.

Bei diesen Beispielen wird auch die Rolle ANY verwendet, die einen Rollenwechsel ermöglicht. Weitere Informationen dazu finden Sie unter Verwenden der Rolle ANY für Power BI SSO zu Snowflake.

Sicherheitsintegration für Microsoft Power BI

create security integration powerbi
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
    external_oauth_any_role_mode = 'ENABLE';

Microsoft Azure Government-Sicherheitsintegration für Microsoft Power BI

create security integration powerbi_mag
    type = external_oauth
    enabled = true
    external_oauth_type = azure
    external_oauth_issuer = '<AZURE_AD_ISSUER>'
    external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
    external_oauth_audience_list = ('https://analysis.usgovcloudapi.net/powerbi/connector/snowflake')
    external_oauth_token_user_mapping_claim = 'upn'
    external_oauth_snowflake_user_mapping_attribute = 'login_name'
    external_oauth_any_role_mode = 'ENABLE';

Wichtig

Dieser SQL-Befehl kann nur von Kontoadministratoren (d. h. Benutzern mit der Rolle ACCOUNTADMIN) oder von Rollen mit der globalen Berechtigung CREATE INTEGRATION ausgeführt werden.

Bei den Werten der Sicherheitsintegrationsparameter wird zwischen Groß- und Kleinschreibung unterschieden, und die Werte, die Sie in die Sicherheitsintegration eingeben, müssen in Ihrer Umgebung mit diesen Werten übereinstimmen. Wenn der Fall nicht übereinstimmt, wird das Zugriffstoken möglicherweise nicht validiert, was zu einem fehlgeschlagenen Authentifizierungsversuch führt.

Stellen Sie sicher, dass alle Parameterwerte genau übereinstimmen. Wenn der Wert der <AZURE_AD_ISSUER>-URL beispielsweise nicht mit einem Backslash endet, die Sicherheitsintegration aber mit einem Backslash am Ende der URL erstellt wird, wird eine Fehlermeldung angezeigt. Es wäre dann notwendig, das Sicherheitsintegrationsobjekt (mit DROP INTEGRATION) zu löschen und das Objekt mit dem korrekten URL-Wert (mit CREATE SECURITY INTEGRATION) neu zu erstellen.

Wenn in Ihrer Umgebung der Attributwert für den UPN des Benutzers nicht mit login_name, sondern mit dem E-Mail-Feld des Snowflake-Benutzers übereinstimmt, ersetzen Sie login_name durch email_address. Beispiel:

create security integration powerbi
    type = external_oauth
    ...
    external_oauth_snowflake_user_mapping_attribute = 'email_address';

Verwenden von Power BI SSO mit B2B-Gastbenutzern

Um Gastbenutzern von Azure AD B2B (d. h. Business-to-Business) den Zugriff auf Snowflake über SSO von Microsoft Power BI aus zu ermöglichen, setzen Sie den Wert der Eigenschaft EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM auf 'unique_name'. Beispiel:

create security integration powerbi
  type = external_oauth
  enabled = true
  external_oauth_type = azure
  external_oauth_issuer = '<AZURE_AD_ISSUER>'
  external_oauth_jws_keys_url = 'https://login.windows.net/common/discovery/keys'
  external_oauth_audience_list = ('https://analysis.windows.net/powerbi/connector/Snowflake')
  external_oauth_token_user_mapping_claim = 'unique_name'
  external_oauth_snowflake_user_mapping_attribute = 'login_name';

Weitere Informationen dazu finden Sie unter Erläuterungen zu B2B-Benutzern.

Ändern der External OAuth-Sicherheitsintegration

Sie können Ihre External OAuth-Sicherheitsintegration aktualisieren, indem Sie auf der Sicherheitsintegration eine ALTER-Anweisung ausführen.

Weitere Informationen dazu finden Sie unter ALTER SECURITY INTEGRATION.

Verwenden der Rolle ANY für Power BI SSO zu Snowflake

Im Konfigurationsschritt zum Erstellen einer Sicherheitsintegration in Snowflake enthält das OAuth-Zugriffstoken die Bereichsdefinition. Daher können zur Laufzeit mit der External OAuth-Sicherheitsintegration weder OAuth-Client noch -Benutzer eine undefinierte Rolle im OAuth-Zugriffstoken verwenden.

Nach dem Überprüfen des Zugriffstokens und dem Erstellen einer Sitzung kann die Rolle ANY dem OAuth-Client und -Benutzer ermöglichen, ihre Rolle zu bestimmen. Bei Bedarf kann der Client oder der Benutzer zu einer Rolle wechseln, die sich von der im OAuth-Zugriffstoken definierten Rolle unterscheidet.

Beim Konfigurieren der ANY-Rolle definieren Sie den Bereich als SESSION:ROLE-ANY und konfigurieren dann die Sicherheitsintegration mit dem Parameter external_oauth_any_role_mode. Dieser Parameter kann drei mögliche Zeichenfolgenwerte haben:

  • DISABLE erlaubt dem OAuth-Client oder -Benutzer nicht, die Rollen zu wechseln (d. h. use role <Rolle>;). Standard.

  • ENABLE ermöglicht dem OAuth-Client oder -Benutzer, die Rollen zu wechseln.

  • ENABLE_FOR_PRIVILEGE ermöglicht dem OAuth-Client oder -Benutzer, die Rollen nur für einen Client oder Benutzer mit der Berechtigung USE_ANY_ROLE zu wechseln. Diese Berechtigung kann einer oder mehreren dem Benutzer zur Verfügung stehenden Rollen erteilt und entzogen werden. Beispiel:

    grant USE_ANY_ROLE on integration external_oauth_1 to role1;
    
    revoke USE_ANY_ROLE on integration external_oauth_1 from role1;
    

Definieren Sie die Sicherheitsintegration wie folgt:

create security integration external_oauth_1
    type = external_oauth
    enabled = true
    external_oauth_any_role_mode = 'ENABLE'
    ...

Herstellen einer Verbindung zu Snowflake über Power BI

Weitere Informationen zum Herstellen einer Verbindung zu Snowflake über Power BI finden Sie in der Power BI-Dokumentation.

Verwenden von Netzwerkrichtlinien mit External OAuth

Derzeit können keine Netzwerkrichtlinien zu Ihrer External OAuth-Sicherheitsintegration hinzugefügt werden.

Wenn für Ihren Anwendungsfall OAuth und eine Snowflake-Netzwerkrichtlinie erforderlich sind, verwenden Sie Snowflake OAuth.

Weitere Informationen dazu finden Sie unter OAuth und Netzwerkrichtlinien.

Problembehandlung

  • Fortsetzen des Warehouse. Wenn ein bestimmter Benutzer versucht, ein angehaltenes Warehouse zu verwenden, zeigt Microsoft Power BI eine Fehlermeldung an, die nicht in Fehlermeldungen beschrieben ist. Überprüfen Sie das Warehouse, und konfigurieren Sie es gegebenenfalls so, dass es automatisch fortgesetzt wird, um die Fehlermeldung zu beheben. Weitere Informationen dazu finden Sie unter Starten/Fortsetzen eines Warehouses.

  • Beim Versuch, über Power BI eine Verbindung zu Snowflake herzustellen, können Fehler auftreten. Abhängig von der Fehlermeldung kann eine Fehlerbehebung in Microsoft, Snowflake oder in beiden erforderlich sein.

    • Error Messages beschreiben häufige Fehlermeldungen. Snowflake kann diese Anzeige an Power BI zurückgeben.

    • Login History (Anmeldeverlauf) beschreibt die Verwendung von Snowflake, um zu überprüfen, ob oder wann ein Benutzer zuletzt auf Snowflake zugegriffen hat.

Fehlermeldung

In der folgenden Tabelle werden Fehlermeldungen beschrieben, die Snowflake zurückgibt, wenn sich ein Benutzer in Power BI authentifiziert:

Verhalten

Fehlermeldung

Problembehandlung

Ungültiger Zugriffstoken oder Zielgruppenwert.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC:ERROR [28000] Ungültiges OAuth-Zugriffstoken. [<Nummer>].

Stellen Sie sicher, dass der Parameter external_oauth_issuer den korrekten Wert enthält. . Überprüfen Sie in Azure AD, ob das Zugriffstoken aktuell ist.

AAD-Benutzer nicht im Snowflake-Konto gefunden.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC:ERROR [28000] Es wurde ein falscher Benutzername oder ein falsches Kennwort angegeben.

Stellen Sie sicher, dass der Benutzer in Snowflake vorhanden ist (Attributwert von name oder login_name stimmt mit UPN-Wert des Benutzers in Azure AD überein).

Snowflake-Benutzer vorhanden, aber deaktiviert.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC:ERROR [28000] Benutzerzugriff deaktiviert. Wenden Sie sich an Ihren lokalen Systemadministrator.

Führen Sie in Snowflake desc user <Benutzername> aus, um zu überprüfen, ob das Attribut disabled auf true festgelegt ist. Wenn dieser Benutzer zugelassen werden soll, führen Sie alter user <Benutzername> set disabled = true; aus. Versuchen Sie erneut, von Power BI auf Snowflake zuzugreifen.

Snowflake erhält einen abgelaufenen AAD-Token von Power BI.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC:ERROR [28000] OAuth-Zugriffstoken abgelaufen. [<Nummer>].

Wenden Sie sich an den Snowflake-Support.

Die Sicherheitsintegration wurde für das Snowflake-Konto nicht erstellt oder ist deaktiviert.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC:ERROR [28000] OAuth-Authentifizierungsserver-Integration ist nicht aktiviert.

Führen Sie desc <Name_der_Sicherheitsintegration> aus, um die Sicherheitsintegration zu überprüfen oder neu zu erstellen.

Die Standardrolle ist für den Benutzer nicht festgelegt.

Fehler beim Aktualisieren der Anmeldeinformationen der Datenquelle: ODBC: ERROR [28000] Dem Benutzer wurde keine Standardrolle zugewiesen. Wenden Sie sich an Ihren lokalen Systemadministrator, um eine Standardrolle zuzuweisen, und versuchen Sie es danach erneut.

Legen Sie die Standardrolle für den Benutzer fest.

Dem Benutzer kann seine Standardrolle nicht zugewiesen werden.

Test fehlgeschlagen wegen 250001 (08001): Verbindung zu DB fehlgeschlagen: <Host>. Die für den Benutzer konfigurierte Standardrolle ‚<ROLE>‘ wurde diesem Benutzer nicht zugewiesen. Contact your local system administrator, or attempt to login using a CLI client with a connect string selecting another role, e.g. PUBLIC.

Überprüfen Sie die Standardrolle für den Benutzer, und weisen Sie ihm diese zu.

Anmeldehistorie

Wenn ein Benutzer zwar auf Power BI zugreifen kann, aber keine Snowflake-Sitzung instanziiert, können Sie ermitteln, wann der Benutzer zuletzt auf Snowflake zugegriffen hat, indem Sie die folgenden Befehle über einen unterstützten Konnektor oder die Snowflake-Weboberfläche ausführen. Beachten Sie, dass nur erfolgreiche Authentifizierungen protokolliert werden.

use role accountadmin;
select *
from table(information_schema.login_history(dateadd('hours',-1,current_timestamp()),current_timestamp()))
order by event_timestamp;

Prüfen Sie für jedes Ergebnis die Spalten USER_NAME und FIRST_AUTHENTICATION_FACTOR.

  • Der Wert USER_NAME sollte mit den Attributzuordnungen übereinstimmen, die im Abschnitt Voraussetzungen beschrieben sind.

  • Das Attribut FIRST_AUTHENTICATION_FACTOR sollte auf OAUTH_ACCESS_TOKEN gesetzt sein.