Mit Snowflake authentifizieren - Amazon Athena

Mit Snowflake authentifizieren

Sie können den Amazon Athena Snowflake-Connector so konfigurieren, dass er entweder die Schlüsselpaar-Authentifizierung oder die OAuth-Authentifizierungsmethode verwendet, um eine Verbindung zu Ihrem Snowflake-Data-Warehouse herzustellen. Beide Methoden bieten sicheren Zugriff auf Snowflake und machen das Speichern von Passwörtern in Verbindungszeichenfolgen überflüssig.

  • Schlüsselpaar-Authentifizierung – Diese Methode verwendet öffentliche oder private RSA-Schlüsselpaare zur Authentifizierung bei Snowflake. Der private Schlüssel signiert Authentifizierungsanfragen digital, während der entsprechende öffentliche Schlüssel zur Überprüfung in Snowflake registriert wird. Diese Methode macht die Speicherung von Passwörtern überflüssig.

  • OAuth-Authentifizierung – Diese Methode verwendet Autorisierungstoken und Aktualisierungstoken zur Authentifizierung bei Snowflake. Sie unterstützt die automatische Token-Aktualisierung und ist somit für lang laufende Anwendungen geeignet.

Weitere Informationen finden Sie unter Schlüsselpaar-Authentifizierung und OAuth-Authentifizierung im Snowflake-Benutzerhandbuch.

Voraussetzungen

Stellen Sie vor Beginn sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • Zugriff auf das Snowflake-Konto mit Administratorrechten.

  • Snowflake-Benutzerkonto speziell für den Athena-Konnektor.

  • OpenSSL oder gleichwertige Tools zur Schlüsselgenerierung für die Schlüsselpaar-Authentifizierung.

  • AWS Secrets Manager-Zugriff zur Erstellung und Verwaltung von Geheimnissen.

  • Webbrowser, um den OAuth-Ablauf für die OAuth-Authentifizierung abzuschließen.

Schlüsselpaar-Authentifizierung konfigurieren

Dieser Vorgang umfasst die Generierung eines RSA-Schlüsselpaars, die Konfiguration Ihres Snowflake-Kontos mit dem öffentlichen Schlüssel und die sichere Speicherung des privaten Schlüssels in AWS Secrets Manager. Die folgenden Schritte führen Sie durch die Erstellung der kryptografischen Schlüssel, die Einrichtung der erforderlichen Snowflake-Berechtigungen und die Konfiguration der AWS-Anmeldeinformationen für eine reibungslose Authentifizierung.

  1. RSA-Schlüsselpaare generieren

    Generieren Sie mit OpenSSL ein privates und ein öffentliches Schlüsselpaar.

    • Um eine unverschlüsselte Version zu generieren, verwenden Sie den folgenden Befehl in Ihrer lokalen Befehlszeilenanwendung.

      openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
    • Um eine verschlüsselte Version zu generieren, verwenden Sie den folgenden Befehl, der -nocrypt auslässt.

      openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
    • Um einen öffentlichen Schlüssel aus einem privaten Schlüssel zu generieren.

      openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # Set appropriate permissions (Unix/Linux) chmod 600 rsa_key.p8 chmod 644 rsa_key.pub
    Anmerkung

    Geben Sie Ihren privaten Schlüssel nicht weiter. Der private Schlüssel sollte nur für die Anwendung zugänglich sein, die sich bei Snowflake authentifizieren muss.

  2. Extrahieren Sie den Inhalt öffentlicher Schlüssel ohne Trennzeichen für Snowflake

    # Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'

    Speichern Sie diese Ausgabe, da Sie sie später im nächsten Schritt benötigen werden.

  3. Snowflake-Benutzer konfigurieren

    Führen Sie zur Konfiguration eines Snowflake-Benutzrs die folgenden Schritte aus.

    1. Erstellen Sie einen dedizierten Benutzer für den Athena-Connector, falls er noch nicht existiert.

      -- Create user for Athena connector CREATE USER athena_connector_user; -- Grant necessary privileges GRANT USAGE ON WAREHOUSE your_warehouse TO ROLE athena_connector_role; GRANT USAGE ON DATABASE your_database TO ROLE athena_connector_role; GRANT SELECT ON ALL TABLES IN DATABASE your_database TO ROLE athena_connector_role;
    2. Gewähren Sie Authentifizierungsberechtigungen. Um einem Benutzer einen öffentlichen Schlüssel zuzuweisen, müssen Sie über eine der folgenden Rollen oder Berechtigungen verfügen.

      • Das MODIFY PROGRAMMATIC AUTHENTICATION METHODS oder OWNERSHIP-Recht für den Benutzer.

      • Die SECURITYADMIN-Rolle oder höher.

      Erteilen Sie die notwendigen Berechtigungen für die Zuweisung öffentlicher Schlüssel mit dem folgenden Befehl.

      GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USER athena_connector_user TO ROLE your_admin_role;
    3. Weisen Sie den öffentlichen Schlüssel mit dem folgenden Befehl dem Snowflake-Benutzer zu.

      ALTER USER athena_connector_user SET RSA_PUBLIC_KEY='RSAkey';

      Stellen Sie mit dem folgenden Befehl sicher, dass der öffentliche Schlüssel dem Benutzer erfolgreich zugewiesen wurde.

      DESC USER athena_connector_user;
  4. Speichern Sie den privaten Schlüssel in AWS Secrets Manager

    1. Konvertieren Sie den privaten Schlüssel in das vom Connector benötigte Format.

      # Read private key content cat rsa_key.p8
    2. Erstellen Sie in AWS Secrets Manager ein Geheimnis mit der folgenden Struktur.

      { "sfUser": "your_snowflake_user", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)" }
      Anmerkung
      • Kopf- und Fußzeile sind optional.

      • Der private Schlüssel muss durch \n getrennt werden.

OAuth-Authentifizierung konfigurieren

Diese Authentifizierungsmethode ermöglicht einen sicheren, tokenbasierten Zugriff auf Snowflake mit Funktionen zur automatischen Aktualisierung der Anmeldeinformationen. Der Konfigurationsprozess umfasst das Erstellen einer Sicherheitsintegration in Snowflake, das Abrufen der OAuth-Client-Anmeldeinformationen, das Abschließen des Autorisierungsvorgangs zum Abrufen eines Zugangscodes und das Speichern der OAuth-Anmeldeinformationen in AWS Secrets Manager, damit der Connector sie verwenden kann.

  1. Erstellen Sie eine Sicherheitsintegration in Snowflake

    Führen Sie den folgenden SQL-Befehl in Snowflake aus, um eine Snowflake-OAuth-Sicherheitsintegration zu erstellen.

    CREATE SECURITY INTEGRATION my_snowflake_oauth_integration_a TYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;

    Konfigurationsparameter

    • TYPE = OAUTH – Gibt den OAuth-Authentifizierungstyp an.

    • ENABLED = TRUE – Aktiviert die Sicherheitsintegration.

    • OAUTH_CLIENT = CUSTOM – Verwendet eine benutzerdefinierte OAuth-Clientkonfiguration.

    • OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' – Legt den Clienttyp für sichere Anwendungen fest.

    • OAUTH_REDIRECT_URI – Die Rückruf-URL für den OAuth-Ablauf. Zum Testen kann es sich um Localhost handeln.

    • OAUTH_ISSUE_REFRESH_TOKENS = TRUE – Aktiviert die Generierung von Aktualisierungstoken.

    • OAUTH_REFRESH_TOKEN_VALIDITY = 7776000 – Legt die Gültigkeit des Aktualisierungstokens fest (90 Tage in Sekunden).

  2. Rufen Sie OAuth-Client-Geheimnisse ab

    1. Führen Sie den folgenden SQL-Befehl aus, um die Anmeldeinformationen des Kunden abzurufen.

      DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A';
    2. Rufen Sie die OAuth-Client-Geheimnisse ab.

      SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');

      Beispielantwort

      { "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE" }
    Anmerkung

    Bewahren Sie diese Anmeldeinformationen sicher auf und geben Sie sie nicht weiter. Diese werden zur Konfiguration des OAuth-Clients verwendet.

  3. Benutzer autorisieren und Autorisierungscode abrufen

    1. Öffnen Sie die folgende URL in einem Browser.

      https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callback
    2. Schließen Sie den Autorisierungsablauf ab.

      1. Melden Sie sich mit Ihren Snowflake-Anmeldeinformationen an.

      2. Erteilen Sie die angeforderten Berechtigungen. Sie werden mit einem Autorisierungscode zur Rückruf-URI weitergeleitet.

    3. Extrahieren Sie den Autorisierungscode, indem Sie den Codeparameter aus der Umleitungs-URL kopieren.

      https://localhost:8080/oauth/callback?code=<authorizationcode>
      Anmerkung

      Der Autorisierungscode ist für eine begrenzte Zeit gültig und kann nur einmal verwendet werden.

  4. Speichern Sie OAuth-Anmeldeinformationen in AWS Secrets Manager

    Erstellen Sie in AWS Secrets Manager ein Geheimnis mit der folgenden Struktur.

    { "redirect_uri": "https://localhost:8080/oauth/callback", "client_secret": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "token_url": "https://<your_account>.snowflakecomputing.com/oauth/token-request", "client_id": "AIDACKCEVSQ6C2EXAMPLE, "username": "your_snowflake_username", "auth_code": "authorizationcode" }

    Pflichtfelder

    • redirect_uri – OAuth-Umleitungs-URI, den Sie in Schritt 1 erhalten haben.

    • client_secret – OAuth-Client-Geheimnis, den Sie in Schritt 2 erhalten haben.

    • token_url – Snowflake OAuth-Token-Endpunkt.

    • client_id – Die OAuth-Client-ID aus Schritt 2.

    • username – Der Snowflake-Benutzername für den Connector.

    • auth_code – Der Autorisierungscode, den Sie in Schritt 3 erhalten haben.

Nachdem Sie ein Geheimnis erstellt haben, erhalten Sie einen geheimen ARN, den Sie in Ihrer Glue-Connection verwenden können, wenn Sie eine Datenquellenverbindung erstellen.