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