授予 Redshift Cluster 对另一个账户拥有的 S3 存储桶的访问权限
Posted
技术标签:
【中文标题】授予 Redshift Cluster 对另一个账户拥有的 S3 存储桶的访问权限【英文标题】:Give a Redshift Cluster access to S3 bucket owned by another account 【发布时间】:2017-08-03 01:25:05 【问题描述】:我正在尝试使用 iam_role 将数据从 Redshift 卸载到 S3。只要我将数据卸载到与 Redshift 集群相同的帐户所拥有的 S3 存储桶,卸载命令就可以正常工作。
但是,如果我尝试将数据卸载到另一个帐户拥有的 S3 存储桶中,则它不起作用。我已经尝试过这些教程中提到的方法:
Tutorial: Delegate Access Across AWS Accounts Using IAM Roles Example: Bucket Owner Granting Cross-Account Bucket Permissions但是,我总是得到S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid
以前有人做过吗?
【问题讨论】:
【参考方案1】:我让它工作了。这是我所做的:
在具有AmazonS3FullAccess
策略的账户 A 中创建了一个 IAM 角色(用于测试)
在账户 A 中启动了一个 Amazon Redshift 集群
已将数据加载到 Redshift 集群中
测试 1: 卸载到帐户 A 中的存储桶 -- 成功
测试 2: 卸载到帐户 B 中的存储桶 -- 失败
向账户 B 中的存储桶添加了存储桶策略(见下文)
测试 3: 卸载到帐户 B 中的存储桶 -- 成功!
这是我使用的存储桶策略:
"Id": "Policy11",
"Version": "2012-10-17",
"Statement": [
"Sid": "PermitRoleAccess",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
],
"Principal":
"AWS": [
"arn:aws:iam::123456789012:role/Redshift-loader"
]
]
Redshift-loader
角色已与我的 Redshift 集群关联。此策略授予角色(位于不同 AWS 账户中)访问此 S3 存储桶的权限。
【讨论】:
哇!我不敢相信你在 10 分钟内完成了所有这些工作。 我在做同样的事情,除了"Action": "s3:*"
我有"Action": "s3:PutObject"
。看到您的回答后,我开始为角色一一添加权限。最后它在"Action": ["s3:PutObject", "s3:List*"]
工作。显然,Redshift 还需要列表权限来查看存储桶中是否已经存在这些项目。非常感谢您的回答。
@John Rotenstein 我也在做同样的事情,但是当我创建策略时,我收到此错误:“此策略包含以下错误:已禁止字段 Principal”。有什么理由让我得到这个?
@dotore 请创建一个新问题,而不是提出一个问题作为对旧问题的评论。 (顺便说一句,如果您将策略放在 IAM 实体(例如用户或角色)上,则不需要 Principal
。但是,如果您要创建存储桶策略,则需要它)。以上是关于授予 Redshift Cluster 对另一个账户拥有的 S3 存储桶的访问权限的主要内容,如果未能解决你的问题,请参考以下文章
ALTER SCHEMA NAME 是不是会影响对 Redshift 中架构的权限授予