授予Redshift Cluster对其他帐户拥有的S3存储桶的访问权限

时间:2017-08-03 01:25:05

标签: amazon-web-services amazon-s3 amazon-redshift

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

但是,如果我尝试将数据卸载到另一个帐户所拥有的S3存储桶中,则它无效。我尝试过这些教程中提到的方法:

但是,我总是得到S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid

以前有人这样做过吗?

1 个答案:

答案 0 :(得分:3)

我让它发挥作用。这就是我所做的:

  • 在帐户A中创建了具有AmazonS3FullAccess政策(用于测试)的 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存储桶的访问权限。