AWS Lambda - 访问被拒绝错误 - GetObject
Posted
技术标签:
【中文标题】AWS Lambda - 访问被拒绝错误 - GetObject【英文标题】:AWS Lambda - Access Denied Error - GetObject 【发布时间】:2021-06-27 23:05:45 【问题描述】:我是 AWS Lambda 的新手。我正在尝试来自https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html 的教程。当用户将 jpg 文件上传到名为 greetingsproject 的 S3 存储桶时,会触发 lambda 函数。
错误:9a62ff86-3e24-491d-852e-ded2e2cf5d94 信息:获取对象时出错 = AccessDenied:访问被拒绝
我在以下代码 sn-p 中收到拒绝访问错误:
try
console.log("srcBucket=" + srcBucket);
console.log("srcKey=" + srcKey);
const params =
Bucket: srcBucket,
Key: srcKey
;
var origimage = await s3.getObject(params).promise();
catch (error)
console.log("error while getting object = " + error);
return;
我的角色政策:
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"logs:PutLogEvents",
"logs:CreateLogGroup",
"logs:CreateLogStream"
],
"Resource": "arn:aws:logs:*:*:*"
,
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "arn:aws:s3:::*"
,
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::greetingsproject"
,
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::greetingsproject",
"arn:aws:s3:::greetingsproject/*"
]
,
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::greetingsproject",
"arn:aws:s3:::greetingsproject/*"
]
]
不确定我需要向策略添加哪些其他权限。
【问题讨论】:
lambda函数和s3桶在同一个aws账户吗? “角色策略” - 哪个角色? Lambda 执行角色? 【参考方案1】:Marcin 关于 Lambda 执行角色的评论让我走上了正轨。 我之前按照以下步骤操作:
-
创建了一个名为 greetingsProjectPolicy 的策略(具有上述权限)
将此政策附加到 greetingsProjectRole。
将 greetingsProjectRole 分配给我的 lambda 函数。
我认为就是这样,并且该策略应该可用于我的 lambda 函数。
但是,当我将 greetingsProjectRole 分配给该函数时,AWS 在内部创建了一个名为 greetingsProject-role-zhcbt61o 的执行角色。
当我点击这个角色时,我惊讶地发现它唯一的角色是 AWSLambdaBasicExecutionRole,而 greetingsProjectPolicy 不见了。
我必须将 greetingsProjectPolicy 作为内联策略添加到 greetingsProject-role-zhcbt61o。现在我不再收到拒绝访问错误。
不确定,这是 AWS 的工作方式还是我遗漏了什么。
【讨论】:
您已将 greetingsProjectPolicy 附加到 greetingsProjectRole。您可以检查角色中的受信任实体吗?对于 lambda,它应该是 lambda.amazonaws.com。我认为您让 Lambda 创建执行角色而不是选择您的角色(或者您的角色没有 lambda.amazonaws.com 是 Truested 实体) greetingsProjectRole 的受信任实体为 lambda.amazonaws.com。但是(如上所述)当我分配了 greetingsProjectRole 时,AWS 创建了一个 greetingsProject-role-zhcbt61o 并将其设为默认值。但是,我可以单击“编辑”按钮并将其更改为我的原始角色 (greetingsProjectRole),并且不再出现拒绝访问错误。以上是关于AWS Lambda - 访问被拒绝错误 - GetObject的主要内容,如果未能解决你的问题,请参考以下文章
terraform/aws lambda 函数访问在 s3 上被拒绝
在不同账户的 Lambda 中从 AWS Athena 查询 S3 文件时访问被拒绝
如何在使用 lambda@edge 调整图像大小时修复访问被拒绝错误