从另一个帐户S3存储桶复制到Redshift

时间:2016-04-19 22:48:47

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

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

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用户或设置不同的权限才能执行此操作?

1 个答案:

答案 0 :(得分:6)

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

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

    {
       "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指定存储区。
    2. 存储桶策略已授予对AWS账户B的读取权限,因此可以将数据“拉”到Redshift中。