我使用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文件的访问权限,我应该能够通过添加另一个访问角色来修复?但这不应该对任何人开放吗?
任何帮助将不胜感激。
S3ServiceException:Access Denied
错误表示角色没有足够的权限来访问Amazon S3。
首先创建一个普通的IAM角色(不是Service-Linked Role)。
然后,在所需的存储桶上为ListBucket
和GetObject
的角色分配权限,例如:
{
"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/*"]
}
]
}