Amazon Redshift
管理指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

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

为了以编程方式生成临时数据库用户凭证,Amazon Redshift 提供了适用于 AWS 命令行界面 (AWS CLI) 的 get-cluster-credentials 命令和 GetClusterCredentials API 操作。(可选) 您可使用 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 与 autocreate 为新用户生成临时数据库凭证并将此用户添加到组 example_group

    aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user -–autocreate true --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. 如果密码有效且尚未到期,群集将完成连接。