AWS Lambda无法删除Amazon S3对象

时间:2015-02-09 22:17:55

标签: amazon-web-services amazon-s3 aws-lambda

我正在尝试创建一个AWS Lambda函数,该函数处理上传到第一个存储桶的文件,然后将其保存到第二个存储桶,然后删除输入文件。

问题在于,当我试图删除我正在获取的文件时

{
  "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");
    }
});

3 个答案:

答案 0 :(得分:8)

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

解决此问题的步骤

  1. 导航到AWS管理控制台中的IAM
  2. 查找为lambda使用(或创建)的IAM角色(如果它是默认值,则为lambda_exec_role)
  3. 转到附加角色政策 - >自定义策略并添加以下IAM策略文档

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

答案 1 :(得分:0)

我在inputKey中遇到了奇怪的字符和空格。尝试使用简单的名称。

答案 2 :(得分:0)

转到IAM -> Roles -> <assigned-role-name> -> Permissions -> <policy-name>

确保您的保单具有以下内容:

{
    "Statement": [
        {
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::<my-bucket>",
                "arn:aws:s3:::<my-bucket>/*"
            ],
            "Effect": "Allow"
        }

    ]
}

注意:arn:aws:s3:::<my-bucket>用于访问my-bucket,而 arn:aws:s3:::<my-bucket>/*用于访问my-bucket下的所有对象。它们相似但不相同。它们都必须同时存在以确保lambda具有完全的S3访问权限

希望这会有所帮助