带有 iam_role 的 AWS Redshift COPY

Posted

技术标签:

【中文标题】带有 iam_role 的 AWS Redshift COPY【英文标题】:AWS Redshift COPY with iam_role 【发布时间】:2018-03-06 20:29:07 【问题描述】:

我使用 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】:

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

首先创建一个普通 IAM 角色不是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/*"]
    
  ]

【讨论】:

以上是关于带有 iam_role 的 AWS Redshift COPY的主要内容,如果未能解决你的问题,请参考以下文章

AWS 红移卸载附加时间戳

无法使用 aws nodejs sdk 创建 Redshift 表

如何处理 AWS Redshift 卸载命令中的引用值?

红移卸载问题

Terraform:ECS 服务 - InvalidParameterException

如何使用带有 UNLOAD 语句的 DataGrip SQL 格式化程序