Configurar OAuth externo para Snowflake: flujo de credenciales de cliente

La autenticación de credenciales de cliente de OAuth permite conexiones de equipo a equipo a Snowflake

sin interacción del usuario. Este método es ideal para:

  • Cuentas de servicio para actualizaciones de datos automatizadas

  • Trabajos de extracciones programadas

  • Canalizaciones de CI/CD

  • Fuentes de datos publicadas que requieren credenciales insertadas

A diferencia de OAuth estándar (que usa el flujo de código de autorización), el flujo de credenciales de cliente no

solicitará a los usuarios que inicien sesión. En su lugar, Tableau se autentica directamente con su proveedor de identidad mediante un

ID de cliente y secreto.

Nota: El flujo de credenciales de cliente requiere la función OAuth externa de Snowflake con un proveedor de identidad compatible. Esto es diferente del OAuth nativo de Snowflake.

Antes de empezar

Para usar las credenciales de cliente de OAuth con Snowflake, necesita:

RequisitoDescripción
Proveedor de identidadOkta, Azure AD o Ping Federate configurados para la concesión de credenciales de cliente
Cuenta de SnowflakeEdición Enterprise o superior con acceso ACCOUNTADMIN
Aplicación OAuthServicios de API (Okta), Registro de aplicaciones (Azure AD) o equivalente
Ámbitos personalizadosÁmbitos para la asignación de roles de Snowflake (por ejemplo, “session:role:SYSADMIN” )

Configurar su proveedor de identidad

Los siguientes pasos usan Okta como ejemplo. Para otros proveedores, consulte su documentación para la configuración de credenciales de cliente.

Paso 1: Crear una aplicación de servicios de API

  1. Inicie sesión en su consola de administrador de Okta.

  2. Vaya a **Aplicaciones > Aplicaciones.

  3. Seleccione **Crear integración de aplicaciones.

  4. Seleccione **Servicios de API** y seleccione **Siguiente.

  5. Escriba un nombre de aplicación (por ejemplo, snowflake-tableau-service).

  6. Seleccione Guardar.

  7. Copie el ID de cliente y Secreto del cliente. Necesitará estos valores más adelante.

Paso 2: Deshabilitar DPoP (si está habilitado)

La prueba de posesión (DPoP) debe estar deshabilitada para el flujo de credenciales de cliente.

  1. En la configuración de la aplicación, vaya a General > Credenciales de cliente.

  2. Desmarque la casilla Requerir encabezado de prueba de posesión (DPoP) en solicitudes de token.

  3. Seleccione Guardar.

Paso 3: Agregar ámbitos personalizados

Snowflake requiere ámbitos personalizados para asignar roles a la sesión autenticada.

  1. Vaya a Seguridad > API > Servidores de autorización.

  2. Seleccione el servidor de autorización predeterminado (o su servidor personalizado).

  3. Seleccione la pestaña Ámbitos y, a continuación, Añadir ámbito.

  4. Añada estos ámbitos:

    Nombre del ámbitoDescripción
    snowflakeÁmbito de acceso general para Snowflake
    session:role:SYSADMINAsigna el rol SYSADMIN (ajuste según su rol)

    Nota: Cree ámbitos adicionales para cualquier otro rol que necesite su cuenta de servicio.

Paso 4: Configurar una directiva de acceso

  1. Seleccione la pestaña Directivas de acceso.

  2. Seleccione una directiva existente o cree una nueva.

  3. Agregue una regla con esta configuración:

    • Tipo de concesión: Credenciales de cliente

    • Ámbitos: Cualquier ámbito (o seleccionar ámbitos específicos)

  4. Seleccione Crear regla o Guardar.

Configurar Snowflake

Ejecute las siguientes instrucciones SQL en Snowflake como ACCOUNTADMIN. Reemplace los valores de marcador de posición con su configuración.

Paso 1: Crear la integración de OAuth externa

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';
ParámetroDescripción
EXTERNAL_OAUTH_TYPESu proveedor de identidad: OKTA, AZURE o PING_FEDERATE
EXTERNAL_OAUTH_ISSUERLa URL del emisor de su servidor de autorización
EXTERNAL_OAUTH_JWS_KEYS_URLEl extremo JWKS para la validación de tokens
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMLa notificación JWT que identifica al usuario. Use sub para Okta.
EXTERNAL_OAUTH_ANY_ROLE_MODEEstablezca esto en ENABLE para permitir la asignación de roles a través de ámbitos

Paso 2: Crear un usuario de servicio

Cree un usuario de Snowflake con un LOGIN_NAME que coincida con el ID de cliente de 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: El LOGIN_NAME debe coincidir exactamente con la afirmación sub en el token de OAuth. Para las aplicaciones de servicios API de Okta, este es el ID de cliente.

Conectarse desde Tableau Desktop

  1. En Tableau Desktop, seleccione Conectar > Snowflake.

  2. Introduzca los detalles de su conexión:

    CampoValor
    ServidorLa URL de su cuenta de Snowflake (p. ej., account.snowflakecomputing.com)
    RolEl rol que se va a usar (p. ej., SYSADMIN)
    AlmacénSu almacén de Snowflake
    AutenticaciónCredenciales de cliente OAuth
  3. Introduzca la configuración de OAuth:

    CampoValor
    URL de solicitud de token de OAuthhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    Nombre de usuarioSu ID de cliente de OAuth
    ContraseñaSu secreto de cliente de OAuth
    Ámbito de OAuthsnowflake session:role:SYSADMIN

    Nota: El ámbito de OAuth debe incluir cualquier ámbito personalizado que haya configurado para la asignación de roles.

  4. Seleccione Iniciar sesión.

Publicar en Tableau Cloud o Tableau Server

Al publicar un libro de trabajo o una fuente de datos que utiliza credenciales de cliente de OAuth:

  1. En el cuadro de diálogo Publicar, seleccione Editar junto a Fuentes de datos.

  2. Para Autenticación, seleccione Contraseña insertada.

  3. Las credenciales del cliente se insertan en el contenido publicado.

Importante: A diferencia de OAuth estándar, las credenciales de cliente se tratan como contraseñas incrustadas. Los usuarios que acceden al contenido publicado usan las credenciales de la cuenta de servicio, no su propia identidad.

Rotación de credenciales

Cuando su secreto de cliente de OAuth rote, actualice las credenciales insertadas en Tableau Cloud:

  1. Inicie sesión en Tableau Cloud.

  2. Vaya a la fuente de datos publicada.

  3. Seleccione Conexiones.

  4. Actualice la conexión con el nuevo secreto de cliente.

Para la rotación automatizada, use la API de REST de Tableau para actualizar las credenciales de conexión mediante programación.

Preguntas frecuentes

¿Cuándo debo usar las credenciales de cliente de OAuth en lugar de OAuth estándar?

Utilice las credenciales de cliente cuando necesite una autenticación desatendida de equipo a equipo. Estándar

OAuth requiere la interacción del usuario para el inicio de sesión inicial y la reautenticación periódica. Las credenciales de cliente

usan una identidad de cuenta de servicio y no requieren la interacción del usuario.

¿Puedo usar credenciales de cliente con OAuth nativo de Snowflake?

No. El OAuth nativo de Snowflake solo admite el flujo de código de autorización. Las credenciales de cliente requieren OAuth externo con un proveedor de identidad compatible (Okta, Azure AD o Ping Federate).

¿Cómo manejo la rotación de secretos para el contenido publicado?

Cuando su secreto de cliente de OAuth rota, debe actualizar las credenciales insertadas en Tableau Cloud. Puede hacerlo manualmente a través de la interfaz de usuario de Tableau Cloud o mediante programación mediante la API de REST de Tableau. Considere automatizar este proceso como parte de su flujo de trabajo de rotación de secretos.

¿Por qué mi conexión falla con un error de rol aunque EXTERNAL_OAUTH_ANY_ROLE_MODE está habilitado?

Snowflake requiere información de roles en el token de OAuth. Agregue un ámbito personalizado (por ejemplo, session:role:SYSADMIN) a su servidor de autorización e incluirlo en el campo Ámbito de OAuth cuando se conecte desde Tableau.

Solución de problemas

Mensaje de errorCausaSolución
“El usuario no existe o no está autorizado”El usuario de Snowflake LOGIN_NAME no coincide con el ID de cliente de OAuthEstablezca el usuario LOGIN_NAME para que coincida con la afirmación sub (ID de cliente para Okta)
“El rol solicitado no aparece en el token de acceso”Falta el alcance del rol en el tokenAñada el ámbito session:role:<ROLE> a su servidor de autorización e inclúyalo en OAuth Scope
“Prueba DPoP no válida”DPoP está habilitado en OktaDesactive “Requerir demostración de prueba de posesión (DPoP)” en su aplicación Okta
“Ámbito no válido”Ámbitos personalizados no configuradosAgregue los ámbitos requeridos a su servidor de autorización; no incluir openid
Error de validación del tokenEmisor o URL de JWKS incorrectosCompruebe que EXTERNAL_OAUTH_JWS_KEYS _URL y EXTERNAL_OAUTH_ISSUER coinciden con su servidor de autorización

Consulte también

¡Gracias por sus comentarios!Sus comentarios se han enviado correctamente. ¡Gracias!