通过连接到VPN(EC2)的lambda中的VPC端点连接S3存储桶

时间:2017-01-05 10:18:52

标签: amazon-web-services amazon-s3 amazon-ec2 lambda amazon-vpc

我正在尝试通过AWS lambda中的代码从S3中的存储桶中检索文件。然后,相同的代码将检索并插入EC2上托管的mongoDB中的文件中的相应数据。

遇到问题:我无法从桶中读取对象。实例刚刚在日志控制台上超时。

对于VPC EndPoints,我允许完全访问作为策略,修改了路由表(删除了到Internet网关的路由)并更改了限制出站流量的安全组(类型列表HTTPS和HTTP和目标作为前缀列表ID对于端点服务)

至于IAM角色,我设置了以下策略:AmazonS3FullAccess,AdministratorAccess和AWSLambdaExecute。

此外,我已添加以下内联策略以限制通过特定vpc端点的访问

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": "s3:*",
        "Effect": "Deny",
        "Resource": [
            "arn:aws:s3:::my_secure_bucket",
            "arn:aws:s3:::my_secure_bucket/*"
        ],
        "Condition": {
            "StringNotEquals": {
                "aws:sourceVpce": "vpce-1a2b3c4d"
            }
        }
    }
]

}

S3和EC2都位于US-WEST-2地区。 这是我处理S3的lambda代码的一部分:

AmazonS3Client s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());       
         for (S3EventNotificationRecord record : s3event.getRecords()) {
                String srcKey = record.getS3().getObject().getKey().replace('+', ' ');
                srcKey = URLDecoder.decode(srcKey, "UTF-8");

                String srcBucket = record.getS3().getBucket().getName();
                context.getLogger().log("found id: " + srcBucket+" "+srcKey);

                // retrieve s3 object
                S3Object object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));   
                //My function times out while performing the above line!

                InputStream objectData = object.getObjectContent();
           }   

0 个答案:

没有答案