S3到Redshift:拒绝访问复制

时间:2016-11-10 10:00:54

标签: amazon-web-services amazon-s3 amazon-redshift vpc

我们以前曾经使用COPY命令将文件从s3复制到Redshift,而不是从没有特定策略的存储桶中复制文件。

COPY schema.table_staging     
FROM 's3://our-bucket/X/YYYY/MM/DD/'     
CREDENTIALS 'aws_access_key_id=xxxxxx;aws_secret_access_key=xxxxxx'     
CSV     
GZIP     
DELIMITER AS '|'     
TIMEFORMAT 'YYYY-MM-DD HH24:MI:SS';  

由于我们需要提高S3存储桶的安全性,因此我们添加了一项策略来授权来自我们的VPC(我们用于Redshift群集的VPC)或特定IP地址的连接。

{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
    {
        "Sid": "DenyAllExcept",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::our-bucket/*",
            "arn:aws:s3:::our-bucket"
        ],
        "Condition": {
            "StringNotEqualsIfExists": {
                "aws:SourceVpc": "vpc-123456789"
            },
            "NotIpAddressIfExists": {
                "aws:SourceIp": [
                    "12.35.56.78/32"
                ]
            }
        }
    }
]
}

此政策适用于使用AWS CLI或boto Python库从EC2,EMR或我们的特定地址访问文件。

以下是Redshift上的错误:

ERROR: S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid xxxxxx,CanRetry 1
Détail : 
-----------------------------------------------
error:  S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid xxxxxx,CanRetry 1
code:      8001
context:   Listing bucket=our-bucket prefix=X/YYYY/MM/DD/
query:     1587954
location:  s3_utility.cpp:552
process:   padbmaster [pid=21214]
-----------------------------------------------

如果你能帮助我们,请提前多多谢谢,

达明

ps:这个问题与这个问题非常相似:Copying data from S3 to Redshift - Access denied

1 个答案:

答案 0 :(得分:1)

您需要使用Redshift的“增强型VPC路由”功能。来自文档here

  1.   

    当您使用Amazon Redshift增强型VPC路由时,Amazon Redshift会通过您的Amazon VPC强制您的群集与数据存储库之间的所有COPY和UNLOAD流量。

  2.   

    如果未启用增强型VPC路由,则Amazon Redshift会将流量通过Internet 路由,包括流向AWS网络中其他服务的流量。

  3.   

    对于与群集位于同一区域的Amazon S3存储桶的流量,您可以创建VPC端点以将流量直接定向到存储桶。