

 从补丁 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/)。

# 使用 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. 如果密码有效且尚未到期，集群将完成连接。