给Redshift集群访问另一个帐户所拥有的S3存储区
问题描述:
我正尝试使用iam_role将数据从Redshift卸载到S3。只要我将数据卸载到与Redshift集群相同的帐户所拥有的S3存储桶中,unload命令就可以正常工作。给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
有没有人这样做呢?
答
我得到它的工作。这里就是我所做的:
- 创建一个IAM角色在具有
AmazonS3FullAccess
策略(测试) - 帐户A推出了亚马逊红移集群在帐户A
- 加载数据到红移集群
- 测试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
作用已经跟我红移集群关联。此政策授予角色(位于不同的AWS账户)对此S3存储桶的访问权限。
哇!我不能相信你会在10分钟内完成所有这些。 –
我在做同样的事情,除了“Action”:“s3:*”'我有''Action“:”s3:PutObject“'。看到你的回答后,我开始逐个添加角色的权限。最后它在''Action'中工作:[“s3:PutObject”,“s3:List *”]'。显然,Redshift也需要列表权限来查看这些项目是否已经存在于存储桶中。非常感谢您的回答。 –