2015-02-09 190 views
5

我试图创建AWS Lambda函数,该函数处理上载到第一个存储桶的文件,然后将其保存到第二个存储桶,然后删除输入文件。AWS Lambda无法删除Amazon S3对象

的问题是,当我试图删除的文件我得到

{ 
    "message": "Access Denied", 
    "code": "AccessDenied", 
    "time": "2015-02-09T22:08:45.926Z", 
    "statusCode": 403, 
    "retryable": false, 
    "retryDelay": 30 
} 

的代码片段,它试图删除文件是

s3.deleteObject({ 
    Bucket: inputBucket, 
    Key: inputKey 
}, function(a, b) { 
    if (a) { 
     console.error("Error on delete"); 
     console.error(a); 
    } else { 
     console.log("Deleted successfully"); 
    } 
}); 

回答

7

可能的原因为什么lambda无法删除文件(S3对象)可能是由于Lambda的执行角色。

的措施来解决这个

  1. 导航到IAM的AWS管理控制台
  2. 查找所使用(或创建)的拉姆达的IAM角色(如果它是默认情况下它会lambda_exec_role )
  3. 进入附加角色策略 - >自定义策略,并添加下面的IAM政策文件

{ 
    "Statement": [ 
    { 
     "Sid": "Stmt1423535846414", 
     "Action": [ 
     "s3:DeleteObject" 
     ], 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::*" 
    } 
    ] 
} 
+2

或者最好是“Resource”:“arn:aws:s3 ::: firstbucket/*” – jarmod 2015-10-13 19:05:03

+0

什么是Sid?我在哪里可以得到它? – 2017-11-10 08:52:27

+0

声明ID来分类/标识每个IAM语句。更像是一个友好的名字“for-s3-access-for-app1” – 2017-11-10 16:40:21

0

我在inputKey中奇怪的字符和空格有问题。尝试一个简单的名字。