Configurare OAuth esterno per Snowflake: flusso con credenziali client
L’autenticazione con credenziali client OAuth consente le connessioni da computer a computer a Snowflake
senza interazione dell’utente. Questo metodo è ideale per:
Account di servizio per gli aggiornamenti automatizzati dei dati
Processi di estrazione pianificati
Pipeline CI/CD
Origini dati pubblicate che richiedono credenziali incorporate
A differenza di OAuth standard (che utilizza il flusso con codice di autorizzazione), il flusso con credenziali client non
richiede agli utenti di eseguire l’accesso. Tableau esegue invece l’autenticazione direttamente con il tuo provider di identità utilizzando un
ID client e un segreto.
Nota: Il flusso con credenziali client richiede la funzionalità OAuth esterno di Snowflake con un provider di identità supportato. Si tratta di una funzionalità diversa da OAuth nativo di Snowflake.
Prima di iniziare
Per utilizzare le credenziali client OAuth con Snowflake, è necessario soddisfare i seguenti requisiti:
| Requisito | Descrizione |
|---|---|
| Provider di identità | Okta, Azure AD o Ping Federate configurato per la concessione delle credenziali client |
| Account Snowflake | Enterprise Edition o versione superiore con accesso ACCOUNTADMIN |
| Applicazione OAuth | Servizi API (Okta), Registrazione app (Azure AD) o equivalente |
| Ambiti personalizzati | Ambiti per l’assegnazione dei ruoli Snowflake, ad esempio “session:role:SYSADMIN” |
Configurare il provider di identità
Nella procedura seguente viene utilizzato Okta come esempio. Per gli altri provider, consulta la relativa documentazione per la configurazione delle credenziali client.
Fase 1. Creare un’applicazione Servizi API
Accedi alla console di amministrazione di Okta.
Vai a **Applications (Applicazioni) > Applications (Applicazioni).
Seleziona **Create App Integration (Crea integrazione app).
Scegli **API Services** (Servizi API) e seleziona **Next (Avanti).
Immetti un nome per l’applicazione, ad esempio
snowflake-tableau-service.Seleziona Save (Salva).
Copia i valori in Client ID (ID client) e Client Secret (Segreto client). Questi valori saranno necessari in un secondo momento.
Fase 2. Disabilitare DPoP (se abilitato)
L’impostazione DPoP (Demonstrating Proof of Possession) deve essere disabilitata per il flusso con credenziali client.
Nelle impostazioni dell’applicazione, vai a General (Generale) > Client Credentials (Credenziali client).
Deseleziona la casella di controllo Require Demonstrating Proof of Possession (DPoP) header in token requests (Richiedi l’intestazione DPoP nelle richieste di token).
Seleziona Save (Salva).
Fase 3. Aggiungere ambiti personalizzati
Snowflake richiede ambiti personalizzati per assegnare ruoli alla sessione autenticata.
Vai a Security (Sicurezza) > API > Authorization Servers (Server di autorizzazione).
Seleziona il server di autorizzazione default (predefinito) (o il tuo server personalizzato).
Seleziona la scheda Scopes (Ambiti), quindi Add Scope (Aggiungi ambito).
Aggiungi questi ambiti:
Nome ambito Descrizione snowflake Ambito di accesso generale per Snowflake session:role:SYSADMIN Assegna il ruolo SYSADMIN (modificalo per il tuo ruolo) Nota: crea ambiti aggiuntivi per qualsiasi altro ruolo necessario per il tuo account di servizio.
Fase 4. Configurare un criterio di accesso
Seleziona la scheda Access Policies (Criteri di accesso).
Seleziona un criterio esistente o creane uno nuovo.
Aggiungi una regola con queste impostazioni:
Grant type (Tipo di concessione): Client Credentials (Credenziali client)
Scopes (Ambiti): qualsiasi ambito (o seleziona ambiti specifici)
Seleziona Create Rule (Crea regola) o Save (Salva).
Configurare Snowflake
Esegui le seguenti istruzioni SQL in Snowflake come ACCOUNTADMIN. Sostituisci i valori dei segnaposto con la tua configurazione.
Fase 1. Creare l’integrazione OAuth esterna
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE SECURITY INTEGRATION okta_oauth_integration
TYPE = EXTERNAL_OAUTH
ENABLED = TRUE
EXTERNAL_OAUTH_TYPE = OKTA
EXTERNAL_OAUTH_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name'
EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://default', 'snowflake')
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';| Parametro | Descrizione |
|---|---|
EXTERNAL_OAUTH_TYPE | Provider di identità: OKTA, AZURE o PING_FEDERATE |
EXTERNAL_OAUTH_ISSUER | URL dell’emittente restituita dal server di autorizzazione |
EXTERNAL_OAUTH_JWS_KEYS_URL | Endpoint JWKS per la convalida dei token |
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA
IM | Attestazione JWT che identifica l’utente. Utilizza sub per Okta. |
EXTERNAL_OAUTH_ANY_ROLE_MODE | Imposta su ENABLE per consentire l’assegnazione dei ruoli tramite ambiti |
Fase 2. Creare un utente del servizio
Crea un utente Snowflake con LOGIN_NAME corrispondente all’ID client OAuth.
CREATE USER IF NOT EXISTS service_account_user
LOGIN_NAME = '<your-okta-client-id>'
DISPLAY_NAME = 'OAuth Service Account'
MUST_CHANGE_PASSWORD = FALSE
DISABLED = FALSE;
-- Grant role to the service user
GRANT ROLE SYSADMIN TO USER service_account_user;
-- Set the default role
ALTER USER service_account_user SET DEFAULT_ROLE = 'SYSADMIN';
-- Grant warehouse access
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service_account_user;
-- Grant database and schema access
GRANT USAGE ON DATABASE <your-database> TO USER service_account_user;
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
Importante: Il valore di LOGIN_NAME deve essere esattamente identico all’attestazione sub presente nel token OAuth. Per le applicazioni dei servizi API Okta, si tratta dell’ID client.
Connettersi da Tableau Desktop
In Tableau Desktop, seleziona Connetti > Snowflake.
Immetti i dettagli della connessione:
Campo Valore Server URL del tuo account Snowflake, ad esempio account.snowflakecomputing.comRuolo Ruolo da utilizzare, ad esempio SYSADMINWarehouse Warehouse Snowflake Autenticazione Credenziali client OAuth Immetti la configurazione OAuth:
Campo Valore URL richiesta token OAuth https://<your-okta-domain>.okta.com/oauth2/default/ v1/tokenNome utente ID client OAuth Password Segreto client OAuth Ambito OAuth snowflake session:role:SYSADMINNota: l’ambito OAuth deve includere tutti gli ambiti personalizzati configurati per l’assegnazione del ruolo.
Seleziona Accedi.
Pubblicare in Tableau Cloud o Tableau Server
Quando pubblichi una cartella di lavoro o un’origine dati che utilizza le credenziali del client OAuth:
Nella finestra di dialogo Pubblica, seleziona Modifica accanto a Origini dati.
Per Autenticazione, seleziona Password incorporata.
Le credenziali client sono incorporate nel contenuto pubblicato.
Importante: a differenza di OAuth standard, le credenziali client vengono considerate come password incorporate. Gli utenti che accedono al contenuto pubblicato utilizzano le credenziali dell’account di servizio, non la propria identità.
Rotazione delle credenziali
Quando il segreto client OAuth cambia, aggiorna le credenziali incorporate in Tableau Cloud:
Accedi a Tableau Cloud.
Passa all’origine dati pubblicata.
Seleziona Connessioni.
Aggiorna la connessione con il nuovo segreto client.
Per la rotazione automatizzata, utilizza l’API REST di Tableau per aggiornare le credenziali di connessione a livello di programmazione.
Domande frequenti
Quando è consigliabile utilizzare le credenziali client OAuth anziché OAuth standard?
Utilizza le credenziali client quando è necessaria l’autenticazione da computer a computer automatica. Standard
OAuth richiede l’interazione dell’utente per l’accesso iniziale e la riautenticazione periodica. Le credenziali client
utilizzano un’identità dell’account di servizio e non richiedono l’interazione dell’utente.
È possibile utilizzare le credenziali client con OAuth nativo di Snowflake?
No. OAuth nativo di Snowflake supporta solo il flusso con codice di autorizzazione. Le credenziali client richiedono OAuth esterno con un provider di identità supportato (Okta, Azure AD o Ping Federate).
Come si gestisce la rotazione dei segreti per il contenuto pubblicato?
Quando il segreto client OAuth cambia, devi aggiornare le credenziali incorporate in Tableau Cloud. Puoi eseguire questa operazione manualmente tramite l’interfaccia utente di Tableau Cloud oppure a livello di programmazione utilizzando l’API REST di Tableau. Valuta la possibilità di automatizzare questo processo come parte del flusso di lavoro di rotazione dei segreti.
Perché la connessione non riesce e viene visualizzato un errore di ruolo anche se EXTERNAL_OAUTH_ANY_ROLE_MODE è abilitato?
Snowflake richiede informazioni sul ruolo nel token OAuth. Aggiungi un ambito personalizzato, ad esempio, session:role:SYSADMIN, al server di autorizzazione e includilo nel campo Ambito OAuth durante la connessione da Tableau.
Risoluzione dei problemi
| Messaggio di errore | Causa | Soluzione |
|---|---|---|
| “User does not exist or not authorized” (L’utente non esiste o non è autorizzato) | Il valore LOGIN_NAME dell’utente di Snowflake non corrisponde all’ID client OAuth | Imposta il valore LOGIN_NAME dell’utente in modo che corrisponda all’attestazione sub (ID client per Okta) |
| “The role requested is not listed in the Access Token” (Il ruolo richiesto non è elencato nel token di accesso) | Ambito del ruolo mancante nel token | Aggiungi session:role:<ROLE> al server di autorizzazione e includilo in Ambito OAuth |
| “Invalid DPoP proof” (Prova DPoP non valida) | DPoP è abilitato in Okta | Disabilita “Require Demonstrating Proof of Possession (DPoP)” (Richiedi DPoP) nella tua app Okta |
| “Invalid scope” (Ambito non valido) | Ambiti personalizzati non configurati | Aggiungi gli ambiti richiesti al server di autorizzazione; non includere openid |
| Errore di convalida dei token | URL o emittente JWKS errato | Verifica che EXTERNAL_OAUTH_JWS_KEYS
_URL e EXTERNAL_OAUTH_ISSUER corrispondano al server di autorizzazione |
Vedi anche
Configurare OAuth per le connessioni Snowflake in Tableau Server(Il collegamento viene aperto in una nuova finestra) - Informazioni sull’autenticazione OAuth standard con Snowflake.
Integrazioni della sicurezza con Oauth esterno(Il collegamento viene aperto in una nuova finestra) (in inglese) - Documentazione di Snowflake per la configurazione di provider OAuth esterni.
Flusso con credenziali client Okta(Il collegamento viene aperto in una nuova finestra) (in inglese) - Documentazione di Okta per l’implementazione delle credenziali client.
Aggiornare la connessione all’origine dati(Il collegamento viene aperto in una nuova finestra) (in inglese) - Informazioni di riferimento sull’API REST di Tableau per gli aggiornamenti delle credenziali.
