AWS Redshift Serverless IAM Identity Center认证异常求助
IAM Identity Center认证Redshift Query Editor V2失败排查求助
已完成的配置步骤
- 在Redshift Serverless工作组同区域创建IAM Identity Center
- 创建Redshift Serverless实例(尝试过私有/公网可访问工作组,部署在公网子网)
- 通过Redshift控制台创建IAM Identity Center应用并启用Query Editor V2应用
- 添加包含自身用户的IAM IdC组(该组拥有管理员权限)
- 以超级用户身份在Redshift中创建身份提供商,SQL语句如下:
CREATE IDENTITY PROVIDER "redshift-idc-app" TYPE AWSIDC NAMESPACE 'awsidc' APPLICATION_ARN 'arn:aws:sso::123456789012:application/ssoins-12345f67fe123d4/apl-a0b0a12dc123b1a4' IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole';
已通过SELECT * FROM SVV_IDENTITY_PROVIDERS;确认身份提供商创建成功。
该IAM角色的信任关系配置:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "redshift-serverless.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:SetContext" ] } ] }
角色权限配置:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "redshift:DescribeQev2IdcApplications", "redshift-serverless:ListNamespaces", "redshift-serverless:ListWorkgroups" ], "Effect": "Allow", "Resource": "*", "Sid": "AllowRetrievalOfRSMetadata" }, { "Action": [ "sso:DescribeApplication", "sso:DescribeInstance" ], "Effect": "Allow", "Resource": [ "arn:aws:sso::597598337678:application/ssoins-69876c8b1312f277/*", "arn:aws:sso:::instance/ssoins-69876c8b1312f277" ], "Sid": "AllowCreationOfIdPProvider" } ] }
- 为IAM Identity Center连接应用中指定的组,在Redshift中创建对应命名空间的角色:
CREATE ROLE <idcnamespace:rolename>; -- 验证角色存在 SELECT * FROM SVV_ROLES;
并为该角色分配数据库schema权限(已预先创建schema):
GRANT USAGE ON SCHEMA <schema> TO ROLE "<idcnamespace:rolename>"; GRANT SELECT ON ALL TABLES IN SCHEMA <schema> TO ROLE "<idcnamespace:rolename>";
错误现象
登录Query Editor V2时提示Databases couldn't be listed,CloudTrail事件显示:
{ "errorCode": "InternalServerErrorException", "requestParameters": { "path": "/cluster/connect/", "data": "***", "version": "1.001" }, "responseElements": { "result": false, "code": "ContainerStateException", "error": "Cannot get container for user AROAYWI5C7KHET6MY5CL5:<USERNAME>", "message": "Cannot get container for user AROAYWI5C7KHET6MY5CL5:<USERNAME>" } }
更新:同一配置下错误变为ISACGetSessionException,CloudTrail事件显示:
"responseElements": { "result": false, "code": "ISACGetSessionException", "error": "Cannot get session information from ISAC", "message": "Cannot get session information from ISAC" }
排查建议
- 检查账号一致性:创建身份提供商时使用的账号是
123456789012,但IAM角色权限中SSO资源的账号是597598337678,两者必须完全一致,否则无法正确访问SSO资源。 - 补充IAM角色权限:现有权限缺少获取SSO会话和连接Redshift Serverless的关键权限,建议添加以下策略语句:
{ "Effect": "Allow", "Action": [ "sso:GetApplicationAssignment", "sso:GetSession", "redshift-serverless:Connect" ], "Resource": "*" } - 确认Redshift角色命名规则:创建的Redshift角色必须严格遵循
NAMESPACE:IdC组名格式,这里NAMESPACE是awsidc,所以角色名应为awsidc:你的IdC组名称(需用双引号包裹,因为包含冒号),例如CREATE ROLE "awsidc:AdminGroup";。 - 检查工作组网络配置:
- 若为私有工作组,需确保Query Editor V2通过VPC端点访问Redshift Serverless,且安全组允许VPC端点的流量;
- 若为公网工作组,需确认安全组允许Redshift服务的入站流量,且工作组的公网访问开关已开启。
- 验证IAM Identity Center应用关联:在Redshift控制台创建IdC应用时,需确保正确关联了目标Redshift Serverless工作组,未关联会导致无法识别可用数据库资源。
- 核对角色信任关系:确认IAM角色的信任关系中,
redshift-serverless.amazonaws.com服务主体已被授权sts:AssumeRole和sts:SetContext动作,当前配置已包含,但可重新检查无拼写错误。
内容的提问来源于stack exchange,提问作者ETisREAL
相关产品推荐
相关产品推荐

