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
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.
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
-nocryptauslä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.
-
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.
-
Snowflake-Benutzer konfigurieren
Führen Sie zur Konfiguration eines Snowflake-Benutzrs die folgenden Schritte aus.
-
Erstellen Sie einen dedizierten Benutzer für den Athena-Connector, falls er noch nicht existiert.
-- Create user for Athena connector CREATE USERathena_connector_user; -- Grant necessary privileges GRANT USAGE ON WAREHOUSEyour_warehouseTO ROLEathena_connector_role; GRANT USAGE ON DATABASEyour_databaseTO ROLEathena_connector_role; GRANT SELECT ON ALL TABLES IN DATABASEyour_databaseTO ROLEathena_connector_role; 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 METHODSoderOWNERSHIP-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 USERathena_connector_userTO ROLEyour_admin_role;-
-
Weisen Sie den öffentlichen Schlüssel mit dem folgenden Befehl dem Snowflake-Benutzer zu.
ALTER USERathena_connector_userSET RSA_PUBLIC_KEY='RSAkey';Stellen Sie mit dem folgenden Befehl sicher, dass der öffentliche Schlüssel dem Benutzer erfolgreich zugewiesen wurde.
DESC USERathena_connector_user;
-
Speichern Sie den privaten Schlüssel in AWS Secrets Manager
Konvertieren Sie den privaten Schlüssel in das vom Connector benötigte Format.
# Read private key content cat rsa_key.p8-
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
\ngetrennt 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.
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 INTEGRATIONmy_snowflake_oauth_integration_aTYPE = 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).
-
Rufen Sie OAuth-Client-Geheimnisse ab
-
Führen Sie den folgenden SQL-Befehl aus, um die Anmeldeinformationen des Kunden abzurufen.
DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A'; 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.
-
Benutzer autorisieren und Autorisierungscode abrufen
Ö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/callbackSchließen Sie den Autorisierungsablauf ab.
-
Melden Sie sich mit Ihren Snowflake-Anmeldeinformationen an.
-
Erteilen Sie die angeforderten Berechtigungen. Sie werden mit einem Autorisierungscode zur Rückruf-URI weitergeleitet.
-
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.
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.