使用 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 命令,检索数据库用户凭证并连接到数据库的步骤。
生成和使用临时数据库凭证
-
创建或修改具有所需权限的用户或角色。有关 IAM 权限的更多信息,请参阅步骤 3:创建有权调用 GetClusterCredentials 的 IAM 角色。
-
以您在上一步骤中授权的用户或角色的身份,运行 get-cluster-credentials CLI 命令或调用
GetClusterCredentials
API 操作并提供下列值:-
集群标识符 – 包含数据库的集群的名称。
-
数据库用户名 – 现有的或新的数据库用户的名称。
-
如果数据库中不存在此用户且 AutoCreate 为 true,则将创建一个已禁用 PASSWORD 的新用户。
-
如果此用户不存在且 AutoCreate 为 false,则请求会失败。
-
在此示例中,数据库用户名为
temp_creds_user
。
-
-
Autocreate – (可选)如果数据库用户名不存在,则创建新用户。
-
数据库名称 – (可选)授权用户登录的数据库的名称。如果未指定数据库名称,则用户可以登录到任何集群数据库。
-
数据库组 – (可选)现有数据库用户组的列表。在成功登录后,数据库用户将添加到指定的用户组中。如果未指定组,则用户仅具有 PUBLIC 权限。此用户组名称必须与在附加到用户或角色的 IAM 策略中指定的 dbgroup 资源 ARN 匹配。
-
过期时间 – (可选)临时凭证过期之前经历的时间(以秒为单位)。您可指定一个介于 900 秒 (15 分钟) 和 3600 秒 (60 分钟) 之间的值。默认值为 900 秒。
-
-
Amazon Redshift 确认用户是否有权使用指定资源来调用
GetClusterCredentials
操作。 -
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==" }
-
建立到 Amazon Redshift 集群的安全套接字层 (SSL) 身份验证连接,并发送包含
GetClusterCredentials
响应中的用户名和密码的登录请求。请在用户名中包含IAM:
或IAMA:
前缀,例如,IAM:temp_creds_user
或IAMA:temp_creds_user
。重要
将您的 SQL 客户端配置为需要 SSL。否则,如果您的 SQL 客户端自动尝试使用 SSL 进行连接,则可能会在出现任何故障时回退到非 SSL。在这种情况下,首次连接尝试可能因凭证过期或无效而失败,随后的另一次连接尝试可能因连接不是 SSL 而失败。如果出现这种情况,第一条错误消息可能会丢失。有关使用 SSL 连接到集群的更多信息,请参阅配置连接的安全选项。
-
如果连接未使用 SSL,则连接尝试可能失败。
-
集群将向 SQL 客户端发送
authentication
请求。 -
随后,SQL 客户端会向集群发送临时密码。
-
如果密码有效且尚未到期,集群将完成连接。