AWS Redshift使用iam_role进行COPY

时间:2018-03-06 20:29:07

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

我使用AWS Key ID和AWS Secret Key已经使用Redshift一段时间,并且知道我可以使用IAM Role,所以我尝试了这个示例COPY命令:

copy users from 's3://awssampledbuswest2/tickit/allusers_pipe.txt'
credentials 'aws_iam_role=arn:aws:iam::xxxxxxxxxxx:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift' delimiter '|' region 'us-west-2';

但是这导致了以下错误:

S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid 52F83B8923B08731,ExtRid uNsiJ1Xjk2WVufRo8/kfa7AxD1l82g7Dee35qr3TdhrFidpGoUSJiAx5yG7lh/gRKqG7Mkd1Tp4=,CanRetry 1

不太确定如何解决这个问题。鉴于错误消息,我猜我没有S3文件的访问权限,我应该能够通过添加另一个访问角色来修复?但这不应该对任何人开放吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

S3ServiceException:Access Denied错误表明该角色没有足够的权限来访问Amazon S3。

首先创建正常IAM角色 a Service-Linked Role)。

然后,为所需存储桶上的ListBucketGetObject角色分配权限,例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::my-bucket"]
    },
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::my-bucket/*"]
    }
  ]
}