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:
| Requisito | Descripción |
|---|---|
| Proveedor de identidad | Okta, Azure AD o Ping Federate configurados para la concesión de credenciales de cliente |
| Cuenta de Snowflake | Edición Enterprise o superior con acceso ACCOUNTADMIN |
| Aplicación OAuth | Servicios 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
Inicie sesión en su consola de administrador de Okta.
Vaya a **Aplicaciones > Aplicaciones.
Seleccione **Crear integración de aplicaciones.
Seleccione **Servicios de API** y seleccione **Siguiente.
Escriba un nombre de aplicación (por ejemplo,
snowflake-tableau-service).Seleccione Guardar.
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.
En la configuración de la aplicación, vaya a General > Credenciales de cliente.
Desmarque la casilla Requerir encabezado de prueba de posesión (DPoP) en solicitudes de token.
Seleccione Guardar.
Paso 3: Agregar ámbitos personalizados
Snowflake requiere ámbitos personalizados para asignar roles a la sesión autenticada.
Vaya a Seguridad > API > Servidores de autorización.
Seleccione el servidor de autorización predeterminado (o su servidor personalizado).
Seleccione la pestaña Ámbitos y, a continuación, Añadir ámbito.
Añada estos ámbitos:
Nombre del ámbito Descripción snowflake Ámbito de acceso general para Snowflake session:role:SYSADMIN Asigna 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
Seleccione la pestaña Directivas de acceso.
Seleccione una directiva existente o cree una nueva.
Agregue una regla con esta configuración:
Tipo de concesión: Credenciales de cliente
Ámbitos: Cualquier ámbito (o seleccionar ámbitos específicos)
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ámetro | Descripción |
|---|---|
EXTERNAL_OAUTH_TYPE | Su proveedor de identidad: OKTA, AZURE o PING_FEDERATE |
EXTERNAL_OAUTH_ISSUER | La URL del emisor de su servidor de autorización |
EXTERNAL_OAUTH_JWS_KEYS_URL | El extremo JWKS para la validación de tokens |
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA
IM | La notificación JWT que identifica al usuario. Use sub para Okta. |
EXTERNAL_OAUTH_ANY_ROLE_MODE | Establezca 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
En Tableau Desktop, seleccione Conectar > Snowflake.
Introduzca los detalles de su conexión:
Campo Valor Servidor La URL de su cuenta de Snowflake (p. ej., account.snowflakecomputing.com)Rol El rol que se va a usar (p. ej., SYSADMIN)Almacén Su almacén de Snowflake Autenticación Credenciales de cliente OAuth Introduzca la configuración de OAuth:
Campo Valor URL de solicitud de token de OAuth https://<your-okta-domain>.okta.com/oauth2/default/ v1/tokenNombre de usuario Su ID de cliente de OAuth Contraseña Su secreto de cliente de OAuth Ámbito de OAuth snowflake session:role:SYSADMINNota: El ámbito de OAuth debe incluir cualquier ámbito personalizado que haya configurado para la asignación de roles.
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:
En el cuadro de diálogo Publicar, seleccione Editar junto a Fuentes de datos.
Para Autenticación, seleccione Contraseña insertada.
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:
Inicie sesión en Tableau Cloud.
Vaya a la fuente de datos publicada.
Seleccione Conexiones.
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 error | Causa | Solución |
|---|---|---|
| “El usuario no existe o no está autorizado” | El usuario de Snowflake LOGIN_NAME no coincide con el ID de cliente de OAuth | Establezca 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 token | Añ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 Okta | Desactive “Requerir demostración de prueba de posesión (DPoP)” en su aplicación Okta |
| “Ámbito no válido” | Ámbitos personalizados no configurados | Agregue los ámbitos requeridos a su servidor de autorización; no incluir openid |
| Error de validación del token | Emisor o URL de JWKS incorrectos | Compruebe que EXTERNAL_OAUTH_JWS_KEYS
_URL y EXTERNAL_OAUTH_ISSUER coinciden con su servidor de autorización |
Consulte también
Configurar OAuth para conexiones Snowflake en Tableau Server(El enlace se abre en una ventana nueva): Obtenga información sobre la autenticación estándar de OAuth con Snowflake.
Integraciones de seguridad de OAuth externo(El enlace se abre en una ventana nueva): Documentación de Snowflake para configurar proveedores de OAuth externos.
Flujo de credenciales de cliente de Okta(El enlace se abre en una ventana nueva): Documentación de Okta para implementar credenciales de cliente.
Actualizar conexión de fuente de datos(El enlace se abre en una ventana nueva): Referencia de la API de REST de Tableau para actualizaciones de credenciales.
