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的执行角色。
解决这个问题的步骤
- 导航到AWS管理控制台中的IAM
- 查找为lambda使用(或创建)的IAM角色(如果它是默认值,则为lambda_exec_role)
- 转到附加角色策略 - >自定义策略并添加以下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()