---
schema_version: "1"
id: aa179e77d721a244207999bce620c8a4e1a1c6f48c0f1526c566616b86a43ad9
title: 设置 Amazon Redshift IAM OAuth
collection: tableau
version: next
locale: zh-cn
portal_url: https://docs.salesforce.com/tableau/next/zh-cn/server-linux/config_oauth_redshift_iam.md
canonical_url: https://help.tableau.com/v0.0/server-linux/zh-cn/config_oauth_redshift_iam.htm
source_site: help.tableau.com
content_type: documentation
content_hash: f43cbc4180258d561d563e4aec06c98aa7a656700eca948699f27b7a0371e7c5
description: Set up Amazon Redshift IAM OAuth identity federation from an external IdP for Tableau.
---
[跳转到主要内容](#main-content)

# 设置 Amazon Redshift IAM OAuth

从 Tableau 2023.3.2 开始，您可以使用 OAuth 2.0/OIDC 将外部身份提供程序的身份联合到 Amazon Redshift。

这些说明适用于旧版 AWS IAM 服务。对于 IAM IDC 集成，请参见[设置 Amazon Redshift IAM Identity Center OAuth](https://help.tableau.com/v0.0/server-linux/zh-cn/config_oauth_redshift_iam_idc.htm)。

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

## 步骤 1：配置 IDP

1. 在 IDP 上为 Tableau Desktop 和 Tableau Server 或 Tableau Cloud 创建 OAuth 客户端。Desktop 客户端应启用 `PKCE` 并使用 `http://localhost` 重定向。
2. 添加自定义声明以用于对角色进行授权。特别是，如果您使用原始 IAM，您可能需要为 `DbUser` 和 `DbGroups` 添加声明。这些声明可以稍后在您的 IAM 策略中使用。
3. 创建 Tableau OAuth 配置文件。请参见 [GitHub](https://tableau.github.io/connector-plugin-sdk/docs/oauth "GitHub 上的 OAuth 文档") 上的文档和[此处的](https://github.com/tableau/connector-plugin-sdk/tree/master/samples/components/oauth "GitHub 上的 OAuth 示例。")示例。我们欢迎提供其他 IDP 的示例。
    
    1. 请务必在 Tableau OAuth 配置 ID 前添加“`custom_`”前缀。
        
        **注意：**Oauth 配置 ID 的最大限制为 36 个字符。长于此长度的 ID 可能不会生成错误，但将不起作用。
    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 身份联合](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html "有关 Web Identity Federation 的 AWS 文档")和[创建 OIDC 身份提供提供程序](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html "有关创建 OIDC 身份提供程序的 AWS 文档")。

2.专门为 IDP 创建角色和策略。请参见 AWS 文档上中[为 OIDC 创建角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html "用于为 OIDC 创建角色的 AWS 文档")。

## 为 Redshift 用户配置角色

附上 Redshift 所需的策略。您可以使用令牌中的自定义声明来授权角色。[AWS 文档](https://docs.aws.amazon.com/redshift/latest/mgmt/options-for-providing-iam-credentials.html "用于提供 IAM 凭证的 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 配置。

![](/tableau/next/zh-cn/server-linux/zh-cn/Img/redshift_oauth__iam_connect.png)

正确配置后，用户将被重定向到 IDP 以对 Tableau 的令牌进行身份验证和授权。Tableau 将接收 openid 和刷新令牌。AWS 能够验证来自 IDP 的令牌和签名、从令牌中提取声明、查找声明到 IAM 角色的映射，以及允许或阻止 Tableau 代表用户承担角色。（换句话说，即 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html "AssumeRoleWithWebIdentity 的 AWS 文档") ）。

## 令牌

默认情况下，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\_ACCESS\_TOKEN' value='yes'/>
	</customizations>
</connection-customization>
		

有关配置和安装 .tdc 文件的详细信息，请参见[自定义和调整连接](https://help.tableau.com/current/pro/desktop/zh-cn/connect_customize.htm)和[将 .tdc 文件与 Tableau Server 配合使用](https://help.salesforce.com/s/articleView?id=001458291&type=1)。

## 关于组联合

当使用具有 IAM 角色的 OAuth 身份验证时，您可以选择是否使用组联合。这将改变连接器与身份验证 API 交互的方式以便与 Redshift 交互。

- 如果在连接时选中了“组联合”复选框（在版本 2025.1 及更高版本中可用），Redshift 驱动程序将使用 [`getClusterCredentialsWithIAM`](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentialsWithIAM.html) API 以获取已预置群集中的凭据。
- 未选中“组联合”框时，将改用 [`getClusterCredentials`](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API。

这两个 API 将返回具有略微不同属性的 IAM 令牌。有关详细信息，请查阅上面链接的 AWS API 文档以及 [ODBC 驱动程序选项](https://docs.aws.amazon.com/redshift/latest/mgmt/odbc20-configuration-options.html "有关使用 AWS 配置 ODBC 2.0 的信息")。

#### 使用说明

- 对于版本 2024.3 之前的 Tableau Desktop 和 Tableau Prep Builder，可以使用“group\_federation=1”在高级驱动程序配置字段中进行设置。还可以通过使用 TDC 文件来定义自定义连接属性来进行配置。有关使用 TDC 的详细信息，请参见[自定义和调整连接](https://help.tableau.com/current/pro/desktop/zh-cn/connect_customize.htm)。
- 从版本 2024.3 开始，本地（Tableau Desktop、Tableau Prep Builder 和 Tableau Server）的连接对话框中有一个“group\_federation”字段。此功能将于 2025.1（2025 年 2 月上市）开始在 Tableau Cloud 中提供。
- 若要将组联合与 Tableau Server 结合使用，必须将 group\_federation 添加到 ODBC 额外允许列表中。有关详细信息，请参见[自定义本机连接器的连接字符串](https://help.tableau.com/current/pro/desktop/zh-cn/connect_string_custom.htm)。

## Okta

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

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

![](/tableau/next/zh-cn/server-linux/zh-cn/Img/redshift_oauth_iam_okta_800x332.png)

## 更新驱动程序

对于使用原始 IAM 服务的 Redshift OAuth，您可以使用：

- 从版本 1.59 开始的 Redshift ODBC v1 驱动程序可以从 [https://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html](https://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html "从 Amazon 下载 Redshift ODBC V1 驱动程序") 下载。
- 从版本 2.0.1.0 开始的 Redshift ODBC v2 驱动程序可以从 [https://github.com/aws/amazon-redshift-odbc-driver/tags](https://github.com/aws/amazon-redshift-odbc-driver/tags "从 Amazon 下载 Redshift ODBC V2 驱动程序") 下载。请注意，没有适用于 OSX 的 v2 驱动程序。

## 疑难解答

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

**注意：**测试时不要在 DSN 的连接字符串中指定 DbUser 或 DbGroups，因为 Tableau 无权访问它们，并且无法将它们包括在连接字符串中。您可以将其包含在令牌声明中。

如果您在第一次连接时看到来自驱动程序的无效/过期令牌的错误消息（错误消息中将包含类似 \[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 命令行工具。

使用固定 AWS 配置文件的插件将无法工作，除非您希望为该连接的所有用户使用相同的配置文件。其他 OAuth 插件需要直接访问系统浏览器，这在服务器端不起作用。

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

![](/tableau/next/zh-cn/server-linux/zh-cn/Img/redshift_oauth_iam_troubleshoot.jpg)