创建临时 IAM 凭证
在本节中,您可以了解如何配置系统以生成基于 IAM 的临时数据库用户凭证,并使用新凭证登录到数据库。
概括来说,流程如下所示:
-
(可选)您可以将 IAM 身份验证和第三方身份提供者 (IdP) 进行集成,对访问 Amazon Redshift 数据库的用户进行身份验证。
-
(可选)要使用 IdP 进行 IAM 身份验证,您需要在 IdP 应用程序中定义一个声明规则,将组织中的用户或组映射到 IAM 角色。或者,您可以包含属性元素以设置
GetClusterCredentials
参数。 -
步骤 3:创建有权调用 GetClusterCredentials 的 IAM 角色
您的 SQL 客户端应用程序在调用
GetClusterCredentials
操作时代入用户。如果您创建了用于身份提供者访问的 IAM 角色,则可向该角色添加必要权限。 -
(可选)默认情况下,
GetClusterCredentials
返回凭证;如果用户名不存在,则会创建一个新用户。您也可以选择指定用户在登录时加入的用户组。默认情况下,数据库用户加入 PUBLIC 组。 -
步骤 5:配置 JDBC 或 ODBC 连接以使用 IAM 凭证
要连接到您的 Amazon Redshift 数据库,可将 SQL 客户端配置为使用 Amazon Redshift JDBC 或 ODBC 驱动程序。
步骤 1:创建用于 IAM 单点登录访问的 IAM 角色
如果您未使用身份提供者进行单点登录访问,则可跳过此步骤。
如果您已在 AWS 外部管理用户身份,则可将 IAM 身份验证和第三方 SAML-2.0 身份提供者 (IdP) 集成,对访问 Amazon Redshift 数据库的用户进行身份验证。
有关更多信息,请参阅 IAM 用户指南中的身份提供者和联合。
在使用 Amazon Redshift IdP 身份验证之前,请先创建一个 AWS SAML 身份提供者。您可以在 IAM 控制台中创建一个 IdP,以向 AWS 通知该 IdP 及其配置。这样将在您的 AWS 账户和 IdP 之间建立信任。有关创建角色的步骤,请参阅《IAM 用户指南》中的创建用于 SAML 2.0 联合的角色(控制台)。
步骤 2:为 IdP 配置 SAML 断言
在创建 IAM 角色后,您可以在 IdP 应用程序中定义一个声明规则,以将组织中的用户或组映射到 IAM 角色。有关更多信息,请参阅 IAM 用户指南中的为身份验证响应配置 SAML 断言。
如果选择使用可选的 GetClusterCredentials
参数 DbUser
、AutoCreate
和 DbGroups
,您有两个选择。您可以使用 JDBC 或 ODBC 连接设置这些参数的值,也可以将 SAML 属性元素添加到 IdP 以设置这些值。有关 DbUser
、AutoCreate
和 DbGroups
参数的更多信息,请参阅步骤 5:配置 JDBC 或 ODBC 连接以使用 IAM 凭证。
注意
如果您使用 IAM 策略变量 ${redshift:DbUser}
(如GetClusterCredentials 的资源策略中所述),则 DbUser
的值将被替换为由 API 操作的请求上下文检索的值。Amazon Redshift 驱动程序使用由连接 URL 提供的 DbUser
变量的值,而不是作为 SAML 属性提供的值。
为了帮助保护该配置,我们建议您在 IAM 策略中使用一个条件以通过 DbUser
验证 RoleSessionName
值。您可以在 使用 GetClusterCredentials 的示例策略 中找到如何使用 IAM 策略设置条件。
要配置 IdP 以设置 DbUser
、AutoCreate
和 DbGroups
参数,请包含以下 Attribute
元素:
-
Attribute
属性设置为“https://redshift.amazon.com/SAML/Attributes/DbUser”的Name
元素将
AttributeValue
元素设置为要连接到 Amazon Redshift 数据库的用户的名称。AttributeValue
元素中的值必须为小写形式,以字母开头,仅包含字母数字字符、下划线 (_)、加号 (+)、圆点 (.)、@ 符号或连字符 (-),并且应少于 128 个字符。通常,用户名为用户 ID (例如,bobsmith) 或电子邮件地址 (例如,bobsmith@example.com)。此值不能包含空格 (例如,像 Bob Smith 这样的用户显示名称)。<Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser"> <AttributeValue>user-name</AttributeValue> </Attribute>
-
Name 属性设置为“https://redshift.amazon.com/SAML/Attributes/AutoCreate”的 Attribute 元素
可以将 AttributeValue 元素设置为 true 以创建新的数据库用户(如果不存在)。将 AttributeValue 设置为 false 可指定数据库用户必须存在于 Amazon Redshift 数据库中。
<Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute>
-
Attribute
属性设置为“https://redshift.amazon.com/SAML/Attributes/DbGroups”的Name
元素该元素包含一个或多个
AttributeValue
元素。将每个AttributeValue
元素设置为一个数据库组名称,DbUser
将在连接到 Amazon Redshift 数据库的会话期间加入该组。<Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups"> <AttributeValue>group1</AttributeValue> <AttributeValue>group2</AttributeValue> <AttributeValue>group3</AttributeValue> </Attribute>
步骤 3:创建有权调用 GetClusterCredentials 的 IAM 角色
您的 SQL 客户端需要授权才能代表您调用 GetClusterCredentials
操作。要提供该授权,可以创建用户或角色并附加用于授予必要权限的策略。
创建有权调用 GetClusterCredentials 的 IAM 角色
-
利用 IAM 服务,创建用户或角色。您也可以使用现有用户或角色。例如,如果您创建了一个用于身份提供者访问的 IAM 角色,则可向该角色附加必要的 IAM 策略。
-
附加有权调用
redshift:GetClusterCredentials
操作的权限策略。根据指定的可选参数,您还可在策略中允许或限制其他操作和资源:-
要允许您的 SQL 客户端检索 Redshift 集群资源的集群 ID、AWS 区域和端口,可包含调用
redshift:DescribeClusters
操作的权限。 -
如果您使用
AutoCreate
选项,请包含对redshift:CreateClusterUser
资源调用dbuser
的权限。以下 Amazon 资源名称(ARN)指定 Amazon Redshiftdbuser
。将
、region
和account-id
替换为您的 AWS 区域、账户和集群的相应值。对于cluster-name
,指定用于登录到集群数据库的用户名。dbuser-name
arn:aws:redshift:
region
:account-id
:dbuser:cluster-name
/dbuser-name
-
(可选)添加一个 ARN,以使用以下格式指定 Amazon Redshift
dbname
资源。将
、region
和account-id
替换为您的 AWS 区域、账户和集群的相应值。对于cluster-name
,指定用户将登录到的数据库的名称。database-name
arn:aws:redshift:
region
:account-id
:dbname:cluster-name
/database-name
-
如果您使用
DbGroups
选项,请使用以下格式包含对 Amazon Redshiftdbgroup
资源调用redshift:JoinGroup
操作的权限。将
、region
和account-id
替换为您的 AWS 区域、账户和集群的相应值。对于cluster-name
,请指定用户在登录时加入的用户组的名称。dbgroup-name
arn:aws:redshift:
region
:account-id
:dbgroup:cluster-name
/dbgroup-name
-
有关更多信息以及示例,请参阅 GetClusterCredentials 的资源策略。
以下示例显示允许 IAM 角色调用 GetClusterCredentials
操作的策略。该策略指定,对于名为 examplecluster
的集群上的名为 temp_creds_user
的数据库用户,Amazon Redshift dbuser
资源为其授予角色访问权限。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user" } }
您可使用通配符 (*) 替换完整或部分集群名称、用户名和数据库组名称。以下示例允许指定账户中的任何集群上所有以 temp_
开头的用户名调用。
重要
以下示例中的语句指定通配符 (*) 作为资源的值,以便策略允许以指定字符开头的任何资源。在 IAM 策略使用通配符可能过于宽松。作为最佳实践,我们建议对您的业务应用程序使用最严格的可行策略。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:*/temp_*" } }
以下示例显示一个允许 IAM 角色调用 GetClusterCredentials
操作的策略,并提供了自动创建新用户和指定用户在登录时加入的组的选项。"Resource":
"*"
子句向角色授予对任何资源 (包括集群、数据库用户或用户组) 的访问权限。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "redshift:GetClusterCredentials", "redshift:CreateClusterUser", "redshift:JoinGroup" ], "Resource": "*" } }
有关更多信息,请参阅 Amazon Redshift ARN 语法。
步骤 4:创建数据库用户和数据库组
(可选)您可以创建一个用于登录到集群数据库的数据库用户。如果您为现有用户创建临时用户凭证,则可禁用此用户的密码以强制用户使用临时密码进行登录。(可选)您可以使用 GetClusterCredentials
选项自动创建新的数据库用户。
您可以创建希望 IAM 数据库用户在登录时加入的数据库用户组并提供相应的权限。在调用 GetClusterCredentials
操作时,您可以指定新用户在登录时加入的用户组名称列表。这些组成员资格仅对特定请求生成的凭证所创建的会话有效。
创建数据库用户和数据库组
-
登录到 Amazon Redshift 数据库,并使用 CREATE USER 创建数据库用户或使用 ALTER USER 修改现有用户。
-
(可选)指定 PASSWORD DISABLE 选项可阻止用户使用密码。在禁用用户的密码后,用户只能使用临时凭证进行登录。如果未禁用密码,用户可以使用密码或临时凭证进行登录。您不能禁用超级用户的密码。
如果用户需要在 AWS Management Console 之外与 AWS 交互,则需要编程式访问权限。授予编程式访问权限的方法取决于访问 AWS 的用户类型。
要向用户授予编程式访问权限,请选择以下选项之一。
哪个用户需要编程式访问权限? 目的 方式 人力身份
(在 IAM Identity Center 中管理的用户)
使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 按照您希望使用的界面的说明进行操作。
-
有关 AWS CLI 的更多信息,请参阅《AWS Command Line Interface 用户指南》中的配置 AWS CLI 以使用 AWS IAM Identity Center。
-
有关 AWS SDK、工具和 AWS API 的更多信息,请参阅《AWS SDK 和工具参考指南》中的 IAM Identity Center 身份验证。
IAM 使用临时凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。 按照《IAM 用户指南》中将临时凭证用于 AWS 资源中的说明进行操作。 IAM (不推荐使用)
使用长期凭证签署向 AWS CLI、AWS SDK 或 AWS API 发出的编程请求。按照您希望使用的界面的说明进行操作。
-
有关 AWS CLI 的更多信息,请参阅《AWS Command Line Interface 用户指南》中的使用 IAM 用户凭证进行身份验证。
-
有关 AWS SDK 和工具的更多信息,请参阅《AWS SDK 和工具参考指南》中的使用长期凭证进行身份验证。
-
有关 AWS API 的更多信息,请参阅《IAM 用户指南》中的管理 IAM 用户的访问密钥。
以下示例创建一个已禁用密码的用户。
create user temp_creds_user password disable;
以下示例禁用现有用户的密码。
alter user temp_creds_user password disable;
-
-
使用 CREATE GROUP 创建数据库用户组。
-
使用 GRANT 命令为组定义访问权限。
步骤 5:配置 JDBC 或 ODBC 连接以使用 IAM 凭证
您可以使用 Amazon Redshift JDBC 或 ODBC 驱动程序配置 SQL 客户端。此驱动程序管理创建数据库用户凭证以及在 SQL 客户端和 Amazon Redshift 数据库之间建立连接的过程。
如果您使用身份提供者进行身份验证,请指定凭证提供商插件名称。Amazon Redshift JDBC 和 ODBC 驱动程序包括以下基于 SAML 的身份提供者的插件:
-
Active Directory 联合身份验证服务 (AD FS)
-
PingOne
-
Okta
-
Microsoft Azure AD
有关将 Microsoft Azure AD 设置为身份提供者的步骤,请参阅设置 JDBC 或 ODBC 单点登录身份验证。
配置 JDBC 连接以使用 IAM 凭证
-
从 为 Amazon Redshift 配置 JDBC 驱动程序版本 2.1 连接 页面下载最新的 Amazon Redshift JDBC 驱动程序。
-
使用下列格式之一创建包含 IAM 凭证选项的 JDBC URL。要使用 IAM 身份验证,请将
iam:
添加到 Amazon Redshift JDBC URL 中的jdbc:redshift:
后面,如以下示例中所示。jdbc:redshift:iam://
添加
cluster-name
、region
和account-id
。JDBC 驱动程序使用您的 IAM 账户信息和集群名称来检索集群 ID和 AWS 区域。为此,您的用户或角色必须有权针对指定的集群调用redshift:DescribeClusters
操作。如果您的用户或角色无权调用redshift:DescribeClusters
操作,请包含集群 ID、AWS 区域和端口,如以下示例中所示。端口号是可选的。jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
-
添加 JDBC 选项可提供 IAM 凭证。使用不同的 JDBC 选项组合可提供 IAM 凭证。有关详细信息,请参阅用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
以下 URL 为用户指定 AccessKeyID 和 SecretAccessKey。
jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=AKIAIOSFODNN7EXAMPLE&SecretAccessKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
以下示例指定包含 IAM 凭证的命名配置文件。
jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2
-
添加 JDBC 驱动程序用来调用
GetClusterCredentials
API 操作的 JDBC 选项。如果您以编程方式调用GetClusterCredentials
API 操作,请不要包括这些选项。以下示例包括 JDBC
GetClusterCredentials
选项。jdbc:redshift:iam://examplecluster:us-west-2/dev?plugin_name=com.amazon.redshift.plugin.AzureCredentialsProvider&UID=user&PWD=password&idp_tenant=my_tenant&client_secret=my_secret&client_id=my_id
配置 ODBC 连接以使用 IAM 凭证
在以下过程中,您只能找到用于配置 IAM 身份验证的步骤。有关使用标准身份验证 (采用数据库用户名和密码) 的步骤,请参阅为 Amazon Redshift 配置 ODBC 驱动程序版本 2.x 连接。
-
为您的操作系统安装和配置最新的 Amazon Redshift OBDC 驱动程序。有关更多信息,请参阅为 Amazon Redshift 配置 ODBC 驱动程序版本 2.x 连接页面。
重要
Amazon Redshift ODBC 驱动程序必须为版本 1.3.6.1000 或更高版本。
-
根据您的操作系统选择配置连接设置需要遵循的步骤。
-
在 Microsoft Windows 操作系统上,访问“Amazon Redshift ODBC 驱动程序 DSN 设置”窗口。
-
在连接设置下,输入以下信息:
-
数据源名称
-
服务器(可选)
-
端口(可选)
-
数据库。
如果您的用户或角色有权调用
redshift:DescribeClusters
操作,仅需要数据源名称和数据库。Amazon Redshift 通过调用DescribeCluster
操作使用 ClusterId 和区域来获取服务器和端口。如果您的用户或角色无权调用
redshift:DescribeClusters
操作,请指定服务器和端口。 -
-
在身份验证下,为身份验证类型选择一个值。
对于每种身份验证类型,请输入如下列出的值:
- AWS 配置文件
-
输入以下信息:
-
ClusterID
-
区域
-
配置文件名称
输入 AWS config 文件中包含 ODBC 连接选项值的配置文件的名称。有关更多信息,请参阅 使用配置文件。
(可选)提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser
-
User AutoCreate
-
DbGroups
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
- IAM 凭证
-
输入以下信息:
-
ClusterID
-
区域
-
AccessKeyID 和 SecretAccessKey
为 IAM 数据库身份验证配置的 IAM 角色或用户的访问密钥 ID 和秘密访问密钥。
-
SessionToken
对于具有临时凭证的 IAM 角色,SessionToken 是必填的。有关更多信息,请参阅临时安全凭证。
提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser(必填)
-
User AutoCreate(可选)
-
DbGroups(可选)
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
- Identity Provider: AD FS
-
对于使用 AD FS 的 Windows 集成身份验证,请将 User 和 Password 保留为空。
提供 IdP 详细信息:
-
IdP Host
企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
-
IdP Port(可选)
身份提供者使用的端口。默认值为 443。
-
Preferred Role
SAML 断言中的
AttributeValue
属性的多值Role
元素中的 IAM 角色 Amazon 资源名称(ARN)。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息,请参阅 步骤 2:为 IdP 配置 SAML 断言。
(可选)提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser
-
User AutoCreate
-
DbGroups
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
- Identity Provider: PingFederate
-
对于用户和密码,键入您的 IdP 用户名和密码。
提供 IdP 详细信息:
-
IdP Host
企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
-
IdP Port(可选)
身份提供者使用的端口。默认值为 443。
-
Preferred Role
SAML 断言中的
AttributeValue
属性的多值Role
元素中的 IAM 角色 Amazon 资源名称(ARN)。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息,请参阅 步骤 2:为 IdP 配置 SAML 断言。
(可选)提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser
-
User AutoCreate
-
DbGroups
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
- Identity Provider: Okta
-
对于用户和密码,键入您的 IdP 用户名和密码。
提供 IdP 详细信息:
-
IdP Host
企业身份提供者主机的名称。此名称不应包含任何斜线 (/)。
-
IdP Port
Okta 不使用此值。
-
Preferred Role
SAML 断言中的
AttributeValue
属性的Role
元素中的 IAM 角色 Amazon 资源名称(ARN)。请与 IdP 管理员一起查找适合首选角色的值。有关更多信息,请参阅 步骤 2:为 IdP 配置 SAML 断言。 -
Okta App ID
Okta 应用程序的 ID。应用程序 ID 的值位于 Okta 应用程序嵌入链接中的“amazon_aws”之后。与您的 IdP 管理员一起获取此值。
(可选)提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser
-
User AutoCreate
-
DbGroups
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
- 身份提供者:Azure AD
-
对于用户和密码,键入您的 IdP 用户名和密码。
对于集群 ID 和区域,输入 Amazon Redshift 集群的集群 ID 和 AWS 区域。
对于数据库,输入您为 Amazon Redshift 集群创建的数据库。
提供 IdP 详细信息:
-
IdP 租户
用于 Azure AD 的租户。
-
Azure 客户端密钥
Azure 中的 Amazon Redshift 企业应用程序的客户端密钥。
-
Azure 客户端 ID
Azure 中的 Amazon Redshift 企业应用程序的客户端 ID(应用程序 ID)。
(可选)提供 ODBC 驱动程序用于调用
GetClusterCredentials
API 操作的选项的详细信息:-
DbUser
-
User AutoCreate
-
DbGroups
有关更多信息,请参阅 用于创建数据库用户凭证的 JDBC 和 ODBC 选项。
-
-