AWS Lambda 无法删除 Amazon S3 对象

Posted

技术标签:

【中文标题】AWS Lambda 无法删除 Amazon S3 对象【英文标题】:AWS Lambda can't delete Amazon S3 object 【发布时间】:2015-04-09 19:49:13 【问题描述】:

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

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


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

尝试删除文件的代码sn-p是

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

【问题讨论】:

【参考方案1】:

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

解决此问题的步骤

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


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

【讨论】:

或者最好是“资源”:“arn:aws:s3:::firstbucket/*” 什么是席德?我在哪里可以买到? 用于分类/识别每个 IAM 语句的语句 ID。更像是一个友好的名称“for-s3-access-for-app1”【参考方案2】:

转到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:::&lt;my-bucket&gt; 用于访问 my-bucketarn:aws:s3:::&lt;my-bucket&gt;/* 用于访问my-bucket 下的所有对象。它们相似但不相同。它们需要同时存在以确保 lambda 具有完整的 S3 访问权限

希望对你有帮助

【讨论】:

非常感谢。我错过了第一个资源。【参考方案3】:

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

【讨论】:

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

AWS Lambda 中的 Amazon S3 waitFor()

原创aws s3 lambda缩略图生成

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

使用 AWS Lambda (Python 3) 读取存储在 S3 中的 Parquet 文件

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

使用 python 从 AWS S3 到 PostgreSQL Amazon RDS 的 CSV 文件