从Redshift卸载到盒子的S3存储桶

时间:2016-09-01 16:20:30

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

我正在尝试将数据从一个框中的Redshift群集卸载到另一个框中的S3存储桶。 我已设法发送文件。 然而, 由于存储桶拥有者不是我发送的文件的所有者 - 他无法访问它。 由于它是从Redshift直接卸载,我不认为我不能指定条件允许存储桶拥有者正确的权限。

甚至可以实现(无需使用同一帐户从Redshift卸载) 如果是的话 - 如何?

谢谢!

2 个答案:

答案 0 :(得分:2)

(尝试#2 ......)

好的,似乎你的情况是:

  • 您正在从Amazon Redshift进行UNLOAD到属于其他AWS账户的Amazon S3存储桶
  • 该不同AWS账户中的用户希望访问这些文件,但表示他们无法这样做

没有"文件所有者的概念"在Amazon S3中。相反,有:

  • 与Amazon S3中的每个对象关联的权限
  • 适用于特定存储桶的存储桶策略
  • 可应用于用户,组和角色的IAM策略

只要这些权限中至少有一个授予访问权限,而且没有一个权限专门拒绝访问,那么用户将能够访问这些文件。

如果用户报告无法查看文件,请确保已通过上述方法之一授予ListBucketGetObject权限。

答案 1 :(得分:0)

听起来你的情况是:

  • 您已使用UNLOAD命令将数据从Amazon Redshift导出到您拥有的Amazon S3存储桶
  • 您希望将文件的访问权限授予属于其他AWS账户的AWS用户

可以通过多种方式授予访问Amazon S3中对象的权限:

  • 在对象本身上,通过手动设置文件的权限
  • 在IAM(身份和访问管理)中,通过将策略附加到授予访问存储区权限的特定用户 - 但这仅适用于同一AWS账户中的用户
  • 通过定义允许对所有人(公共)或特定AWS用户(包括其他帐户中的用户)访问存储桶内容的存储桶策略 - 用户需要访问内容通过提供凭据,例如使用AWS Command-Line Interface (CLI) aws s3 cp命令。

Bucket Policy选项似乎最适合您的情况。要启用它,请在存储桶上创建一个策略,该策略授予对放置文件的特定目录的访问权限,例如:

{
    "Id": "Policy",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Sid1",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::MY-BUCKET",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/username"
                ]
            }
        },
        {
            "Sid": "Sid2",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::MY-BUCKET/PATH/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/username"
                ]
            }
        }
    ]
}

政策中的ARN是指您授予访问权限的人的帐户ID和用户名。然后,他们可以使用AWS CLI列出存储桶的内容并下载内容。