2015-02-09 189 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中奇怪的字符和空格有問題。嘗試一個簡單的名字。