Autenticare con Snowflake
È possibile configurare il connettore Amazon Athena Snowflake per utilizzare l'autenticazione a coppia di chiavi o il metodo di autenticazione OAuth per connettersi al proprio data warehouse Snowflake. Entrambi i metodi forniscono un accesso sicuro a Snowflake ed eliminano la necessità di memorizzare le password nelle stringhe di connessione.
-
Autenticazione con coppia di chiavi: questo metodo utilizza coppie di chiavi pubbliche o private RSA per l'autenticazione con Snowflake. La chiave privata firma digitalmente le richieste di autenticazione mentre la chiave pubblica corrispondente viene registrata in Snowflake per la verifica. Questo metodo elimina la necessità di memorizzare le password.
-
Autenticazione OAuth: questo metodo utilizza il token di autorizzazione e il token di aggiornamento per l'autenticazione con Snowflake. Supporta l'aggiornamento automatico dei token, rendendolo adatto per applicazioni a lunga durata.
Per ulteriori informazioni, consultare Autenticazione a coppie di chiavi
Prerequisiti
Prima di iniziare, completa i seguenti prerequisiti:
-
Accesso all'account Snowflake con privilegi amministrativi.
-
Account utente Snowflake dedicato al connettore Athena.
-
OpenSSL o strumenti equivalenti per la generazione di chiavi per l'autenticazione a coppie di chiavi.
-
Accesso Gestione dei segreti AWS per creare e gestire segreti.
-
Browser web per completare il flusso OAuth per l'autenticazione OAuth.
Configurare l'autenticazione tramite coppia di chiavi
Questo processo prevede la generazione di una coppia di chiavi RSA, la configurazione dell'account Snowflake con la chiave pubblica e l'archiviazione sicura della chiave privata in Gestione dei segreti AWS. I seguenti passaggi ti guideranno nella creazione delle chiavi crittografiche, nell'impostazione delle autorizzazioni Snowflake necessarie e nella configurazione delle credenziali AWS per un'autenticazione senza interruzioni.
Generare una coppia di chiavi RSA
Generare una coppia di chiavi privata e pubblica usando OpenSSL.
-
Per generare una versione non crittografata, usare il seguente comando nell'applicazione a riga di comando locale.
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt -
Per generare una versione crittografata, utilizzare il seguente comando, che omette
-nocrypt.openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8 -
Per generare una chiave pubblica da una chiave privata.
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
Nota
Si raccomanda di non condividere la propria chiave privata. La chiave privata deve essere accessibile solo all'applicazione che deve autenticarsi con Snowflake.
-
Estrarre il contenuto della chiave pubblica senza delimitatori per Snowflake
# Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'Salvare l'output poiché sarà necessario nella fase successiva.
-
Configurare l'utente Snowflake
Per configurare un account utente Snowflake, seguire la procedura illustrata qui.
-
Creare un utente dedicato per il connettore Athena se non esiste già.
-- 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; Concedere i privilegi di autenticazione. Per assegnare una chiave pubblica a un utente, è necessario disporre di uno dei seguenti ruoli o privilegi.
-
Il privilegio
MODIFY PROGRAMMATIC AUTHENTICATION METHODSoOWNERSHIPsull'utente. -
Il ruolo
SECURITYADMINo il livello superiore.
Concedere i privilegi necessari per l'assegnazione delle chiavi pubbliche tramite il seguente comando.
GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USERathena_connector_userTO ROLEyour_admin_role;-
-
Assegnare la chiave pubblica all'account utente Snowflake con il seguente comando.
ALTER USERathena_connector_userSET RSA_PUBLIC_KEY='RSAkey';Verificare che la chiave pubblica sia stata assegnata correttamente all'utente con il seguente comando.
DESC USERathena_connector_user;
-
Memorizzare la chiave privata in Gestione dei segreti AWS
Convertire la chiave privata nel formato richiesto dal connettore.
# Read private key content cat rsa_key.p8-
Creare un segreto in Gestione dei segreti AWS con la seguente struttura.
{ "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)" }Nota
L'intestazione e il piè di pagina sono opzionali.
La chiave privata deve essere separata da
\n.
Configurare l'autenticazione OAuth
Questo metodo di autenticazione consente un accesso a Snowflake sicuro e basato su token, con funzionalità di aggiornamento automatico delle credenziali. Il processo di configurazione prevede la creazione di un'integrazione di sicurezza in Snowflake, il recupero delle credenziali del client OAuth, il completamento del flusso di autorizzazione per ottenere un codice di accesso e l'archiviazione delle credenziali OAuth in Gestione dei segreti AWS per l'utilizzo da parte del connettore.
Creare un'integrazione di sicurezza in Snowflake
Eseguire il seguente comando SQL in Snowflake per creare un'integrazione di sicurezza Snowflake OAuth.
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;Parametri di configurazione
-
TYPE = OAUTH: specifica il tipo di autenticazione OAuth. -
ENABLED = TRUE: abilita l'integrazione della sicurezza. -
OAUTH_CLIENT = CUSTOM: utilizza la configurazione personalizzata del client OAuth. -
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL': impostare il tipo di client per applicazioni sicure. -
OAUTH_REDIRECT_URI: l'URL di callback per il flusso OAuth. Può essere localhost per i test. -
OAUTH_ISSUE_REFRESH_TOKENS = TRUE: abilita la generazione di token di aggiornamento. -
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000: imposta la validità del token di aggiornamento (90 giorni in secondi).
-
Recupera i segreti del client OAuth
-
Eseguire il seguente comando, per ottenere queste credenziali.
DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A'; Recuperare i segreti del client OAuth.
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');Risposta di esempio
{ "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE" }
Nota
Mantenere queste credenziali al sicuro e non condividerle. Queste verranno utilizzate per configurare il client OAuth.
-
Autorizzare l'utente e recuperare il codice di autorizzazione
Aprire il seguente URL in un browser.
https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callbackCompletare il flusso di autorizzazione.
-
Accedere usando le credenziali Snowflake.
-
Concedere le autorizzazioni richieste. Si verrà reindirizzati all'URI di callback con un codice di autorizzazione.
-
Estrarre il codice di autorizzazione copiando il parametro code dall'URL di reindirizzamento.
https://localhost:8080/oauth/callback?code=<authorizationcode>Nota
Il codice di autorizzazione è valido per un periodo di tempo limitato e può essere utilizzato una sola volta.
Memorizzare le credenziali OAuth in Gestione dei segreti AWS
Creare un segreto in Gestione dei segreti AWS con la seguente struttura.
{ "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" }Campi obbligatori
-
redirect_uri: URI di reindirizzamento OAuth ottenuto dal passaggio 1. -
client_secret: segreto del client OAuth ottenuto dal passaggio 2. -
token_url: l'endpoint del token OAuth Snowflake. -
client_id: l'ID del client OAuth del passaggio 2. -
username: il nome utente Snowflake per il connettore. -
auth_code: il codice di autorizzazione che ottenuto al passaggio 3.
-
Dopo aver creato un segreto, si ottiene un ARN segreto che è possibile usare nella propria connessione Glue quando si crea una connessione a un’origine dati.