我真的很挣扎如何使用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]
-----------------------------------------------;
有人能给我一些线索或建议吗?
非常感谢!
答案 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=mybucket
和prefix=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)
文档:https://docs.aws.amazon.com/en_us/redshift/latest/dg/c_loading-encrypted-files.html COPY命令会自动识别并加载使用SSE-S3和SSE-KMS加密的文件。
检查kms:关于您的规则的钥匙|角色
如果文件来自EMR,请检查S3的安全配置。