Configurar OAuth de IAM para Amazon Redshift

A partir de Tableau 2023.3.2 para instalaciones locales (Tableau Desktop, Tableau Server y Tableau Prep) y finales de marzo de 2024 para Tableau Cloud, puede usar OAuth 2.0/OIDC para federar la identidad de un proveedor de identidad externo a Amazon Redshift.

Estas instrucciones hacen referencia al servicio AWS IAM anterior. Para la integración de IAM IDC, consulte Configurar OAuth desde el Centro de identidades de IAM para Amazon Redshift.

Según el proveedor de identidad, se necesitan diferentes pasos para configurar la integración. Esta es una descripción general de alto nivel. Tableau no puede proporcionar instrucciones detalladas sobre cómo configurar AWS o el proveedor de identidad (IdP), pero a continuación se expone el enfoque general.

Configuración del IdP

  1. Cree clientes OAuth en el IdP para Tableau Desktop y Tableau Server o Tableau Cloud. El cliente de Desktop debe habilitar PKCE y usar las redirecciones http://localhost.

  2. Agregue notificaciones personalizadas para la autorización de roles. En concreto, si está utilizando el servicio IAM original, es posible que desee agregar notificaciones para DbUser y DbGroups. Podrán utilizarse en sus políticas de IAM más adelante.

  3. Cree los archivos de configuración de OAuth para Tableau. Consulte la documentación en GitHub(El enlace se abre en una ventana nueva) y ejemplos aquí (en inglés)(El enlace se abre en una ventana nueva). Agradeceremos cualquier ejemplo para otros IdP.

    1. Asegúrese de anteponer “custom_” a los ID de configuración de OAuth para Tableau.

    2. Si su IdP admite el puerto dinámico localhost, deshabilite OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL. Si su IdP no admite este puerto, asegúrese de agregar varias URL de devolución de llamada de localhost a la lista de permitidos del archivo de configuración y el IdP.

  4. Instale los archivos de configuración de OAuth para Tableau en equipos de escritorio y sitios de Tableau Server y Tableau Cloud.

Configuración del IdP en AWS

1. Cree el modelo del IdP en AWS. Consulte la documentación de Amazon Acerca de identidades web federadas(El enlace se abre en una ventana nueva) y Creación de proveedores de identidad OpenID Connect (OIDC)(El enlace se abre en una ventana nueva).

2. Cree roles y políticas específicos para el IdP. Consulte Creación de un rol para identidades web o de OpenID Connect Federation (consola)(El enlace se abre en una ventana nueva) en la documentación de AWS.

Configuración de roles para los usuarios de Redshift

Adjunte las directivas necesarias para Redshift. Puede utilizar notificaciones personalizadas del token para autorizar roles. Hay varios ejemplos de SAML en la documentación de AWS(El enlace se abre en una ventana nueva). Estos ejemplos pueden adaptarse fácilmente a OAuth. En el caso de OAuth, las notificaciones son solo “DbUser”, “DbGroups”, etc.

A continuación se muestra un ejemplo de la política extraído de la documentación de AWS:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "redshift:GetClusterCredentials",
"Resource": [
"arn:aws:redshift:us-west-1:123456789012:dbname:cluster-identifier/dev",
"arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}",
"arn:aws:redshift:us-west-1:123456789012:cluster:cluster-identifier"
],
"Condition": {
"StringEquals": {
"aws:userid": "AROAJ2UCCR6DPCEXAMPLE:${redshift:DbUser}@example.com"
}
}
},
{
"Effect": "Allow"
"Action": "redshift:CreateClusterUser",
"Resource": "arn:aws:redshift:us-west-1:12345:dbuser:cluster-identifier/${redshift:DbUser}"
},
{
"Effect": "Allow",
"Action": "redshift:JoinGroup",
"Resource": "arn:aws:redshift:us-west-1:12345:dbgroup:cluster-identifier/my_dbgroup"
},
{
"Effect": "Allow",
"Action": [
"redshift:DescribeClusters",
"iam:ListRoles"
],
"Resource": "*"
}
]
}

Conexión con Redshift

El usuario debe especificar el ARN del rol que asumirá y luego seleccionar la configuración de OAuth instalada anteriormente.

Cuando se configura correctamente, se redirige al usuario al IdP para autenticar y autorizar tokens para Tableau. Tableau recibe tokens de actualización y openid. AWS puede validar el token y la firma del IdP, extraer las notificaciones del token, buscar la asignación de las notificaciones al rol de IAM y permitir o bloquear que Tableau asuma el rol en nombre del usuario. (en otras palabras, AssumeRoleWithWebIdentity [en inglés](El enlace se abre en una ventana nueva)).

Okta

Si usa Okta, es mejor usar un “servidor de autorización personalizado” en lugar del “servidor de autorización de la organización”. Los servidores de autorización personalizados son más flexibles. Hay un servidor de autorización personalizado creado de forma predeterminada con el nombre “default”. La URL de autorización debe tener este aspecto:

https://${yourOktaDomain}/oauth2/{authServerName}/v1/authorize

 

Actualización del controlador

Si el OAuth de Redshift utiliza el servicio IAM original, puede utilizar una de las siguientes opciones:

Solución de problemas

Si aparece un mensaje de error sobre un token no válido o caducado procedente del controlador al realizar la primera conexión (en el mensaje de error aparecerá un código de error SQLState como [28000] o [08001]), entonces hemos completado correctamente el flujo de OAuth, pero se ha producido un fallo en el controlador. Eso significa que hay un fallo de configuración en el lado de AWS o del IdP. Asimismo, es posible que el controlador devuelva algún error de permiso o autorización, lo que también está fuera de nuestro control.

La mejor forma de diagnosticar estos errores es eliminar Tableau de la ecuación. En primer lugar, debe obtener un token de ID (el predeterminado) o un token de acceso (si está personalizado) para enviárselo al controlador. A continuación, puede ver un ejemplo con Okta. Casi todos los IdP permiten hacerlo de una forma bastante similar. Tenga en cuenta que para utilizar este flujo debe habilitar el tipo de concesión de contraseña del propietario del recurso. Sustituya la URL del IdP, el secreto de cliente, el ID de cliente, el nombre de usuario y la contraseña.

curl -X POST "https://OKTA_URL/v1/token" \
-H 'accept: application/json' \
-H "Authorization: Basic $(echo -n 'CLIENTID:CLIENTSECRET' | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&username=USER&password=PASSWORD&scope=openid"

Una vez que tenga el token, podrá usar un DSN para realizar la prueba. A continuación, se muestra un ejemplo del uso del administrador de controladores ODBC en Windows. En el caso de Mac, puede utilizar la interfaz de usuario del administrador de controladores iODBC. En Linux, puede utilizar la herramienta de línea de comandos isql que se incluye con Tableau Server en la carpeta customer-bin.

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