

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 用于提供 IAM 凭证的选项
<a name="options-for-providing-iam-credentials"></a>

要为 JDBC 或 ODBC 连接提供 IAM 凭证，请选择以下选项之一。
+ **AWS 配置文件** 

  作为以 JDBC 或 ODBC 设置形式提供凭证值的替代方案，您可在命名配置文件中放置这些值。有关更多信息，请参阅 [使用配置文件](#using-configuration-profile)。
+ **IAM 凭证**

  以 JDBC 或 ODBC 设置形式提供 AccessKeyID 和 SecretAccessKey 的值，还可以选择提供 SessionToken 的值。SessionToken 仅对于具有临时凭证的 IAM 角色是必填的。有关更多信息，请参阅 [用于提供 IAM 凭证的 JDBC 和 ODBC 选项](#jdbc-options-for-providing-iam-credentials)。
+ **身份提供者联合** 

  在使用身份提供者联合以允许身份提供者中的用户在 Amazon Redshift 中进行身份验证时，请指定凭证提供商插件的名称。有关更多信息，请参阅 [凭证提供程序插件](#using-credentials-provider-plugin)。

  Amazon Redshift JDBC 和 ODBC 驱动程序包括以下基于 SAML 的联合身份验证凭证提供商的插件：
  + Microsoft Active Directory 联合身份验证服务 (AD FS)
  + PingOne
  + Okta
  + Microsoft Azure Active Directory (Azure AD)

  您可以 JDBC 或 ODBC 设置格式提供或使用配置文件提供插件名称和相关值。有关更多信息，请参阅 [JDBC 驱动程序版本 2.x 配置的选项](jdbc20-configuration-options.md)。

有关更多信息，请参阅 [步骤 5：配置 JDBC 或 ODBC 连接以使用 IAM 凭证](generating-iam-credentials-steps.md#generating-iam-credentials-configure-jdbc-odbc)。

## 使用配置文件
<a name="using-configuration-profile"></a>

您可提供 IAM 凭证选项和 `GetClusterCredentials` 选项作为 AWS 配置文件中的命名配置文件的设置。要提供配置文件名称，请使用配置文件 JDBC 选项。该配置存储在名为 `config` 的文件或位于主目录下面的名为 `credentials` 的文件夹中的名为 `.aws` 的文件中。

对于 Amazon Redshift JDBC 或 ODBC 驱动程序附带的基于 SAML 的凭证提供商插件，您可以使用 [凭证提供程序插件](#using-credentials-provider-plugin) 中前面所述的设置。如果未使用 `plugin_name`，则忽略其他选项。

下例所示为一个有两个配置文件的 \$1/.aws/credentials 文件。

```
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
session_token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
```

要使用 `user2` 示例的凭证，请在 JDBC URL 中指定 `Profile=user2`。

有关使用配置文件的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

有关为 JDBC 驱动程序使用配置文件的更多信息，请参阅[指定配置文件](jdbc20-configure-authentication-ssl.md#jdbc20-aws-credentials-profiles)。

有关为 ODBC 驱动程序使用配置文件的更多信息，请参阅[身份验证方法](odbc20-authentication-ssl.md)。

## 用于提供 IAM 凭证的 JDBC 和 ODBC 选项
<a name="jdbc-options-for-providing-iam-credentials"></a>

下表列出了用于提供 IAM 凭证的 JDBC 和 ODBC 选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 用于创建数据库用户凭证的 JDBC 和 ODBC 选项
<a name="jdbc-and-odbc-options-for-database-credentials"></a>

要使用 Amazon Redshift JDBC 或 ODBC 驱动程序创建数据库用户凭证，请提供数据库用户名作为 JDBC 或 ODBC 选项。（可选）您可以让驱动程序创建新的数据库用户（如果不存在），并且可以指定用户在登录时加入的数据库用户组列表。

如果您使用身份提供者 (IdP)，请与 IdP 管理员一起确定这些选项的正确值。您的 IdP 管理员还可配置 IdP 来提供这些选项，这样一来，您将无需提供它们作为 JDBC 或 ODBC 选项。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](generating-iam-credentials-steps.md#configuring-saml-assertions)。

**注意**  
如果您使用 IAM 策略变量 `${redshift:DbUser}`（如[GetClusterCredentials 的资源策略](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)中所述），则 `DbUser` 的值将被替换为由 API 操作的请求上下文检索的值。Amazon Redshift 驱动程序使用由连接 URL 提供的 `DbUser` 变量的值，而不是作为 SAML 属性提供的值。  
为帮助保护此配置，我们建议您在 IAM 策略中使用一个使用来通过 `DbUser` 验证 `RoleSessionName` 值。您可以在 [示例 8：使用 GetClusterCredentials 的 IAM 策略](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials) 中找到如何使用 IAM 策略设置条件。

下表列出了用于创建数据库用户凭证的选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 凭证提供程序插件
<a name="using-credentials-provider-plugin"></a>

Amazon Redshift 使用凭证提供商插件进行单点登录身份验证。

为了支持单点登录身份验证，Amazon Redshift 提供了适用于 Microsoft Azure Active Directory 的 Azure AD 插件。有关如何配置该插件的信息，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

### 多重身份验证
<a name="setting_mfa"></a>

为了支持多重身份验证（MFA），Amazon Redshift 提供了基于浏览器的插件。请使用适用于 Okta、PingOne 的的浏览器 SAML 插件，以及适用于 Microsoft Azure Active Directory 的浏览器 Azure AD 插件。

在使用浏览器 SAML 插件时，OAuth 身份验证流程如下所示：

![\[OAuth 工作流，用于说明插件、本地服务器、Web 浏览器和端点如何协同工作，通过 SAML 身份验证对用户进行身份验证。\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/BrowserSAML_plugin.png)


1. 用户尝试登录。

1. 该插件启动本地服务器以侦听 localhost 上的传入连接。

1. 该插件启动 Web 浏览器，以通过 HTTPS 从指定的单点登录 URL 联合身份提供者端点请求 SAML 响应。

1. Web 浏览器访问该链接，并提示用户输入凭证。

1. 在用户进行身份验证并获得允许后，联合身份提供者端点通过 HTTPS 向 `redirect_uri` 指示的 URI 返回 SAML 响应。

1. Web 浏览器将包含 SAML 响应的响应消息传送到指示的 `redirect_uri`。

1. 本地服务器接受传入连接，该插件检索 SAML 响应并将其传送到 Amazon Redshift。

在使用浏览器 Azure AD 插件时，SAML 身份验证流程如下所示：

![\[Azure 工作流，用于说明插件、本地服务器、Web 浏览器和端点如何协同工作，通过 SAML 身份验证对用户进行身份验证。\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/BrowserAzure_plugin.png)


1. 用户尝试登录。

1. 该插件启动本地服务器以侦听 localhost 上的传入连接。

1. 该插件启动 Web 浏览器，以从 Azure AD `oauth2/authorize` 端点请求授权代码。

1. Web 浏览器通过 HTTPS 访问生成的链接，并提示用户输入凭证。该链接是使用配置属性（例如 tenant 和 client\$1id）生成的。

1. 在用户进行身份验证并获得允许后，Azure AD `oauth2/authorize` 端点通过 HTTPS 返回包含授权代码的响应并将其发送到指示的 `redirect_uri`。

1. Web 浏览器将包含 SAML 响应的响应消息传送到指示的 `redirect_uri`。

1. 本地服务器接受传入连接，该插件请求和检索授权代码，并将 POST 请求发送到 Azure AD `oauth2/token` 端点。

1. Azure AD `oauth2/token` 端点将包含访问令牌的响应返回到指示的 `redirect_uri`。

1. 该插件检索 SAML 响应并将其传送到 Amazon Redshift。

参阅以下部分：
+ Active Directory 联合身份验证服务 (AD FS)

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ PingOne (Ping) 

  只有使用 Forms 身份验证预先确定的 PingOne IdP 适配器支持 Ping。

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ Okta 

  仅与 AWS 管理控制台 一起使用的 Okta 提供的应用程序支持 Okta。

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。
+ Microsoft Azure Active Directory

  有关更多信息，请参阅 [设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

### 插件选项
<a name="configuring_plugin_options"></a>

要使用基于 SAML 的凭证提供商插件，请使用 JBDC 或 ODBC 选项，或在命名配置文件中指定以下选项。如果未指定 `plugin_name`，则忽略其他选项。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

# 使用 Amazon Redshift CLI 或 API 生成 IAM 身份的数据库凭证
<a name="generating-iam-credentials-cli-api"></a>

为了以编程方式生成临时数据库用户凭证，Amazon Redshift 提供适用于 AWS Command Line Interface (AWS CLI) 和 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 操作的 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html) 命令。或者，您可以使用 Amazon Redshift JDBC 或 ODBC 驱动程序配置您的 SQL 客户端，这些驱动程序用于管理调用 `GetClusterCredentials` 操作，检索数据库用户凭证，并在您的 SQL 客户端与您的 Amazon Redshift 数据库之间建立连接的过程。有关更多信息，请参阅 [用于创建数据库用户凭证的 JDBC 和 ODBC 选项](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)。

**注意**  
我们建议使用 Amazon Redshift JDBC 或 ODBC 驱动程序生成数据库用户凭证。

在此部分中，您可以找到用于以编程方式调用 `GetClusterCredentials` 操作或 get-cluster-credentials 命令，检索数据库用户凭证并连接到数据库的步骤。

**生成和使用临时数据库凭证**

1. 创建或修改具有所需权限的用户或角色。有关 IAM 权限的更多信息，请参阅[步骤 3：创建有权调用 GetClusterCredentialsWithIAM 或 GetClusterCredentials 的 IAM 角色](generating-iam-credentials-steps.md#generating-iam-credentials-role-permissions)。

1. 以您在上一步骤中授权的用户或角色的身份，运行 get-cluster-credentials CLI 命令或调用 `GetClusterCredentials` API 操作并提供下列值：
   + **集群标识符** – 包含数据库的集群的名称。
   + **数据库用户名** – 现有的或新的数据库用户的名称。
     + 如果数据库中不存在此用户且 AutoCreate 为 true，则将创建一个已禁用 PASSWORD 的新用户。
     +  如果此用户不存在且 AutoCreate 为 false，则请求会失败。
     + 在此示例中，数据库用户名为 `temp_creds_user`。
   +  **Autocreate** – （可选）如果数据库用户名不存在，则创建新用户。
   +  **数据库名称** – （可选）授权用户登录的数据库的名称。如果未指定数据库名称，则用户可以登录到任何集群数据库。
   +  **数据库组** – （可选）现有数据库用户组的列表。在成功登录后，数据库用户将添加到指定的用户组中。如果未指定组，则用户仅具有 PUBLIC 权限。此用户组名称必须与在附加到用户或角色的 IAM 策略中指定的 dbgroup 资源 ARN 匹配。
   +  **过期时间** – （可选）临时凭证过期之前经历的时间（以秒为单位）。您可指定一个介于 900 秒 (15 分钟) 和 3600 秒 (60 分钟) 之间的值。默认值为 900 秒。

1. Amazon Redshift 确认用户是否有权使用指定资源来调用 `GetClusterCredentials` 操作。

1. Amazon Redshift 返回临时密码和数据库用户名。

   以下示例使用 Amazon Redshift CLI 为名为 `temp_creds_user` 的现有用户生成临时数据库凭证。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --db-name exampledb --duration-seconds 3600
   ```

   结果如下所示。

   ```
   {
     "DbUser": "IAM:temp_creds_user", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

   以下示例使用 Amazon Redshift CLI 与 autocreate 为新用户生成临时数据库凭证并将此用户添加到组 `example_group`。

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --auto-create --db-name exampledb --db-groups example_group --duration-seconds 3600
   ```

   结果如下所示。

   ```
   {
     "DbUser": "IAMA:temp_creds_user:example_group", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

1. 建立到 Amazon Redshift 集群的安全套接字层 (SSL) 身份验证连接，并发送包含 `GetClusterCredentials` 响应中的用户名和密码的登录请求。请在用户名中包含 `IAM:` 或 `IAMA:` 前缀，例如，`IAM:temp_creds_user` 或 `IAMA:temp_creds_user`。
**重要**  
将您的 SQL 客户端配置为需要 SSL。否则，如果您的 SQL 客户端自动尝试使用 SSL 进行连接，则可能会在出现任何故障时回退到非 SSL。在这种情况下，首次连接尝试可能因凭证过期或无效而失败，随后的另一次连接尝试可能因连接不是 SSL 而失败。如果出现这种情况，第一条错误消息可能会丢失。有关使用 SSL 连接到集群的更多信息，请参阅[配置连接的安全选项](connecting-ssl-support.md)。

1. 如果连接未使用 SSL，则连接尝试可能失败。

1. 集群将向 SQL 客户端发送 `authentication` 请求。

1. 随后，SQL 客户端会向集群发送临时密码。

1. 如果密码有效且尚未到期，集群将完成连接。

# 设置 JDBC 或 ODBC 单点登录身份验证
<a name="setup-azure-ad-identity-provider"></a>

您可以利用外部身份提供者（IdP）对访问 Amazon Redshift 集群的用户进行身份验证和授权，从而简化用户管理并增强安全性。这就实现了集中式用户管理、基于角色的访问控制以及跨多个服务的审计功能。常见应用场景包括简化不同用户组的身份验证、执行一致的访问策略以及满足监管要求。

以下页面将指导您配置 IdP 与 Redshift 集群的集成。有关配置 AWS 作为 IdP 的服务提供商的更多信息，请参阅 *IAM 用户指南*中的[通过信赖方信任和添加陈述来配置 SAML 2.0 IdP](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html#saml_relying-party)。

# AD FS
<a name="setup-identity-provider-adfs"></a>

本教程将向您展示如何将 AD FS 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 AD FS 和您的 AWS 账户相互信任
<a name="setup-identity-provider-adfs-trust"></a>

 以下过程介绍如何建立信任关系。

1. 创建或使用现有的 Amazon Redshift 集群，以使 AD FS 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft 管理控制台上设置 AD FS 以控制 Amazon Redshift 访问：

   1. 选择 **ADFS 2.0**，然后选择**添加信赖方信任**。在**添加信赖方信任向导**页面上，选择**开始**。

   1. 在**选择数据源**页面上，选择**导入有关在线或在本地网络上发布的信赖方的数据**。

   1. 对于**联合元数据地址(主机名或 URL)**，请输入 **https://signin.aws.amazon.com/saml-metadata.xml**。元数据 XML 文件是将 AWS 描述为信赖方的标准 SAML 元数据文档。

   1. 在**指定显示名称**页面上，输入**显示名称**的值。

   1. 在**选择颁发授权规则**页面上，选择一个颁发授权规则以允许或拒绝所有用户访问该信赖方。

   1. 在**准备好添加信任**页面上，查看您的设置。

   1. 在**完成**页面上，选择**向导关闭时打开此信赖方信任的“编辑声明规则”对话框**。

   1. 在上下文（右键单击）菜单上，选择**信赖方信任**。

   1. 对于您的信赖方，打开上下文（右键单击）菜单，然后选择**编辑声明规则**。在**编辑声明规则**页面上，选择**添加规则**。

   1. 对于**声明规则模板**，请选择**转换传入声明**，然后在**编辑规则 - NameId** 页面上执行以下操作：
      + 对于**声明规则名称**，请输入 **NameId**。
      + 对于**传入声明名称**，请选择 **Windows 账户名**。
      + 对于**传出声明名称**，请选择**名称 ID**。
      + 对于**传出名称 ID 格式**，请选择**持久性标识符**。
      + 选择**传递所有声明值**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**以声明方式发送 LDAP 特性**。

   1. 在**配置规则**页面上，执行以下操作：
      + 对于**声明规则名称**，请输入 **RoleSessionName**。
      + 对于**特性存储**，请选择 **Active Directory**。
      + 对于 **LDAP 特性**，请选择**电子邮件地址**。
      + 对于**传出声明类型**，选择 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**。

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 获取 AD 组**页面上，对于**声明规则名称**，请输入**获取 AD 组**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      c:[Type ==
                                          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
                                          Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
                                          types = ("http://temp/variable"), query = ";tokenGroups;{0}",
                                          param = c.Value);
      ```

   1. 在**编辑声明规则**页面上，选择**添加规则**。在**选择规则模板**页面上，对于**声明规则模板**，请选择**使用自定义规则发送声明**。

   1. 在**编辑规则 - 角色**页面上，对于**声明规则名称**，请键入**角色**。

   1. 对于**自定义规则**，请输入以下内容。

      ```
      c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));
      ```

      请注意 SAML 提供商的 ARN 和要担任的角色。在该示例中，`arn:aws:iam:123456789012:saml-provider/ADFS` 是 SAML 提供商的 ARN，`arn:aws:iam:123456789012:role/ADFS-` 是角色的 ARN。

1. 确保您已下载 `federationmetadata.xml` 文件。检查以确认文档内容不包含无效的字符。这是在配置与 AWS 的信任关系时使用的元数据文件。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤，请参阅《IAM 用户指南》**中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 AD FS 进行身份验证
<a name="setup-identity-provider-adfs-auth"></a>

------
#### [ JDBC ]

 以下过程介绍如何设置与 AD FS 的 JDBC 关系。
+ 将数据库客户端配置为通过 JDBC 并使用 AD FS 单点登录连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 AD FS 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**ADFS**。

  1. 对于**连接配置文件**，请输入您的连接配置文件名称，例如 **ADFS**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 AD FS 用户名。这是您用于单点登录的账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 AD FS 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**。对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.AdfsCredentialsProvider**。该值指定驱动程序将 AD FS 单点登录作为身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 AD FS 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 并使用 AD FS 单点登录连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，选择**身份提供者：SAML**。这是 ODBC 驱动程序在通过 AD FS 单点登录进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-adfs-username***。这是您用于单点登录的 AD FS 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: SAML** 的情况。
  + 对于**密码**，请输入 ***your-adfs-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: SAML (身份提供者: SAML)** 的情况。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于具有 MFA 的 AD FS 单点登录配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在 AD FS 中进行身份验证时使用的身份验证方法。
    + 对于 AD FS 单点登录配置，请输入 **ADFS**。这是 ODBC 驱动程序在通过 Azure AD 单点登录进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-adfs-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **ADFS** 的情况。
  + 对于**密码**，请输入 ***your-adfs-password***。请仅将其用于 **plugin\$1name** 为 **ADFS** 的情况。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Azure
<a name="setup-identity-provider-azure"></a>

您可以使用 Microsoft Azure AD 作为身份提供者 (IdP) 来访问 Amazon Redshift 集群。本教程将向您展示如何将 Azure 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

要了解如何通过 Microsoft Azure AD 单点登录进行联合 Amazon Redshift 访问，请观看以下视频。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aXs9hEgJCss)


## 第 1 步：设置 Azure 和您的 AWS 账户相互信任
<a name="setup-identity-provider-azure-trust"></a>

以下过程介绍如何建立信任关系。

**将 Azure AD 和您的 AWS 账户设置为彼此信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Azure AD 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Microsoft Azure 门户上设置用于 AWS 的 Azure Active Directory、组、用户。

1. 在 Microsoft Azure 门户上添加 Amazon Redshift 以作为企业应用程序，以用于 AWS 控制台单点登录和 Amazon Redshift 联合登录。选择**企业应用程序**。

1. 选择 **\$1 新建应用程序**。将显示“添加应用程序”页面。

1. 在搜索字段中搜索 **AWS**。

1. 选择 **Amazon Web Services (AWS)**，然后选择**添加**。将会创建 AWS 应用程序。

1. 在**管理**下方，选择**单点登录**。

1. 选择 **SAML**。将显示 Amazon Web Services (AWS) \$1 基于 SAML 的登录页面。

1. 选择**是**以转到“使用 SAML 设置单点登录”页面。该页面显示预配置的单点登录相关属性的列表。

1. 对于**基本 SAML 配置**，请选择编辑图标，然后选择**保存**。

1. 在配置多个应用程序时，请提供一个标识符值。例如，输入 ***https://signin.aws.amazon.com/saml\$12***。请注意，从第二个应用程序开始，将该格式与 \$1 符号一起使用以指定唯一的 SPN 值。

1. 在**用户属性和声明**部分中，选择编辑图标。

   默认情况下，预配置了唯一用户标识符 (UID)、角色、RoleSessionName 和 SessionDuration 声明。

1. 选择 **\$1 添加新的声明**，以便为数据库用户添加声明。

   对于**名称**，请输入 **DbUser**。

   对于**命名空间**，请输入 **https://redshift.amazon.com/SAML/Attributes**。

   对于**源**，请选择**属性**。

   对于**源属性**，请选择 **user.userprincipalname**。然后，选择**保存**。

1. 选择 **\$1 添加新的声明**，以便为 AutoCreate 添加声明。

   对于**名称**，请输入 **AutoCreate**。

   对于**命名空间**，请输入 **https://redshift.amazon.com/SAML/Attributes**。

   对于**源**，请选择**属性**。

   对于**源属性**，请选择 **"true"**。然后，选择**保存**。

   此处，`123456789012` 是您的 AWS 账户，*`AzureSSO`* 是您创建的 IAM 角色，*`AzureADProvider`* 是 IAM 提供商。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-azure.html)

1. 在**应用程序注册 > ***your-application-name*** > 身份验证** 下，添加**移动和桌面应用程序**。将 URL 指定为 http://localhost/redshift/。

1. 在 **SAML 签名证书** 部分中，选择**下载**以下载并保存联合元数据 XML 文件，以便在创建 IAM SAML 身份提供者时使用。该文件用于创建单点登录联合身份。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Azure 企业应用程序时保存的联合元数据 XML 文件。有关详细步骤，请参阅《IAM 用户指南》**中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。

   为您的环境修改以下策略（JSON 格式）：
   + 将集群的 AWS 区域替换为 `us-west-1`。
   + 将您的 AWS 账户替换为 *`123456789012`*。
   + 将您的集群标识符（或对于所有集群，则为 `*`）替换为 *`cluster-identifier`*。
   + 将您的数据库（或对于所有集群，则为 `*`）替换为 *`dev`*。
   + 将 IAM 角色的唯一标识符替换为 *`AROAJ2UCCR6DPCEXAMPLE`*。
   + 将您的租户或公司电子邮件域替换为 `example.com`。
   + 将您计划为其分配用户的数据库组替换为 *`my_dbgroup`*。

   ```
   {
       "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:123456789012:dbuser:cluster-identifier/${redshift:DbUser}"
           },
           {
               "Effect": "Allow",
               "Action": "redshift:JoinGroup",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbgroup:cluster-identifier/my_dbgroup"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "redshift:DescribeClusters",
                   "iam:ListRoles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

   此策略授予权限，如下所示：
   + 第一部分授予执行 `GetClusterCredentials` API 操作的权限，以获取指定集群的临时凭证。在此示例中，资源是 `cluster-identifier`，所在的数据库为 *`dev`*，所在的账户为 *`123456789012`*，所在的 AWS 区域为 *`us-west-1`*。`${redshift:DbUser}` 子句仅允许与在 Azure AD 中指定的 `DbUser` 值匹配的用户进行连接。
   + 条件子句会强制只有特定用户能够获得临时凭证。这些用户是由角色唯一 ID *`AROAJ2UCCR6DPCEXAMPLE`* 指定的角色下的用户，该 ID 位于您公司的电子邮件域中的电子邮件地址所标识的 IAM 账户中。有关唯一 ID 的更多信息，请参阅 *IAM 用户指南*中的[唯一 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)。

     您使用 IdP（在本例中为 Azure AD）进行的设置决定了条件子句的写入方式。如果员工的电子邮件是 `johndoe@example.com`，请首先将 `${redshift:DbUser}` 设置为与员工用户名 `johndoe` 匹配的超级用户字段。然后，要使该条件有效，请将 AWS SAML `RoleSessionName` 字段设置为与员工电子邮件 `johndoe@example.com` 匹配的超级用户字段。使用这种方法时，请考虑以下几点：
     + 如果您将 `${redshift:DbUser}` 设置为员工的电子邮件，则删除示例 JSON 中的 `@example.com` 以匹配 `RoleSessionName`。
     + 如果您只是将 `RoleSessionId` 设置为员工的用户名，则删除示例中的 `@example.com` 以匹配 `RoleSessionName`。
     + 在示例 JSON 中，`${redshift:DbUser}` 和 `RoleSessionName` 都已设置为员工电子邮件。此示例 JSON 使用 Amazon Redshift 数据库用户名以及 `@example.com` 让用户登录以访问集群。
   + 第二部分授予在指定集群中创建 `dbuser` 名称的权限。在此示例 JSON 中，它将创建限制为 `${redshift:DbUser}`。
   + 第三部分授予指定用户可以加入 `dbgroup` 的权限。在此示例 JSON 中，用户可以加入指定集群中的 `my_dbgroup` 组。
   + 第四部分授予用户可以对所有资源执行的操作的权限。在此示例 JSON 中，它允许用户调用 `redshift:DescribeClusters` 以获取集群信息，例如集群端点、AWS 区域和端口。它还允许用户调用 `iam:ListRoles` 以检查用户可以代入哪些角色。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Azure 进行身份验证
<a name="setup-identity-provider-azure-auth"></a>

------
#### [ JDBC ]

**设置 JDBC 以在 Microsoft Azure AD 中进行身份验证**
+ 将数据库客户端配置为通过 JDBC 连接（使用 Azure AD 单点登录）到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Azure AD 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面上，添加一个称为 **AzureAuth** 的**配置文件组**。

  1. 对于**连接配置文件**，请输入 **Azure**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入 Microsoft Azure 用户名。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 Microsoft Azure 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**以在连接属性中添加其他信息，如下所述。

     对于 Azure AD 单点登录配置，请添加附加信息，如下所示：
     + 对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.AzureCredentialsProvider**。该值指定驱动程序将 Azure AD 单点登录作为身份验证方法。
     + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。仅用于 Microsoft Azure AD。这是在 Azure AD 上为您的公司配置的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
     + 对于 **client\$1secret**，请输入 ***your-azure-redshift-application-client-secret***。仅用于 Microsoft Azure AD。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。这仅适用于 com.amazon.redshift.plugin.AzureCredentialsProvider 插件。
     + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。仅用于 Microsoft Azure AD。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。

     对于具有 MFA 的 Azure AD 单点登录配置，请在连接属性中添加附加信息，如下所示：
     + 对于 **plugin\$1name**，请输入 **com.amazon.redshift.plugin.BrowserAzureCredentialsProvider**。此值指定驱动程序将具有 MFA 的 Azure 单点登录作为身份验证方法。
     + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。仅用于 Microsoft Azure AD。这是在 Azure AD 上为您的公司配置的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
     + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。此选项仅用于 Microsoft Azure AD。这是您在设置具有 MFA 的 Azure AD 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
     + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。
     + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。

------
#### [ ODBC ]

**设置 ODBC 以在 Microsoft Azure AD 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 连接（使用 Azure AD 单点登录）到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于 Azure AD 单点登录配置的**身份验证类型**，请选择 **Identity Provider: Azure AD**。这是 ODBC 驱动程序在通过 Azure 单点登录进行身份验证时使用的验证方法。
  + 对于具有 MFA 的 Azure AD 单点登录配置的**身份验证类型**，请选择 **Identity Provider: Browser Azure AD**。这是 ODBC 驱动程序在通过 Azure 单点登录（采用 MFA）进行身份验证时使用的验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-azure-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型** 为**身份提供者: Azure AD** 的情况。
  + 对于**密码**，请输入 ***your-azure-password***。请仅将其用于 **Auth Type (身份验证类型)** 为 **Identity Provider: Azure AD (身份提供者: Azure AD)** 的情况。
  + 对于 **IdP 租户**，请输入 ***your-idp-tenant***。这是在 IdP (Azure) 上配置的公司的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
  + 对于 **Azure 客户端密钥**，请输入 ***your-azure-redshift-application-client-secret***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。
  + 对于 **Azure 客户端 ID**，请输入 ***your-azure-redshift-application-client-id***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的默认侦听端口。默认值为 7890。这仅适用于浏览器 Azure AD 插件。
  + 对于**响应超时**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。该选项仅适用于浏览器 Azure AD 插件。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 Azure AD 单点登录配置的 **plugin\$1name**，请输入 **AzureAD**。这指定驱动程序使用 Azure 单点登录作为身份验证方法。
  + 对于具有 MFA 的 Azure AD 单点登录配置的 **plugin\$1name**，请输入 **BrowserAzureAD**。这指定驱动程序将 Azure 单点登录（采用 MFA）作为身份验证方法。
  + 对于 **uid**，请输入 ***your-azure-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **AzureAD** 的情况。
  + 对于**密码**，请输入 ***your-azure-password***。请仅将其用于 **plugin\$1name** 为 **AzureAD** 的情况。
  + 对于 **idp\$1tenant**，请输入 ***your-idp-tenant***。这是在 IdP (Azure) 上配置的公司的租户名称。此值可以是租户名或带连字符的租户唯一 ID。
  + 对于 **client\$1secret**，请输入 ***your-azure-redshift-application-client-secret***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端密钥。
  + 对于 **client\$1id**，请输入 ***your-azure-redshift-application-client-id***。这是您在设置 Azure 单点登录配置时创建的 Amazon Redshift 应用程序的客户端 ID（带连字符）。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这适用于浏览器 Azure AD 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 Azure 响应的指定时间段（以秒为单位）。此选项适用于浏览器 Azure AD 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

## 问题排查
<a name="setup-identity-provider-azure-auth"></a>

要解决浏览器 Azure AD 插件的问题，请考虑以下几点。
+ 要使用浏览器 Azure AD 插件，在请求中指定的回复 URL 必须与为应用程序配置的回复 URL 一致。导航到 Microsoft Azure 门户上的**使用 SAML 设置单点登录**页面。然后检查**回复 URL** 是否已设置为 http://localhost/redshift/。
+ 如果收到 IdP 租户错误，请验证 **IdP 租户**名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

  在 Windows 上，导航到 **Amazon Redshift ODBC DSN 设置**页面的**连接设置**部分。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。

  在 macOS 和 Linux 上，找到 *odbc.ini* 文件。然后检查在 IdP (Azure) 上配置的公司租户名称是否与最初在 Microsoft Azure 中设置 Active Directory 时所用的域名匹配。
+ 如果收到请求中指定的回复 URL 与为应用程序配置的回复 URL 不一致的错误，请验证**重定向 URI** 是否与回复 URL 相同。

  在 Microsoft Azure 门户上，导航到您的应用程序的**应用程序注册**页面。然后检查重定向 URI 是否与回复 URL 一致。
+ 如果收到“未经授权错误”意外响应，请验证是否已完成**移动和桌面应用程序**配置。

  在 Microsoft Azure 门户上，导航到您的应用程序的**应用程序注册**页面。然后导航到**身份验证**，检查是否已将**移动和桌面应用程序**配置为使用 http://localhost/redshift/ 作为重定向 URI。

# Ping Identity
<a name="setup-identity-provider-ping"></a>

您可以将 Ping Identity 作为身份提供者 (IdP) 以访问 Amazon Redshift 集群。本教程将向您展示如何将 Ping Identity 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 Ping Identity 和您的 AWS 账户相互信任
<a name="setup-identity-provider-ping-trust"></a>

以下过程介绍如何使用 PingOne 门户建立信任关系。

**将 Ping 身份和您的 AWS 账户设置为相互信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Ping 身份用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 PingOne 门户上添加 Amazon Redshift 以作为新的 SAML 应用程序。有关详细步骤，请参阅 [Ping Identity 文档](https://docs.pingidentity.com/)。

   1. 转到**我的应用程序**。

   1. 在**添加应用程序**下面，选择**新建 SAML 应用程序**。

   1. 对于**应用程序名称**，请输入 **Amazon Redshift**。

   1. 对于**协议版本**，请选择 **SAML v2.0**。

   1. 对于**类别**，请选择 ***your-application-category***。

   1. 对于**断言消费者服务(ACS)**，请键入 ***your-redshift-local-host-url***。这是 SAML 断言重定向到的本地主机和端口。

   1. 对于**实体 ID**，请输入 `urn:amazon:webservices`。

   1. 对于**签名**，请选择**签名断言**。

   1. 在 **SSO 属性映射**部分中，创建声明，如下表中所示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-ping.html)

1. 对于**组访问权限**，请设置以下组访问权限（如果需要）：
   + **https://aws.amazon.com/SAML/Attributes/Role**
   + **https://aws.amazon.com/SAML/Attributes/RoleSessionName**
   + **https://redshift.amazon.com/SAML/Attributes/AutoCreate**
   + **https://redshift.amazon.com/SAML/Attributes/DbUser**

1. 查看设置，并在必要时进行更改。

1. 将**启动单点登录(SSO) URL** 作为浏览器 SAML 插件的登录 URL。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Ping Identity 时保存的联合元数据 XML 文件。有关详细步骤，请参阅 *IAM 用户指南*中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Ping Identity 进行身份验证
<a name="setup-identity-provider-ping-auth"></a>

------
#### [ JDBC ]

**设置 JDBC 以在 Ping Identity 中进行身份验证**
+ 配置数据库客户端以使用 Ping Identity 单点登录通过 JDBC 连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Ping Identity 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**Ping**。

  1. 对于**连接配置文件**，请输入 ***your-connection-profile-name***，例如，**Ping**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 PingOne 用户名。这是您用于单点登录的 PingOne 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 PingOne 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**并执行以下操作之一：
     + 对于 **login\$1url**，请输入 ***your-ping-sso-login-url***。该值指定 URL 将单点登录用作登录时的身份验证方法。
     + 对于 Ping Identity，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.PingCredentialsProvider**。此值指定驱动程序使用 Ping Identity 单点登录作为身份验证方法。
     + 对于具有单点登录的 Ping Identity，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。该值指定驱动程序将具有单点登录的 Ping Identity PingOne 用作身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 Ping Identity 中进行身份验证**
+ 配置数据库客户端以使用 Ping Identity PingOne 单点登录通过 ODBC 连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，请执行以下操作之一：
    + 对于 Ping Identity 配置，请选择**身份提供者：Ping Federate**。这是 ODBC 驱动程序在通过 Ping Identity 单点登录进行身份验证时使用的身份验证方法。
    + 对于具有单点登录的 Ping Identity 配置，请选择**身份提供者：浏览器 SAML**。这是 ODBC 驱动程序在使用具有单点登录的 Ping Identity 进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-ping-username***。这是您用于单点登录的 PingOne 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: PingFederate**的情况。
  + 对于**密码**，请输入 ***your-ping-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: PingFederate (身份提供者: PingFederate)** 的情况。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。
  +  对于**响应超时**，请输入 ***the-number-of-seconds***。这是 IdP 服务器发回响应时超时之前等待的秒数。最小秒数必须为 10。如果建立连接的用时长于此阈值，则连接将被中止。这仅适用于浏览器 SAML 插件。
  + 对于**登录 URL**，请输入 ***your-login-url***。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于 Ping Identity 配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在使用 Ping Identity 进行身份验证时所采用的身份验证方法。
    + 对于具有单点登录的 Ping Identity 配置，请输入 **Ping**。这是 ODBC 驱动程序在使用具有单点登录的 Ping Identity 进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-ping-username***。这是您用于单点登录的 Microsoft Azure 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **Ping** 的情况。
  + 对于**密码**，请输入 ***your-ping-password***。请仅将其用于 **plugin\$1name** 为 **Ping** 的情况。
  + 对于 **login\$1url**，请输入 ***your-login-url***。这是返回 SAML 响应的启动单点登录 URL。这仅适用于浏览器 SAML 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 PingOne Identity 响应的指定时间段（以秒为单位）。这仅适用于浏览器 SAML 插件。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Okta
<a name="setup-identity-provider-okta"></a>

您可以将 Okta 作为身份提供者 (IdP) 以访问 Amazon Redshift 集群。本教程将向您展示如何将 Okta 用作身份提供者（IdP）来访问 Amazon Redshift 集群。

## 第 1 步：设置 Okta 和您的 AWS 账户相互信任
<a name="setup-identity-provider-okta-trust"></a>

以下过程介绍如何建立信任关系。

**将 Okta 和您的 AWS 账户设置为相互信任**

1. 创建或使用现有的 Amazon Redshift 集群，以使 Okta 用户连接到该集群。要配置连接，需要此集群的某些属性，例如集群标识符。有关更多信息，请参阅[创建集群](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html)。

1. 在 Okta 门户上添加 Amazon Redshift 以作为新应用程序。有关详细步骤，请参阅 [Okta 文档](https://developer.okta.com/docs/)。
   + 选择**添加应用程序**。
   + 在**添加应用程序**下面，选择**创建新的应用程序**。
   + 在**创建新添加应用程序集成**页面上，为**平台** 选择 **Web**。
   + 对于**登录方法**，请选择 **SAML v2.0**。
   + 在**常规设置**页面上，为**应用程序名称** 输入 ***your-redshift-saml-sso-name***。这是您的应用程序的名称。
   + 在 **SAML 设置**页面上，为**单点登录 URL** 输入 ***your-redshift-local-host-url***。这是 SAML 断言重定向到的本地主机和端口，例如 `http://localhost:7890/redshift/`。

1. 将**单点登录 URL** 作为**收件人 URL** 和**目标 URL**。

1. 对于**签名**，请选择**签名断言**。

1. 对于**受众 URI (SP 实体 ID)**，为声明输入 **urn:amazon:webservices**，如下表中所示。

1.  在**高级设置**部分中，为 **SAML 颁发者 ID** 输入 ***your-Identity-Provider-Issuer-ID***，您可以在**查看设置说明**部分中找到该 ID。

1. 在**属性语句**部分中，创建声明，如下表中所示。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/setup-identity-provider-okta.html)

1. 在**应用程序嵌入式链接**部分中，找到可用作浏览器 SAML 插件登录 URL 的 URL。

1. 在 IAM 控制台上创建 IAM SAML 身份提供者。您提供的元数据文档是您在设置 Okta 时保存的联合元数据 XML 文件。有关详细步骤，请参阅 *IAM 用户指南*中的[创建和管理 IAM 身份提供者（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)。

1. 在 IAM 控制台上为 SAML 2.0 联合身份创建 IAM 角色。有关详细步骤，请参阅 *IAM 用户指南*中的[创建用于 SAML 的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)。

1. 创建一个 IAM 策略，您可以将其附加到您在 IAM 控制台上为 SAML 2.0 联合身份验证创建的 IAM 角色。有关详细步骤，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)。有关 Azure AD 示例，请参阅[设置 JDBC 或 ODBC 单点登录身份验证](setup-azure-ad-identity-provider.md)。

## 第 2 步：设置 JDBC 或 ODBC，以便向 Okta 进行身份验证
<a name="setup-identity-provider-okta-auth"></a>

------
#### [ JDBC ]

**设置 JDBC 以在 Okta 中进行身份验证**
+ 将数据库客户端配置为通过 JDBC 并使用 Okta 单点登录连接到集群。

  您可以使用任何采用 JDBC 驱动程序的客户端通过 Okta 单点登录进行连接，也可以使用像 Java 这样的语言通过脚本进行连接。有关安装和配置信息，请参阅[为 Amazon Redshift 配置 JDBC 驱动程序版本 2.x 连接](jdbc20-install.md)。

  例如，您可以使用 SQLWorkbench/J 作为客户端。当您配置 SQLWorkbench/J 时，数据库的 URL 使用以下格式。

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  如果您使用 SQLWorkbench/J 作为客户端，请执行以下步骤：

  1. 启动 SQL Workbench/J。在**选择连接配置文件**页面中，添加一个**配置文件组**，例如，**Okta**。

  1. 对于**连接配置文件**，请输入 ***your-connection-profile-name***，例如，**Okta**。

  1. 选择**管理驱动程序**，然后选择 **Amazon Redshift**。选择**库**旁边的**打开文件夹**图标，然后选择适当的 JDBC .jar 文件。

  1. 在**选择连接配置文件**页面上，向连接配置文件添加信息，如下所示：
     + 对于**用户**，请输入您的 Okta 用户名。这是您用于单点登录的 Okta 账户的用户名，该账户有权限访问您在尝试进行身份验证时使用的集群。
     + 对于**密码**，请输入您的 Okta 密码。
     + 对于**驱动程序**，请选择 **Amazon Redshift (com.amazon.redshift.jdbc.Driver)**。
     + 对于 **URL**，请输入 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***。

  1. 选择**扩展属性**并执行以下操作之一：
     + 对于 **login\$1url**，请输入 ***your-okta-sso-login-url***。该值指定 URL 将单点登录作为身份验证方法以登录到 Okta。
     + 对于 Okta 单点登录，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.OktaCredentialsProvider**。此值指定驱动程序使用 Okta 单点登录作为身份验证方法。
     + 对于具有 MFA 的 Okta 单点登录，请为 **plugin\$1name** 输入 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**。此值指定驱动程序将具有 MFA 的 Okta 单点登录作为身份验证方法。

------
#### [ ODBC ]

**设置 ODBC 以在 Okta 中进行身份验证**
+ 将数据库客户端配置为通过 ODBC 并使用 Okta 单点登录连接到集群。

  Amazon Redshift 提供了适用于 Linux、Windows 和 macOS 操作系统的 ODBC 驱动程序。在安装 ODBC 驱动程序之前，请确定您的 SQL 客户端工具是 32 位还是 64 位。安装符合 SQL 客户端工具要求的 ODBC 驱动程序。

  在 Windows 上的 **Amazon Redshift ODBC 驱动程序 DSN 安装**页的**连接设置**下，输入以下信息：
  + 对于**数据源名称**，输入 ***your-DSN***。这将指定用作 ODBC 配置文件名称的数据源名称。
  + 对于**身份验证类型**，请执行以下操作之一：
    + 对于 Okta 单点登录配置，请选择 **Identity Provider: Okta**。这是 ODBC 驱动程序在通过 Okta 单点登录进行身份验证时使用的身份验证方法。
    + 对于具有 MFA 的 Okta 单点登录配置，请选择 **Identity Provider: Browser SAML**。这是 ODBC 驱动程序在通过具有 MFA 的 Okta 单点登录进行身份验证时使用的身份验证方法。
  + 对于**集群 ID**，请输入 ***your-cluster-identifier***。
  + 对于**区域**，请输入 ***your-cluster-region***。
  + 对于**数据库**，请输入 ***your-database-name***。
  + 对于**用户**，请输入 ***your-okta-username***。这是您用于单点登录的 Okta 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于**身份验证类型**为**身份提供者: Okta** 的情况。
  + 对于**密码**，请输入 ***your-okta-password***。请仅将其用于 **Auth type (身份验证类型)** 为 **Identity Provider: Okta (身份提供者: Okta)** 的情况。

  在 macOS 和 Linux 上，按如下方式编辑 `odbc.ini` 文件：
**注意**  
所有条目不区分大小写。
  + 对于 **clusterid**，请输入 ***your-cluster-identifier***。这是已创建的 Amazon Redshift 集群的名称。
  + 对于**区域**，请输入 ***your-cluster-region***。这是已创建的 Amazon Redshift 集群的 AWS 区域。
  + 对于**数据库**，请输入 ***your-database-name***。这是您尝试在 Amazon Redshift 集群上访问的数据库的名称。
  + 对于**区域设置**，请输入 **en-us**。这是显示错误消息的语言。
  + 对于 **iam**，请输入 **1**。此值指定要使用 IAM 凭证进行身份验证的驱动程序。
  + 对于 **plugin\$1name**，请执行以下操作之一：
    + 对于具有 MFA 的 Okta 单点登录配置，请输入 **BrowserSAML**。这是 ODBC 驱动程序在通过具有 MFA 的 Okta 单点登录进行身份验证时使用的身份验证方法。
    + 对于 Okta 单点登录配置，请输入 **Okta**。这是 ODBC 驱动程序在通过 Okta 单点登录进行身份验证时使用的身份验证方法。
  + 对于 **uid**，请输入 ***your-okta-username***。这是您用于单点登录的 Okta 账户的用户名，该账户有权访问您在尝试进行身份验证时使用的集群。请仅将其用于 **plugin\$1name** 为 **Okta** 的情况。
  + 对于**密码**，请输入 ***your-okta-password***。请仅将其用于 **plugin\$1name** 为 **Okta** 的情况。
  + 对于 **login\$1url**，请输入 ***your-login-url***。这是返回 SAML 响应的启动单点登录 URL。这仅适用于浏览器 SAML 插件。
  + 对于 **idp\$1response\$1timeout**，请输入 ***the-number-of-seconds***。这是等待 PingOne 响应的指定时间段（以秒为单位）。这仅适用于浏览器 SAML 插件。
  + 对于**侦听端口**，请输入 ***your-listen-port***。这是本地服务器正在侦听的端口。默认值为 7890。这仅适用于浏览器 SAML 插件。

  在 macOS 和 Linux 上，还要编辑配置文件设置以添加以下导出。

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------