AWS跨账户调用Redshift Data API提示集群不存在问题求助
根因说明
Secrets Manager中存储的Redshift凭证仅包含数据库用户名、密码等访问凭证,不会自动携带集群所属的AWS账户ID信息。Redshift Data API在未指定集群所属账户的前提下,默认会在发起API调用的当前账户(即账户B)下查找对应标识符的集群,自然无法定位到账户A下的资源,触发本次报错。
排查修复步骤
- 基础信息校验
先确认三类信息无错误:- 账户A下Redshift集群所属区域,和你初始化RedshiftData客户端时指定的
eu-west-2完全一致 - 代码中填写的
ClusterIdentifier和账户A下Redshift集群的官方标识符完全匹配,无拼写、大小写错误 - 目标Redshift集群当前处于可用状态,未被暂停、删除或归档
- 账户A下Redshift集群所属区域,和你初始化RedshiftData客户端时指定的
- 补充跨账户必填参数
Redshift Data API的executeStatement接口针对跨账户访问场景,需额外添加ClusterOwnerAccount参数,参数值为Redshift集群所属账户A的12位AWS账户ID,修改后的参数示例如下:const params : aws.RedshiftData.ExecuteStatementInput = { ClusterIdentifier: '<clusteridentifier>', ClusterOwnerAccount: '<账户A的12位AWS账户ID>', // 新增该行参数 Database: 'products', SecretArn: 'arn:aws:secretsmanager:<region>:<accountNo>:secret:<secretname>', Sql: `select * from product_table where id = xxx`, StatementName: 'statement-name', WithEvent: true }; - 权限配置核对
除已验证的Secrets Manager访问权限外,还需确认两类权限配置正确:- 账户B的Lambda执行角色IAM策略中,已添加
redshift-data:ExecuteStatement、redshift-data:GetStatementResult等相关操作的允许规则 - 账户A的Redshift集群资源策略已允许账户B的Lambda角色通过Redshift Data API访问集群;若集群为私有部署,还需确认Lambda与集群之间的网络连通性正常(如VPC对等连接、中转网关配置正确)
- 账户B的Lambda执行角色IAM策略中,已添加
- 功能验证
调整代码后重新调用接口,确认SQL可正常执行返回结果;若仍有报错,可根据返回的新错误信息针对性排查权限、网络类问题。
内容的提问来源于stack exchange,提问作者jimmyc
相关产品推荐
相关产品推荐

