PingFederate für External OAuth konfigurieren

Unter diesem Thema wird beschrieben, wie Sie Snowflake als OAuth-Ressource und Ping Identity PingFederate als External OAuth-Autorisierungsserver konfigurieren, um einen sicheren, programmgesteuerten Zugriff auf Snowflake-Daten zu ermöglichen.

Unter diesem Thema:

Konfigurationsverfahren

In den folgenden beiden Schritten wird davon ausgegangen, dass in Ihrer Umgebung nichts konfiguriert ist, was sich auf PingFederate OAuth-Autorisierungsserver, OAuth-Clients, Bereiche und erforderliche Metadaten bezieht. Diese Schritte sind auch ein repräsentatives Beispiel für die Konfiguration von PingFederate.

Die Informationen aus dem ersten Schritt werden verwendet, um eine Sicherheitsintegration in Snowflake zu erstellen.

Wenn Sie bereits einen PingFederate-Autorisierungsserver und -Client konfiguriert haben, müssen Sie alle folgenden Schritte nicht ausführen. Überspringen Sie stattdessen den ersten Schritt, und stellen Sie sicher, dass Sie die gewünschten Informationen erhalten, Bereiche erstellen, Bereiche zu einer oder mehreren Richtlinien zuweisen und auf die Metadaten zugreifen können.

Wenn Sie keinen PingFederate OAuth-Autorisierungsserver und -Client konfiguriert haben, führen Sie beide Schritte aus.

Wichtig

Die Schritte unter diesem Thema sind ein repräsentatives Beispiel für das Konfigurieren von PingFederate für External OAuth.

Sie können PingFederate auf einen beliebigen Status konfigurieren und einen beliebigen OAuth-Ablauf verwenden, sofern Sie die erforderlichen Informationen für die Sicherheitsintegration (unter diesem Thema) erhalten.

Beachten Sie, dass die folgenden Schritte als Leitfaden dienen, um die erforderlichen Informationen zum Erstellen der Sicherheitsintegration in Snowflake abzurufen.

Beachten Sie bei der Konfiguration eines Autorisierungsservers unbedingt Ihre internen Sicherheitsrichtlinien, damit Ihre Organisation alle erforderlichen Vorschriften und Compliance-Anforderungen erfüllt.

Schritt 1 wird aus der PingIdentity-Dokumentation zu OAuth 2.0 abgeleitet. Weitere Informationen dazu, wie PingIdentity seine Begriffe, seine Benutzeroberfläche und Optionen für Autorisierungsserver definiert, finden Sie in den folgenden PingIdentity-Handbüchern:

Schritt 1: PingFederate konfigurieren

  1. Navigieren Sie zur Downloadseite des PingFederate-Servers, laden Sie die PingFederate-Instanz für Ihr Betriebssystem herunter, oder aktualisieren Sie sie.

  2. Verwenden Sie die Installationsanleitung PingFederate für Ihr Betriebssystem. Greifen Sie nach der Installation auf PingFederate zu.

  3. Erstellen Sie die OAuth-Bereiche, indem Sie im OAuth Server-Bereich zum Bereich Exclusive Scopes navigieren.

  4. Um eine Snowflake-Rolle als Bereich hinzuzufügen, fügen Sie die Rolle zu Scope Value hinzu. Die Snowflake-Rolle muss das Präfix session:role: haben (geben Sie z. B. für die Snowflake Analyst-Rolle session:role:analyst ein).

  5. Geben Sie eine Beschreibung für den Bereich in das Feld Scope Description ein, und klicken Sie auf Add.

  6. Navigieren Sie zur Registerkarte OAuth Server, und erstellen Sie einen neuen Client. Prüfen Sie die folgenden Werte:

    Feld

    Wert

    NAME

    Ein Anzeigename für den PingFederate OAuth-Autorisierungsserver

    DESCRIPTION

    Eine benutzerfreundliche Beschreibung für den PingFederate OAuth-Authorisierungsserver

    CLIENT AUTHENTICATION

    CLIENT SECRET

    EXCLUSIVE SCOPES

    Wählen Sie die Bereiche aus (d. h. Snowflake-Rollen)

    ALLOWED GRANT TYPES

    Wählen Sie Refresh Token und Resource Owner Password Credentials

    DEFAULT ACCESS TOKEN MANAGER

    JSON-Webtoken

  7. Navigieren Sie zur Registerkarte Security, und exportieren Sie das Zertifikat. Extrahieren Sie den öffentlichen Schlüssel aus dem Zertifikat, um ihn in den folgenden Schritten zu verwenden.

  8. Navigieren Sie zur Registerkarte Instance Configuration unter der Registerkarte OAuth Server und Access Token Management | Create Access Token Management Instance. Aktualisieren Sie ISSUER CLAIM VALUE auf den eindeutigen Bezeichner, der auf diesen OAuth-Autorisierungsserver verweist, und AUDIENCE CLAIM VALUE auf Ihre Snowflake-Konto-URL (z. B. https://<Konto>.<Region>.snowflakecomputing.com).

  9. Laden Sie das Add-On PingFederate OAuth Playground aus dem Abschnitt Entwicklertools herunter. Dieser Client führt API-Anforderungen aus.

  10. Installieren Sie den OAuth Playground.

Schritt 2: OAuth-Autorisierungsserver in Snowflake erstellen

Bei diesem Schritt wird eine Sicherheitsintegration in Snowflake erstellt, die dafür sorgt, dass Snowflake sicher mit PingIdentity kommunizieren, die Token von PingIdentity validieren und Benutzern den entsprechenden Snowflake-Datenzugriff basierend auf der dem OAuth-Token zugeordneten Benutzerrolle bereitstellen kann.

Führen Sie die folgende Anweisung entweder über die Snowflake-Weboberfläche oder in SnowSQL aus.

Beachten Sie, dass der Wert für external_oauth_issuer der in Schritt 1.8 festgelegte eindeutige Bezeichner sein muss. Wenn der eindeutige Bezeichnerwert beispielsweise 27f10cde-a964-4499-a88c-0c598883e5ad ist, ersetzen Sie <eindeutige_ID> durch '27f10cde-a964-4499-a88c-0c598883e5ad'. Der eindeutige Bezeichner muss in einfachen (vertikalen) Anführungszeichen stehen.

Wählen Sie die Sicherheitsintegration aus, die Ihren Anwendungsfällen und Konfigurationsanforderungen am besten entspricht. Weitere Informationen dazu finden Sie unter CREATE SECURITY INTEGRATION.

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 mit diesen Werten in Ihrer Umgebung übereinstimmen. Wenn die Schreibung nicht übereinstimmt, wird das Zugriffstoken möglicherweise nicht validiert, was zu einem fehlgeschlagenen Authentifizierungsversuch führt.

OAuth-Autorisierungsserver erstellen

create or replace security integration external_oauth_pf_1
    type = external_oauth
    enabled = true
    external_oauth_type = ping_federate
    external_oauth_rsa_public_key = '<BASE64_PUBLIC_KEY>'
    external_oauth_issuer = '<unique_id>'
    external_oauth_token_user_mapping_claim = 'username'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

Diese Sicherheitsintegration verwendet den Parameter external_oauth_rsa_public_key. Snowflake verwendet den Wert des öffentlichen Schlüssels, um die Signatur für das JWT-Zugriffstoken zu überprüfen.

OAuth-Autorisierungsserver mit Zielgruppen erstellen

create security integration external_oauth_pf_2
    type = external_oauth
    enabled=true
    external_oauth_type = ping_federate
    external_oauth_issuer = '<ISSUER>'
    external_oauth_rsa_public_key = '<BASE64_PUBLIC_KEY>'
    external_oauth_audience_list = ('AUDIENCE')
    external_oauth_token_user_mapping_claim = 'username'
    external_oauth_snowflake_user_mapping_attribute = 'login_name';

Diese Sicherheitsintegration verwendet den Parameter external_oauth_rsa_public_key. Snowflake verwendet den Wert des öffentlichen Schlüssels, um die Signatur für das JWT-Zugriffstoken zu überprüfen.

Ändern Ihrer 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 mit External OAuth

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'
    ...

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.

Testverfahren

Im Zusammenhang mit dem Testen von OAuth unter Verwendung von PingFederate als Autorisierungsserver müssen Sie Folgendes tun:

  1. Stellen Sie sicher, dass der Testbenutzer in PingIdentity vorhanden ist und ein Kennwort hat.

  2. Stellen Sie sicher, dass der Testbenutzer in Snowflake vorhanden ist und der Attributwert login_name auf <PING_USER_USERNAME> gesetzt ist.

  3. Erteilen Sie diesem Benutzer die Rolle „Analyst“.

  4. Registrieren Sie einen OAuth-Client.

  5. Ermöglichen Sie dem OAuth-Client, eine POST-Anforderung an den PingFederate-Token-Endpunkt wie folgt zu senden:

    • Gewährungstyp auf „Ressource Owner“ setzen.

    • HTTP-Basic Authorization-Header, der clientID und Geheimnis enthält.

    • FORM-Daten, die den Benutzernamen und das Kennwort des Benutzers enthalten.

    • Fügen Sie alle erforderlichen Bereiche hinzu.

Der Beispielbefehl fordert den Analysten an und setzt voraus, dass session:role:analyst in PingFederate > OAuth Server > Exclusive Scopes definiert ist.

Verwenden Sie den folgenden Befehl, um ein Zugriffstoken von Ping zu erhalten.

curl -k 'https://10.211.55.4:9031/as/token.oauth2' \
    --data 'client_id=<CLIENT_ID>&grant_type=password&username=<USERNAME>&password=<PASSWORD>&client_secret=<CLIENT_SECRET>&scope=session:role:analyst'

Herstellen einer Verbindung zu Snowflake mit External OAuth

Nachdem Sie Ihre Sicherheitsintegration konfiguriert und Ihr Zugriffstoken erhalten haben, können Sie eine der folgenden Verbindungen zu Snowflake herstellen:

Beachten Sie Folgendes:

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

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

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

Wenn Sie beispielsweise den Python-Konnektor verwenden, legen Sie die Verbindungszeichenfolge wie unten gezeigt fest.

ctx = snowflake.connector.connect(
   user="<username>",
   host="<hostname>",
   account="<account_name>",
   authenticator="oauth",
   token="<external_oauth_access_token>",
   warehouse="test_warehouse",
   database="test_db",
   schema="test_schema"
)

Sie können jetzt External OAuth verwenden, um eine sichere Verbindung zu Snowflake herzustellen.