Aws lambda 在AWS中获取bucket访问错误

Aws lambda 在AWS中获取bucket访问错误,aws-lambda,Aws Lambda,每当一个项目上传到S3上时,我想执行一个lambda函数。调用了我的函数,但似乎存在访问错误。错在哪里 我已经定义了一个角色lambdas3。它的可信实体是lambda。它具有名为s3lambda Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1509114309000", "Effect": "Allow", "Action": [

每当一个项目上传到S3上时,我想执行一个lambda函数。调用了我的函数,但似乎存在访问错误。错在哪里

我已经定义了一个角色
lambdas3
。它的可信实体是lambda。它具有名为
s3lambda

Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1509114309000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mybucketname"
            ]
        },
        {
            "Sid": "Stmt1509114340000",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}
这是lambda函数

var aws = require('aws-sdk');
var s3 = new aws.S3();

exports.handler = function(event,context){
    var bucket = event.Records[0].s3.bucket.name;
    var key = decodeURIComponent(
        event.Records[0].s3.object.key.replace(/\+/g,''));
    var params = {
      Bucket:bucket,
      Key:key
    };
    s3.getObject(params,function(err,data){
        if(err){
            console.log(err);
            context.fail('Error getting object'+
            key+' from bucket'+bucket);
        }else{
            context.succeed('hello '+data.Body);
        }

    });
};

该函数在执行过程中扮演
lambdas3
角色。

您需要在GetObject策略中的资源S3 ARN中添加/*。S3:GetObject适用于S3的对象ARN。例如:

arn:aws:s3:::mybucketname/*

您需要在GetObject策略中的资源S3 ARN中添加/*。S3:GetObject适用于S3的对象ARN。例如:

arn:aws:s3:::mybucketname/*

如果要对bucket中的所有对象授予权限,则必须授予完全权限(参考资料中的“*”)。请在下面找到更新策略

Version:“2012-10-17”,
“声明”:[
{
“Sid”:“Stmt1509114309000”,
“效果”:“允许”,
“行动”:[
“s3:GetObject”
],
“资源”:[
“arn:aws:s3:::mybucketname/*”
]
},
{
“Sid”:“Stmt1509114340000”,
“效果”:“允许”,
“行动”:[
“日志:CreateLogGroup”,
“日志:CreateLogStream”,
“日志:PutLogEvents”
],
“资源”:[
“arn:aws:日志:**”
]
}
]

}
如果您想对bucket中的所有对象授予权限,则必须授予完全权限(“*”在参考资料中)。请查找下面的更新策略

Version:“2012-10-17”,
“声明”:[
{
“Sid”:“Stmt1509114309000”,
“效果”:“允许”,
“行动”:[
“s3:GetObject”
],
“资源”:[
“arn:aws:s3:::mybucketname/*”
]
},
{
“Sid”:“Stmt1509114340000”,
“效果”:“允许”,
“行动”:[
“日志:CreateLogGroup”,
“日志:CreateLogStream”,
“日志:PutLogEvents”
],
“资源”:[
“arn:aws:日志:**”
]
}
]

}
这是IAM的角色,而不是bucket策略。它不允许访问“public”。@Mark你是对的。我没注意到。更新了应答器这是IAM的角色,不是bucket策略。它不允许访问“public”。@Mark你是对的。我没注意到。更新了答案