Externe OAuth configureren voor Snowflake: flow voor clientreferenties

Verificatie van clientreferenties met OAuth maakt machine-naar-machine-verbindingen met Snowflake mogelijk

zonder gebruikersinteractie. Deze methode is ideaal voor:

  • Serviceaccounts voor automatische datavernieuwingen

  • Geplande extractiejobs

  • CI-/CD-pipelines

  • Gepubliceerde databronnen waarvoor ingesloten referenties vereist zijn

In tegenstelling tot standaard OAuth (die de autorisatiecodeflow gebruikt), wordt gebruikers bij de flow voor clientreferenties niet

gevraagd zich aan te melden. In plaats daarvan verifieert Tableau rechtstreeks bij uw identiteitsprovider met behulp van een

client-ID en -geheim.

Opmerking: voor een clientreferenties-flow is de externe OAuth-functie van Snowflake met een ondersteunde identiteitsprovider vereist. Dit wijkt af van de systeemeigen OAuth van Snowflake.

Voordat u begint

Als u OAuth-clientreferenties met Snowflake wilt gebruiken, hebt u het volgende nodig:

VereisteBeschrijving
IdentiteitsproviderOkta, Azure AD of Ping Federate geconfigureerd voor het verlenen van clientreferenties
Snowflake-accountEnterprise-editie of hoger met toegang tot ACCOUNTADMIN
OAuth-toepassingAPI-services (Okta), app-registratie (Azure AD) of equivalent
Aangepaste scopesScopes voor Snowflake-roltoewijzing (bijv. session:role:SYSADMIN )

Uw identiteitsprovider configureren

In de volgende stappen wordt Okta als voorbeeld gebruikt. Raadpleeg voor andere providers de documentatie voor de configuratie van clientreferenties van de desbetreffende provider.

Stap 1: maak een API-servicestoepassing

  1. Meld u aan bij uw Okta-beheerdersconsole.

  2. Ga naar **Applications > Applications.

  3. Selecteer **Create App Integration.

  4. Kies **API Services** en selecteer **Next.

  5. Voer een toepassingsnaam in (bijvoorbeeld snowflake-tableau-service).

  6. Selecteer de optie voor opslaan.

  7. Kopieer de client-ID en het clientgeheim. U hebt deze waarden later nodig.

Stap 2: schakel DPoP uit (indien ingeschakeld)

DPop (Demonstrating Proof of Possession) moet zijn uitgeschakeld voor een clientreferenties-flow.

  1. Ga in uw toepassingsinstellingen naar General > Client Credentials.

  2. Schakel het selectievakje Require Demonstrating Proof of Possession (DPoP) header in token requests uit.

  3. Selecteer de optie voor opslaan.

Stap 3: voeg aangepaste scopes toe

Snowflake vereist aangepaste scopes voor het toewijzen van rollen aan de geverifieerde sessie.

  1. Ga naar Security > API > Authorization Servers.

  2. Selecteer de standaard-autorisatieserver (of uw aangepaste server).

  3. Selecteer het tabblad Scopes en selecteer vervolgens Add Scope.

  4. Voeg de volgende scopes toe:

    Naam van scopeBeschrijving
    snowflakeAlgemene toegangsscope voor Snowflake
    session:role:SYSADMINWijst de SYSADMIN-rol toe (aanpassen aan uw rol)

    Opmerking: maak extra scopes voor eventuele andere rollen die uw serviceaccount nodig heeft.

Stap 4: configureer een toegangsbeleid

  1. Selecteer het tabblad Access Policies.

  2. Selecteer een bestaand beleid of maak een nieuw beleid.

  3. Voeg een regel toe met de volgende instellingen:

    • Grant type: Clientreferenties

    • Scopes: Alle scopes (of selecteer specifieke scopes)

  4. Selecteer Create Rule of Save.

Snowflake configureren

Voer de volgende SQL-instructies in Snowflake uit als ACCOUNTADMIN. Vervang de waarden van de tijdelijke aanduiding door uw configuratie.

Stap 1: maak de externe OAuth-integratie

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';
ParameterBeschrijving
EXTERNAL_OAUTH_TYPEUw identiteitsprovider: OKTA , AZURE of PING_FEDERATE
EXTERNAL_OAUTH_ISSUERDe uitgever-URL van uw autorisatieserver
EXTERNAL_OAUTH_JWS_KEYS_URLHet JWKS-eindpunt voor tokenvalidatie
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMDe JWT-claim waarmee de gebruiker wordt geïdentificeerd. Gebruik sub voor Okta.
EXTERNAL_OAUTH_ANY_ROLE_MODEStel dit in op ENABLE om roltoewijzing via scopes toe te staan

Stap 2: maak een servicegebruiker

Maak een Snowflake-gebruiker met een LOGIN_NAME die overeenkomt met de OAuth-client-ID.

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;

Belangrijk: de LOGIN_NAME moet exact overeenkomen met de sub-claim in het OAuth-token. Voor Okta API Services-toepassingen is dit de client-ID.

Verbinding maken vanuit Tableau Desktop

  1. Selecteer in Tableau Desktop Verbinding maken > Snowflake.

  2. Voer uw verbindingsgegevens in:

    VeldWaarde
    ServerDe URL van uw Snowflake-account (bijv. account.snowflakecomputing.com)
    RolDe rol die moet worden gebruikt (bijv. SYSADMIN)
    WarehouseUw Snowflake-warehouse
    VerificatieOAuth-clientreferenties
  3. Voer de OAuth-configuratie in:

    VeldWaarde
    URL voor OAuth-tokenaanvraaghttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    GebruikersnaamUw OAuth-client-ID
    WachtwoordUw OAuth-clientgeheim
    OAuth-scopesnowflake session:role:SYSADMIN

    Opmerking: de OAuth-scope moet alle aangepaste scopes bevatten die u voor de roltoewijzing hebt geconfigureerd.

  4. Selecteer Aanmelden.

Publiceren naar Tableau Cloud of Tableau Server

Bij het publiceren van een werkmap of databron die gebruikmaakt van OAuth-clientreferenties:

  1. Selecteer in het dialoogvenster Publiceren de optie Bewerken naast Databronnen.

  2. Bij Verificatie selecteert u Ingesloten wachtwoord.

  3. De clientreferenties worden in de gepubliceerde inhoud ingesloten.

Belangrijk: in tegenstelling tot standaard OAuth worden clientreferenties behandeld als ingesloten wachtwoorden. Gebruikers die toegang hebben tot de gepubliceerde inhoud gebruiken de referenties van het serviceaccount, niet hun eigen identiteit.

Referentierotatie

Wanneer voor uw OAuth-clientgeheim rotatie wordt gebruikt, werkt u de ingesloten referenties in Tableau Cloud bij:

  1. Meld u aan bij Tableau Cloud.

  2. Navigeer naar de gepubliceerde databron.

  3. Selecteer Verbindingen.

  4. Werk de verbinding bij met het nieuwe clientgeheim.

Voor automatische rotatie gebruikt u de Tableau REST API om verbindingsreferenties programmatisch bij te werken.

Veelgestelde vragen

Wanneer moet ik OAuth-clientreferenties gebruiken in plaats van standaard OAuth?

Gebruik clientreferenties wanneer u onbeheerde machine-naar-machine-verificatie nodig hebt. Standaard

OAuth vereist gebruikersinteractie voor de eerste aanmelding en het periodiek opnieuw verifiëren. Clientreferenties

maken gebruik van een serviceaccountidentiteit en vereisen geen gebruikersinteractie.

Kan ik clientreferenties gebruiken met de systeemeigen OAuth van Snowflake?

Nee. De systeemeigen OAuth van Snowflake ondersteunt alleen de autorisatiecodeflow. Voor clientreferenties is externe OAuth met een ondersteunde identiteitsprovider (Okta, Azure AD of Ping Federate) vereist.

Hoe ga ik om met geheimrotatie voor gepubliceerde inhoud?

Wanneer voor uw OAuth-clientgeheim rotatie wordt gebruikt, moet u de ingesloten referenties in Tableau Cloud bijwerken. U kunt dit handmatig doen via de gebruikersinterface van Tableau Cloud of programmatisch met de Tableau REST API. Overweeg om dit proces te automatiseren als onderdeel van uw workflow voor geheimrotatie.

Waarom mislukt mijn verbinding vanwege een rolfout, ook al is EXTERNAL_OAUTH_ANY_ROLE_MODE ingeschakeld?

Snowflake vereist rolinformatie in het OAuth-token. Voeg een aangepaste scope toe (bijv. session:role:SYSADMIN) aan uw autorisatieserver en neem deze op in het veld OAuth-scope wanneer u verbinding maakt vanuit Tableau.

Problemen oplossen

FoutberichtOorzaakOplossing
'User does not exist or not authorized'Snowflake-gebruiker LOGIN_NAME komt niet overeen met OAuth-client-IDStel de LOGIN_NAME van de gebruiker zo in dat deze overeenkomt met de sub-claim (client-ID voor Okta)
'The role requested is not listed in the Access Token'Ontbrekende rolscope in tokenVoeg de session:role:<ROLE>-scope toe aan uw autorisatieserver en neem deze op in de OAuth-scope
'Invalid DPoP proof'DPoP is ingeschakeld in OktaSchakel 'Require Demonstrating Proof of Possession (DPoP)' uit in uw Okta-app
'Invalid scope'Aangepaste scopes niet geconfigureerdVoeg vereiste scopes toe aan uw autorisatieserver; neem openid niet op
Tokenvalidatie misluktOnjuiste JWKS-URL of -uitgeverGa na of EXTERNAL_OAUTH_JWS_KEYS _URL en EXTERNAL_OAUTH_ISSUER overeenkomen met uw autorisatieserver

Zie ook

Bedankt voor uw feedback.De feedback is verzonden. Dank u wel.