AWS Lambda无法删除Amazon S3对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS Lambda无法删除Amazon S3对象相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个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");
    }
});
答案

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

解决这个问题的步骤

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

{
  "Statement": [
    {
      "Sid": "Stmt1423535846414",
      "Action": [
        "s3:DeleteObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    }
  ]
}
另一答案

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

另一答案

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访问权限

希望这可以帮助

以上是关于AWS Lambda无法删除Amazon S3对象的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 中的 Amazon S3 waitFor()

原创aws s3 lambda缩略图生成

AWS lambda 函数从 S3 文件夹中删除文件

带有Java的AWS Lambda无法从S3获取文件

使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

使用 AWS 开发工具包从 Amazon S3 下载文件后如何删除文件