给Redshift集群访问另一个帐户所拥有的S3存储区

问题描述:

我正尝试使用iam_role将数据从Redshift卸载到S3。只要我将数据卸载到与Redshift集群相同的帐户所拥有的S3存储桶中,unload命令就可以正常工作。给Redshift集群访问另一个帐户所拥有的S3存储区

但是,如果我尝试将数据卸载到另一个帐户所拥有的S3存储桶中,则不起作用。我曾尝试在这些教程中提到的方法:

不过,我总是得到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存储桶的访问权限。

+0

哇!我不能相信你会在10分钟内完成所有这些。 –

+1

我在做同样的事情,除了“Action”:“s3:*”'我有''Action“:”s3:PutObject“'。看到你的回答后,我开始逐个添加角色的权限。最后它在''Action'中工作:[“s3:PutObject”,“s3:List *”]'。显然,Redshift也需要列表权限来查看这些项目是否已经存在于存储桶中。非常感谢您的回答。 –