是否可以从一个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用户或设置不同的权限才能执行此操作?
答案 0 :(得分:6)
您需要从其他帐户的S3存储桶中“提取”数据。
source-bucket-account-a
的S3存储桶。TargetCluster
的Redshift cluser。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
copy
命令,因为它拥有Redshift集群。在copy
命令中,您可以使用名称source-bucket-account-a
指定存储区。存储桶策略已授予对AWS账户B的读取权限,因此可以将数据“拉”到Redshift中。