使用 Amazon Redshift CLI 或 API 生成 IAM 身份的数据库凭证 - Amazon Redshift

使用 Amazon Redshift CLI 或 API 生成 IAM 身份的数据库凭证

为了以编程方式生成临时数据库用户凭证,Amazon Redshift 提供适用于 AWS Command Line Interface (AWS CLI) 和 GetClusterCredentials API 操作的 get-cluster-credentials 命令。或者,您可以使用 Amazon Redshift JDBC 或 ODBC 驱动程序配置您的 SQL 客户端,这些驱动程序用于管理调用 GetClusterCredentials 操作,检索数据库用户凭证,并在您的 SQL 客户端与您的 Amazon Redshift 数据库之间建立连接的过程。有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项

注意

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

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

生成和使用临时数据库凭证
  1. 创建或修改具有所需权限的用户或角色。有关 IAM 权限的更多信息,请参阅步骤 3:创建有权调用 GetClusterCredentials 的 IAM 角色

  2. 以您在上一步骤中授权的用户或角色的身份,运行 get-cluster-credentials CLI 命令或调用 GetClusterCredentials API 操作并提供下列值:

    • 集群标识符 – 包含数据库的集群的名称。

    • 数据库用户名 – 现有的或新的数据库用户的名称。

      • 如果数据库中不存在此用户且 AutoCreate 为 true,则将创建一个已禁用 PASSWORD 的新用户。

      • 如果此用户不存在且 AutoCreate 为 false,则请求会失败。

      • 在此示例中,数据库用户名为 temp_creds_user

    • Autocreate – (可选)如果数据库用户名不存在,则创建新用户。

    • 数据库名称 – (可选)授权用户登录的数据库的名称。如果未指定数据库名称,则用户可以登录到任何集群数据库。

    • 数据库组 – (可选)现有数据库用户组的列表。在成功登录后,数据库用户将添加到指定的用户组中。如果未指定组,则用户仅具有 PUBLIC 权限。此用户组名称必须与在附加到用户或角色的 IAM 策略中指定的 dbgroup 资源 ARN 匹配。

    • 过期时间 – (可选)临时凭证过期之前经历的时间(以秒为单位)。您可指定一个介于 900 秒 (15 分钟) 和 3600 秒 (60 分钟) 之间的值。默认值为 900 秒。

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

  4. 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=="
    }
  5. 建立到 Amazon Redshift 集群的安全套接字层 (SSL) 身份验证连接,并发送包含 GetClusterCredentials 响应中的用户名和密码的登录请求。请在用户名中包含 IAM:IAMA: 前缀,例如,IAM:temp_creds_userIAMA:temp_creds_user

    重要

    将您的 SQL 客户端配置为需要 SSL。否则,如果您的 SQL 客户端自动尝试使用 SSL 进行连接,则可能会在出现任何故障时回退到非 SSL。在这种情况下,首次连接尝试可能因凭证过期或无效而失败,随后的另一次连接尝试可能因连接不是 SSL 而失败。如果出现这种情况,第一条错误消息可能会丢失。有关使用 SSL 连接到集群的更多信息,请参阅配置连接的安全选项

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

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

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

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