设置 Amazon Redshift IAM OAuth

从 Tableau 2023.3.2 本地部署(Tableau Desktop、Tableau Server 和 Tableau Prep)开始以及 2024 年 3 月下旬的 Tableau Cloud 开始,您可以使用 OAuth 2.0/OIDC 将外部身份提供程序的身份联合到 Amazon Redshift。在该功能可用之前,Tableau Bridge 可以用作 Tableau Cloud 上的解决方法。有关 Bridge 的详细信息,请参见使用 Bridge 使数据保持最新

这些说明适用于旧版 AWS IAM 服务。对于 IAM IDC 集成,请参见设置 Amazon Redshift IAM Identity Center OAuth

根据身份提供程序的不同,配置集成需要执行不同的步骤。这是一个简略概述。Tableau 无法提供有关如何配置 AWS 或 IDP 的详细说明,但一般方法如下所述。

配置 IDP

  1. 在 IDP 上为 Tableau Desktop 和 Tableau Server 或 Tableau Cloud 创建 OAuth 客户端。Desktop 客户端应启用 PKCE 并使用 http://localhost 重定向。

  2. 添加自定义声明以用于对角色进行授权。特别是,如果您使用原始 IAM,您可能需要为 DbUserDbGroups 添加声明。这些声明可以稍后在您的 IAM 策略中使用。

  3. 创建 Tableau OAuth 配置文件。请参见 GitHub(链接在新窗口中打开) 上的文档和此处的(链接在新窗口中打开)示例。我们欢迎提供其他 IDP 的示例。

    1. 请务必在 Tableau OAuth 配置 ID 前添加“custom_”前缀。

    2. 如果您的 IDP 支持动态本地主机端口,则禁用 OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL。如果您的 IDP 不支持此功能,请确保将多个本地主机回调 URL 添加到配置文件和 IDP 上的允许列表中。

  4. 在桌面计算机 和 Tableau Server 或 Tableau Cloud 站点上安装 Tableau OAuth 配置文件。

在 AWS 上配置 IDP

1.在 AWS 上创建 IDP 模型。请参见 Amazon 文档 Web 身份联合(链接在新窗口中打开)创建 OIDC 身份提供提供程序(链接在新窗口中打开)

2. 专门为 IDP 创建角色和策略。请参见 AWS 文档上中为 OIDC 创建角色(链接在新窗口中打开)

为 Redshift 用户配置角色

附上 Redshift 所需的策略。您可以使用令牌中的自定义声明来授权角色。AWS 文档(链接在新窗口中打开)中有几个使用 SAML 的示例。这些可以轻松适应 OAuth。就 OAuth 而言,声明只是“DbUser ”、“DbGroups” 等。

以下是 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": "*"
}
]
}

连接到 Redshift

用户必须指定要代入的角色 ARN,然后选择之前安装的 OAuth 配置。

正确配置后,用户将被重定向到 IDP 以对 Tableau 的令牌进行身份验证和授权。Tableau 将接收 openid 和刷新令牌。AWS 能够验证来自 IDP 的令牌和签名、从令牌中提取声明、查找声明到 IAM 角色的映射,以及允许或阻止 Tableau 代表用户承担角色。(换句话说,即 AssumeRoleWithWebIdentity(链接在新窗口中打开) )。

Okta

如果使用 Okta,最好使用“自定义授权服务器”而不是“组织授权服务器”。自定义授权服务器更加灵活。默认创建一个自定义授权服务器,称为“默认”。授权 URL 应如下所示:

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

 

更新驱动程序

对于使用原始 IAM 服务的 Redshift OAuth,您可以使用:

疑难解答

如果您在第一次连接时看到来自驱动程序的无效/过期令牌的错误消息(错误消息中将包含类似 [28000] 或 [08001] 的 SQLState 错误代码),则我们已成功完成 OAuth 流程,并且驱动程序失败。这意味着 AWS 端或 IDP 端存在配置错误。驱动程序也可能返回权限或授权错误,这也是我们无法控制的。

诊断这些错误的最佳方法是从图片中删除 Tableau。您首先需要获取 ID 令牌(默认)或访问令牌(如果自定义)以发送给驱动程序。这是 Okta 的示例。几乎所有 IDP 都有一种非常相似的方法来做到这一点。请注意,若要使用此流程,您需要启用资源所有者密码授予类型。替换 IDP URL、客户端密文、客户端 ID、用户名和密码。

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"

获得令牌后,您可以使用 DSN 进行测试。下面是在 Windows 上使用 ODBC 驱动程序管理器的示例。在 Mac 上,您可以使用 iODBC 驱动程序管理器 UI。在 Linux 上,您可以使用 Tableau Server 附带的 customer-bin 文件夹中的 isql 命令行工具。

感谢您的反馈!您的反馈已成功提交。谢谢!