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:::<my-bucket>
用于访问 my-bucket
而
arn:aws:s3:::<my-bucket>/*
用于访问my-bucket
下的所有对象。它们相似但不相同。它们需要同时存在以确保 lambda 具有完整的 S3 访问权限
希望对你有帮助
【讨论】:
非常感谢。我错过了第一个资源。【参考方案3】:我在 inputKey 中遇到了奇怪的字符和空格。尝试使用简单的名称。
【讨论】:
以上是关于AWS Lambda 无法删除 Amazon S3 对象的主要内容,如果未能解决你的问题,请参考以下文章
AWS Lambda 中的 Amazon S3 waitFor()
使用 AWS 开发工具包从 Amazon S3 下载文件后如何删除文件