跨AWS账户:Redshift用访问密钥连接外部S3桶的方法及疑问
解决方案
你的思路误区
创建嵌入外部账户AK/SK的IAM角色是不可行的——IAM角色依赖信任关系而非硬编码密钥来获取权限,无法直接将外部账户的密钥绑定到你账户下的IAM角色中。
推荐方案:跨账户IAM角色信任(AWS最佳实践)
这是最安全且符合AWS规范的方式,无需暴露长期密钥:
- 联系外部S3账户的管理员,创建一个IAM角色:
- 信任策略配置为允许你的Redshift账户ID(或Redshift集群的服务角色ARN)扮演该角色
- 给该角色附加S3权限策略,允许对目标桶执行
s3:ListBucket、s3:GetObject等必要操作
- 在你的Redshift账户中,给你用于Load Data的IAM角色添加
sts:AssumeRole权限,允许其扮演外部账户创建的那个角色 - 在Redshift的Load Data对话框中,选择你账户下的这个IAM角色,然后在COPY命令的配置中指定外部角色的ARN:
COPY your_table FROM 's3://external-bucket/path/' IAM_ROLE 'arn:aws:iam::外部账户ID:role/外部角色名称' -- 补充你的数据格式等其他参数
临时应急方案:直接使用访问密钥(不推荐)
如果你暂时无法协调外部账户配置跨账户角色,可以直接在Load Data流程中使用已验证的AK/SK:
- 在Load Data对话框的Authentication环节,选择「Access keys」选项
- 输入你持有的外部账户的
ACCESS_KEY_ID和SECRET_ACCESS_KEY - 确认Redshift集群的网络配置允许访问S3(私有子网需配置S3 VPC端点,公网子网需确保集群有公网访问能力)
内容的提问来源于stack exchange,提问作者GettingItDone
相关产品推荐
相关产品推荐

