【问题标题】:Give a Redshift Cluster access to S3 bucket owned by another account授予 Redshift Cluster 对另一个账户拥有的 S3 存储桶的访问权限
【发布时间】:2017-08-03 01:25:05
【问题描述】:

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

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

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

以前有人做过吗?

【问题讨论】:

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


    【解决方案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。但是,如果您要创建存储桶策略,则需要它)。
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多