【问题标题】:Copy to Redshift from another accounts S3 bucket从另一个账户 S3 存储桶复制到 Redshift
【发布时间】:2016-08-12 08:46:30
【问题描述】:

是否可以从一个 AWS 账户 S3 存储桶复制到另一个 AWS 账户 Redshift 集群?我尝试这样做的方法是使用 SQL Workbench 登录到我的 AWS 帐户(Account1)并使用(Account2)的 IAM 用户复制文件,如下所示:

copy my_table (town,name,number)
from 's3://other-s3-account-bucket/fileToCopy.tsv'
credentials 'aws_access_key_id=<other_accounts_aws_access_key_id>;aws_secret_access_key=<other_accounts_aws_secret_access_key>'
delimiter '\t';

经过仔细检查,我知道其他帐户的用户具有 s3 权限。我是否有共享 IAM 用户或设置不同的权限才能执行此操作?

【问题讨论】:

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


    【解决方案1】:

    您需要从其他账户的 S3 存储桶中“提取”数据。

    1. AWS 账户 A 有一个名为 source-bucket-account-a 的 S3 存储桶。
    2. AWS 账户 B 有一个名为 TargetCluster 的 Redshift 集群。
    3. 在存储桶 source-bucket-account-a 上,添加一个存储桶策略,允许 AWS 账户 B 读取文件。

    示例政策:

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "DelegateS3Access",
             "Effect": "Allow",
             "Principal": {
                "AWS": "arn:aws:iam::<account-b-number>:root"
             },
             "Action": [
                "s3:Get*",
                "s3:List*"
             ],
             "Resource": [
                "arn:aws:s3:::source-bucket-account-a",
                "arn:aws:s3:::source-bucket-account-a/*"
             ]
          }
       ]
    }
    

    它与以下内容非常相似: http://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example2.html

    或以下内容: http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_policy-examples.html

    1. 存储桶策略到位后,您可以使用 AWS 账户 B 的凭证运行 copy 命令,因为它拥有 Redshift 集群。在copy 命令中,您可以通过名称source-bucket-account-a 指定存储桶。

    存储桶策略已授予对 AWS 账户 B 的读取权限,因此它可以将数据“拉”到 Redshift。

    【讨论】:

    • 如果我想使用 iam_role 而不是 root access_key 和 access_id 怎么办?账户 A 如何授予对 S3 存储桶 source-bucket-account-a 的 iam_role 的访问权限?
    • 如果 AWS 账户 A 有名为“TEST”的存储桶,而 AWS 账户 B 有名为“TEST”的存储桶怎么办?它怎么知道你指的是哪个?
    • @ChiragAgrawal Principal 属性中的“根”表示法不表示根凭据。它只是表示整个 AWS 账户的符号。使用上述策略,您仍然可以使用 IAM 角色和用户。
    • @jack 两个 AWS 账户不能有同名的 S3 存储桶。 S3 存储桶名称必须是全局唯一的,因此您的情况不会发生。
    猜你喜欢
    • 2020-07-05
    • 2019-06-28
    • 2020-01-03
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 2020-12-28
    • 1970-01-01
    相关资源
    最近更新 更多