

 从补丁 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`，则忽略其他选项。

下例所示为一个有两个配置文件的 \~/.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 选项。


|  选项  | 描述 | 
| --- | --- | 
| `Iam` | 仅用于 ODBC 连接字符串。设置为 1 可使用 IAM 身份验证。 | 
| `AccessKeyID`<br />`SecretAccessKey`<br />`SessionToken` | 为 IAM 数据库身份验证配置的 IAM 角色或用户的访问密钥 ID 和秘密访问密钥。SessionToken 仅对具有临时凭证的 IAM 角色是必需的。SessionToken 不用于用户。有关更多信息，请参阅[临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)。 | 
| plugin\_name | 实施凭证提供商的类的完全限定名称。Amazon Redshift JDBC 驱动程序包括基于 SAML 的凭证提供商插件。如果提供 plugin\_name，您还可以提供其他相关选项。有关更多信息，请参阅 [凭证提供程序插件](#using-credentials-provider-plugin)。 | 
| `Profile`  | AWS 凭证中配置文件的名称或包含 JDBC 连接选项值的 config 文件的名称。有关更多信息，请参阅 [使用配置文件](#using-configuration-profile)。 | 

## 用于创建数据库用户凭证的 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 策略设置条件。

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


|  选项  | 描述 | 
| --- | --- | 
| DbUser | 数据库用户的名称。如果数据库中存在名为 DbUser 的用户，则临时用户凭证具有与现有用户相同的权限。如果数据库中不存在 DbUser 且 AutoCreate 为 true，则创建一个名为 DbUser 的新用户。（可选）禁用现有用户的密码。有关更多信息，请参阅 [ALTER\_USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html) | 
| AutoCreate | 指定 `true` 以使用为 DbUser 指定的名称创建数据库用户（如果不存在）。默认为 false。 | 
| DbGroups | 数据库用户在当前会话中加入的一个或多个现有数据库组的名称的逗号分隔列表。默认情况下，新用户仅添加到 PUBLIC。 | 

## 凭证提供程序插件
<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\_id）生成的。

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`，则忽略其他选项。


|  选项  | 描述 | 
| --- | --- | 
| plugin\_name | 对于 JDBC，为实施凭证提供商的类名称。指定下列项之一：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/options-for-providing-iam-credentials.html)<br />对于 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) | 
| idp\_host  | 企业身份提供者主机的名称。此名称不应包含任何斜线 (“/”)。对于 Okta 身份提供者，idp\_host 的值应以 .okta.com 结尾。 | 
| `idp_port`  | 身份提供者使用的端口。默认值为 443。Okta 将忽略该端口。 | 
| `preferred_role`  | SAML 断言中的 AttributeValue 属性的 Role 元素中的角色 Amazon 资源名称（ARN）。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息，请参阅 [步骤 2：为 IdP 配置 SAML 断言](generating-iam-credentials-steps.md#configuring-saml-assertions)。 | 
| `user`  | 企业用户名，包括域 (如果适用)。例如，对于 Active Directory，域名的格式需为 domain\\username。 | 
| 密码   | 企业用户的密码。我们建议不使用此选项，而是使用您的 SQL 客户端提供密码。 | 
| `app_id`  | Okta 应用程序的 ID。仅用于 Okta。app\_id 的值位于 Okta 应用程序嵌入链接中的 amazon\_aws 后面。与 IdP 管理员一起获取该值。以下是应用程序嵌入链接的示例：https://example.okta.com/home/amazon\_aws/0oa2hylwrpM8UGehd1t7/272 | 
| `idp_tenant` | 用于 Azure AD 的租户。仅与 Azure 一起使用。 | 
| `client_id`  | Azure AD 中的 Amazon Redshift 企业应用程序的客户端 ID。仅与 Azure 一起使用。 | 