从补丁 198 开始,Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息,请参阅博客文章
使用身份增强 IAM 角色会话连接到 Redshift
您可以使用 IAM Identity Center 提供对 Amazon Redshift 集群和无服务器工作组的联合访问权限。这种方法可让用户使用其 Identity Center 凭证进行身份验证。
Amazon Redshift 提供 GetIdentityCenterAuthToken API 操作来生成包含用户身份信息的授权令牌。这些 API 同时可用于预置集群和无服务器工作组。通过令牌,可以使用现有的 Identity Center 设置对 Amazon Redshift 数据库进行无缝单点登录访问。
先决条件
在将 Identity Center 身份验证与 Amazon Redshift 结合使用之前,请确保您具备以下各项:
-
Identity Center 设置:您的账户必须使用用户身份和相应的应用程序分配配置了 IAM Identity Center。有关设置说明,请参阅设置 IAM Identity Center。
重要
如果要连接到 Redshift,则必须使用 redshift:connect 范围。
-
身份增强凭证:您的应用程序必须使用包含嵌入式用户身份信息的身份增强凭证。有关更多信息,请参阅使用身份增强 IAM 角色会话。
-
IAM 权限:您的 IAM 角色或用户必须具有调用
GetIdentityCenterAuthTokenAPI 和访问指定集群或工作组的权限。所需权限:-
对于预置集群:对集群 ARN(格式:
arn:aws:redshift:region:account:cluster:cluster-name)具有redshift:GetIdentityCenterAuthToken -
对于无服务器工作组:对工作组 ARN(格式:
arn:aws:redshift-serverless:region:account:workgroup/workgroup-name)具有redshift-serverless:GetIdentityCenterAuthToken
-
-
兼容的驱动程序:使用支持 Identity Center 授权令牌的 Amazon Redshift JDBC 或 ODBC 驱动程序:
-
JDBC 驱动程序:请参阅安装和配置 Amazon Redshift JDBC 驱动程序版本 2.0
-
ODBC 驱动程序:请参阅安装和配置 Amazon Redshift ODBC 驱动程序版本 2.0
-
Identity Center 身份验证的工作原理
Amazon Redshift 的 Identity Center 身份验证使用以下工作流程:
-
您的应用程序使用包含嵌入式用户身份信息的身份增强凭证调用
GetIdentityCenterAuthTokenAPI。 -
Amazon Redshift 验证 Identity Center 身份,并生成范围限定于特定集群或工作组的加密授权令牌。请参阅示例 IAM 策略。
-
您的应用程序使用此令牌连接到指定的 Amazon Redshift 集群或工作组。
-
Amazon Redshift 数据面板验证令牌,并根据 Identity Center 用户在 Identity Center 应用程序中的权限来授予访问权限。
重要
此 API 需要身份增强凭证。有关更多信息,请参阅使用身份增强 IAM 角色会话。
如果您在没有身份增强凭证的情况下调用 API,则会收到 UnsupportedOperationFault 错误。
GetIdentityCenterAuthToken API 操作
Amazon Redshift 提供了两个单独的 GetIdentityCenterAuthToken API 操作:一个用于预置集群,另一个用于无服务器工作组。这两个操作具有相同的名称,但接受的参数因目标资源类型而异。
适用于预置集群的 GetIdentityCenterAuthToken
对于预置的 Amazon Redshift 集群,请在 Amazon Redshift 服务中使用 GetIdentityCenterAuthToken API 来生成授权令牌。
请求语法
{ "ClusterIds": [ "string" ] }
请求参数
- ClusterIds
-
令牌将有权访问的 Amazon Redshift 集群标识符的列表。该令牌只能用于对在此列表中指定的集群进行身份验证。
类型:字符串数组
长度约束:最少 1 个项目。最多 20 个项目。
是否必需:是
CLI 示例
示例:获取单个集群的授权令牌
aws redshift get-identity-center-auth-token \ --cluster-ids my-redshift-cluster
示例:获取多个集群的授权令牌
aws redshift get-identity-center-auth-token \ --cluster-ids my-cluster-1 my-cluster-2
适用于无服务器工作组的 GetIdentityCenterAuthToken
对于 Amazon Redshift 无服务器工作组,请在 Amazon Redshift Serverless 服务中使用 GetIdentityCenterAuthToken API 来生成授权令牌。
请求语法
{ "WorkgroupNames": [ "string" ] }
请求参数
- WorkgroupNames
-
令牌将有权访问的 Amazon Redshift Serverless 工作组名称的列表。该令牌只能用于对在此列表中指定的工作组进行身份验证。
类型:字符串数组
长度约束:最少 1 个项目。最多 20 个项目。
是否必需:是
CLI 示例
示例:获取单个工作组的授权令牌
aws redshift-serverless get-identity-center-auth-token \ --workgroup-names my-workgroup
示例:获取多个工作组的授权令牌
aws redshift-serverless get-identity-center-auth-token \ --workgroup-names workgroup-1 workgroup-2
响应语法
这两个 API 都返回相同的响应结构:
{ "AuthorizedToken": "string", "ExpirationTime": "timestamp" }
响应参数
- AuthorizedToken
-
一个加密的授权令牌,其中包含用户身份信息以及已授权集群或工作组的列表。此令牌应被视为敏感数据。
类型:字符串
- ExpirationTime
-
令牌到期的日期和时间(UTC 时间)。令牌自生成之时起 1 小时内有效。
类型:时间戳
响应示例
{ "AuthorizedToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyQGV4YW1wbGUuY29tIiwiaWF0IjoxNjQwOTk1MjAwLCJleHAiOjE2NDA5OTg4MDAsImNsdXN0ZXJzIjpbIm15LWNsdXN0ZXIiXX0...", "ExpirationTime": "2024-01-01T12:00:00Z" }
驱动程序集成
Amazon Redshift 驱动程序通过直接使用令牌来支持 Identity Center 身份验证:
直接使用令牌
调用 GetIdentityCenterAuthToken API 以获取令牌后,请将 IdpTokenAuthPlugin 与 SUBJECT_TOKEN 令牌类型结合使用。
连接配置:
plugin_name = com.amazon.redshift.plugin.IdpTokenAuthPlugin token_type = SUBJECT_TOKEN token = {encrypted_token_from_api_response}
有关 Identity Center 身份验证插件和驱动程序配置的详细信息,请参阅连接到 Amazon Redshift 集群。
Java 代码示例
使用 Identity Center 身份验证进行连接的 Java 代码示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; // Get token from GetIdentityCenterAuthToken API String token = "your_encrypted_token_from_api_response"; // Configure connection properties Properties props = new Properties(); props.setProperty("user", "your_username"); props.setProperty("plugin_name", "com.amazon.redshift.plugin.IdpTokenAuthPlugin"); props.setProperty("token_type", "SUBJECT_TOKEN"); props.setProperty("token", token); // Connect to Redshift String url = "jdbc:redshift://your-cluster.region.redshift.amazonaws.com:5439/your_database"; try (Connection conn = DriverManager.getConnection(url, props)) { // Use connection System.out.println("Connected successfully!"); } catch (SQLException e) { e.printStackTrace(); }
IAM 策略要求
要将 Identity Center 身份验证与 Amazon Redshift 结合使用,除了连接到 Amazon Redshift 集群和工作组所需的标准权限外,还需要特定 IAM 权限。
API 权限
对于预置集群,增强的 IAM 角色会话必须:
-
对集群 ARN(格式:
arn:aws:redshift:region:account:cluster:cluster-name)具有redshift:GetIdentityCenterAuthToken
对于无服务器工作组,增强的 IAM 角色会话必须:
-
对工作组 ARN(格式:
arn:aws:redshift-serverless:region:account:workgroup/workgroup-name)具有redshift-serverless:GetIdentityCenterAuthToken
示例 IAM policies
预置集群的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "redshift:GetIdentityCenterAuthToken" ], "Resource": [ "arn:aws:redshift:us-east-1:123456789012:cluster:my-cluster" ] } ] }
无服务器工作组的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "redshift-serverless:GetIdentityCenterAuthToken" ], "Resource": [ "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/my-workgroup" ] } ] }
多个资源的策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "redshift:GetIdentityCenterAuthToken" ], "Resource": [ "arn:aws:redshift:*:123456789012:cluster/*" ] }, { "Effect": "Allow", "Action": [ "redshift-serverless:GetIdentityCenterAuthToken" ], "Resource": [ "arn:aws:redshift-serverless:*:123456789012:workgroup/*" ] } ] }
区域可用性
Identity Center 身份验证在以下 Amazon 区域中可用:
-
商业区域:所有支持的 Amazon Redshift 区域
-
Amazon GovCloud:在 us-gov-east-1 和 us-gov-west-1 中可用
-
中国区域:在 cn-north-1 和 cn-northwest-1 中可用
注意
在初始推出期间,功能可用性可能会有所不同。