Amazon Redshift COPY始终返回S3ServiceException:拒绝访问,状态403

时间:2016-08-03 07:24:45

标签: amazon-s3 amazon-redshift

我真的很挣扎如何使用COPY命令从Amazon S3存储桶到Redshift进行数据传输。

到目前为止,我创建了一个IAM用户和AmazonS3ReadOnlyAccess'政策已分配。但是,当我调用COPY命令时,会始终返回“拒绝访问错误”。

  

复制my_table来自' //s3.ap-northeast-2.amazonaws.com/mybucket/myobject'凭证' aws_access_key_id =< ...&gt ;; aws_secret_access_key =< ...>'地区' AP-东北-2'分隔符' |';

错误:

  

亚马逊无效操作:S3ServiceException:拒绝访问,状态403,错误AccessDenied,Rid EB18FDE35E1E0CAB,ExtRid,CanRetry 1
  详情:----------------------------------------------- <登记/>     错误:S3ServiceException:拒绝访问,状态403,错误AccessDenied,Rid EB18FDE35E1E0CAB,ExtRid,CanRetry 1     代码:8001     context:list bucket = s3.ap-northeast-2.amazonaws.com prefix = mybucket / myobject     查询:1311463     location:s3_utility.cpp:542     过程:padbmaster [pid = 4527]
    -----------------------------------------------;

有人能给我一些线索或建议吗?

非常感谢!

4 个答案:

答案 0 :(得分:2)

从S3路径中删除端点s3.ap-northeast-2.amazonaws.com

COPY my_table
FROM 's3://mybucket/myobject'
CREDENTIALS ''
REGION 'ap-northeast-2'
DELIMITER '|'
;

(请参阅文档中的examples。)虽然Access Denied错误肯定会产生误导,但返回的消息会提示一些错误:

bucket=s3.ap-northeast-2.amazonaws.com
prefix=mybucket/myobject

我们希望看到bucket=mybucketprefix=myobject

答案 1 :(得分:0)

您的redshift群集角色无权访问S3存储桶。确保您用于redshift的角色可以访问存储桶,并且存储桶没有阻止访问的策略

答案 2 :(得分:0)

您可以使用以下命令将s3文件对象的acl设置为bucket-owner-full-control:

 aws s3api put-object-acl --acl bucket-owner-full-control --bucket some-bucket 
 --key path/to/myobject

答案 3 :(得分:0)

  1. 检查铲斗的刻印。

文档:https://docs.aws.amazon.com/en_us/redshift/latest/dg/c_loading-encrypted-files.html COPY命令会自动识别并加载使用SSE-S3和SSE-KMS加密的文件。

  1. 检查kms:关于您的规则的钥匙|角色

  2. 如果文件来自EMR,请检查S3的安全配置。