使用 Amazon Redshift CLI 或 API 生成 IAM 数据库凭证 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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

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

注意

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

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

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

  1. 创建或修改具有所需权限的 IAM 用户或角色。有关 IAM 权限的更多信息,请参阅创建有权调用 GetClusterCredentials 的 IAM 角色或用户

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

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

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

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

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

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

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

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

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

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

  3. Amazon Redshift 确认 IAM 用户是否有权调用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 与自动创建为新用户生成临时数据库凭证并将此用户添加到组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. 如果密码有效且尚未到期,集群将完成连接。