【问题标题】:Amazon Redshift COPY always return S3ServiceException:Access Denied,Status 403Amazon Redshift COPY 始终返回 S3ServiceException:Access Denied,Status 403
【发布时间】:2016-12-08 18:52:59
【问题描述】:

我真的很纠结如何使用 COPY 命令将数据从 Amazon S3 存储桶传输到 Redshift。

到目前为止,我创建了一个 IAM 用户并分配了“AmazonS3ReadOnlyAccess”策略。但是当我像下面这样调用 COPY 命令时,总是返回 Access Denied Error。

从 's3://s3.ap-northeast-2.amazonaws.com/mybucket/myobject' 凭证复制 my_table 'aws_access_key_id=<...>;aws_secret_access_key=<...>' REGION'ap-northeast -2' 分隔符'|';

错误:

Amazon 无效操作:S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid EB18FDE35E1E0CAB,ExtRid,CanRetry 1
详情:---------------------------------------------------------- 错误:S3ServiceException:访问被拒绝,状态 403,错误访问被拒绝,Rid EB18FDE35E1E0CAB,ExtRid,CanRetry 1 代码:8001 上下文:列表存储桶=s3.ap-northeast-2.amazonaws.com 前缀=mybucket/myobject 查询:1311463 位置:s3_utility.cpp:542 进程:padbmaster [pid=4527]
-----------------------------------------------------------;

有没有人可以给我一些线索或建议?

非常感谢!

【问题讨论】:

    标签: amazon-s3 amazon-redshift


    【解决方案1】:

    从 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

    【讨论】:

    • 非常感谢!!你太有帮助了!
    【解决方案2】:
    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 的安全配置。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-03
        • 2012-05-17
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-26
        相关资源
        最近更新 更多