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:

RequisitoDescrizione
Provider di identitàOkta, Azure AD o Ping Federate configurato per la concessione delle credenziali client
Account SnowflakeEnterprise Edition o versione superiore con accesso ACCOUNTADMIN
Applicazione OAuthServizi API (Okta), Registrazione app (Azure AD) o equivalente
Ambiti personalizzatiAmbiti 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

  1. Accedi alla console di amministrazione di Okta.

  2. Vai a **Applications (Applicazioni) > Applications (Applicazioni).

  3. Seleziona **Create App Integration (Crea integrazione app).

  4. Scegli **API Services** (Servizi API) e seleziona **Next (Avanti).

  5. Immetti un nome per l’applicazione, ad esempio snowflake-tableau-service.

  6. Seleziona Save (Salva).

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

  1. Nelle impostazioni dell’applicazione, vai a General (Generale) > Client Credentials (Credenziali client).

  2. Deseleziona la casella di controllo Require Demonstrating Proof of Possession (DPoP) header in token requests (Richiedi l’intestazione DPoP nelle richieste di token).

  3. Seleziona Save (Salva).

Fase 3. Aggiungere ambiti personalizzati

Snowflake richiede ambiti personalizzati per assegnare ruoli alla sessione autenticata.

  1. Vai a Security (Sicurezza) > API > Authorization Servers (Server di autorizzazione).

  2. Seleziona il server di autorizzazione default (predefinito) (o il tuo server personalizzato).

  3. Seleziona la scheda Scopes (Ambiti), quindi Add Scope (Aggiungi ambito).

  4. Aggiungi questi ambiti:

    Nome ambitoDescrizione
    snowflakeAmbito di accesso generale per Snowflake
    session:role:SYSADMINAssegna 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

  1. Seleziona la scheda Access Policies (Criteri di accesso).

  2. Seleziona un criterio esistente o creane uno nuovo.

  3. Aggiungi una regola con queste impostazioni:

    • Grant type (Tipo di concessione): Client Credentials (Credenziali client)

    • Scopes (Ambiti): qualsiasi ambito (o seleziona ambiti specifici)

  4. 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';
ParametroDescrizione
EXTERNAL_OAUTH_TYPEProvider di identità: OKTA, AZURE o PING_FEDERATE
EXTERNAL_OAUTH_ISSUERURL dell’emittente restituita dal server di autorizzazione
EXTERNAL_OAUTH_JWS_KEYS_URLEndpoint JWKS per la convalida dei token
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMAttestazione JWT che identifica l’utente. Utilizza sub per Okta.
EXTERNAL_OAUTH_ANY_ROLE_MODEImposta 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

  1. In Tableau Desktop, seleziona Connetti > Snowflake.

  2. Immetti i dettagli della connessione:

    CampoValore
    ServerURL del tuo account Snowflake, ad esempio account.snowflakecomputing.com
    RuoloRuolo da utilizzare, ad esempio SYSADMIN
    WarehouseWarehouse Snowflake
    AutenticazioneCredenziali client OAuth
  3. Immetti la configurazione OAuth:

    CampoValore
    URL richiesta token OAuthhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    Nome utenteID client OAuth
    PasswordSegreto client OAuth
    Ambito OAuthsnowflake session:role:SYSADMIN

    Nota: l’ambito OAuth deve includere tutti gli ambiti personalizzati configurati per l’assegnazione del ruolo.

  4. 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:

  1. Nella finestra di dialogo Pubblica, seleziona Modifica accanto a Origini dati.

  2. Per Autenticazione, seleziona Password incorporata.

  3. 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:

  1. Accedi a Tableau Cloud.

  2. Passa all’origine dati pubblicata.

  3. Seleziona Connessioni.

  4. 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 erroreCausaSoluzione
“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 OAuthImposta 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 tokenAggiungi session:role:<ROLE> al server di autorizzazione e includilo in Ambito OAuth
“Invalid DPoP proof” (Prova DPoP non valida)DPoP è abilitato in OktaDisabilita “Require Demonstrating Proof of Possession (DPoP)” (Richiedi DPoP) nella tua app Okta
“Invalid scope” (Ambito non valido)Ambiti personalizzati non configuratiAggiungi gli ambiti richiesti al server di autorizzazione; non includere openid
Errore di convalida dei tokenURL o emittente JWKS erratoVerifica che EXTERNAL_OAUTH_JWS_KEYS _URL e EXTERNAL_OAUTH_ISSUER corrispondano al server di autorizzazione

Vedi anche

Grazie per il tuo feedback.Il tuo feedback è stato inviato. Grazie!