设置 Amazon Redshift IAM OAuth

从 Tableau 2023.3.2 本地部署(Tableau Desktop、Tableau Server 和 Tableau Prep)开始,您可以使用 OAuth 2.0/OIDC 将外部身份提供程序的身份联合到 Amazon Redshift。

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

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

步骤 1:配置 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 Desktop、Tableau Prep Builder、Tableau Bridge)上的每个应用程序以及将使用 OAuth 的每个 Tableau Server 和 Tableau Cloud 站点上每个应用程序关联的 OAuthConfigs 文件夹中,安装新的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(链接在新窗口中打开) )。

令牌

默认情况下,Redshift OAuth IAM 将 ID 令牌传递给驱动程序。对于本地客户(包括使用 Tableau Bridge 的客户),您可以使用 TDC 文件来传递访问令牌。

<connection-customization class='redshift' enabled='true' version='10.0'>
	<vendor name='redshift' />
	<driver name='redshift' />
	<customizations>
		<customization name='CAP_OAUTH_FEDERATE_ACCCESS_TOKEN' value='yes'/>
	</customizations>
</connection-customization>
		

有关配置和安装 .tdc 文件的详细信息,请参见自定义和调整连接(链接在新窗口中打开)将 .tdc 文件与 Tableau Server 配合使用(链接在新窗口中打开)

Okta

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

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

 

更新驱动程序

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

疑难解答

诊断错误的最佳方法是从图片中移除 Tableau。您可以使用驱动程序管理器或类似的工具进行测试。这只是为了故障排除 - 您不应该使用 DSN 或“其他 ODBC”连接器来常规使用此功能。为了确保测试有效,除群集信息、数据库、令牌和命名空间外,参数应与下面所示相同。

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

在开始测试之前,您首先需要获取访问令牌(IAM IDC 的默认设置)或刷新令牌(如果自定义)以发送给驱动程序。

这是 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 命令行工具。

Tableau 建议您不要使用其他插件进行测试,因为它们可能无法在服务器环境中工作。他们要么使用固定的 AWS 配置文件,要么需要直接访问浏览器。

下面是在 Windows 上使用 ODBC 驱动程序管理器的示例。

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