gpt4 book ai didi

amazon-web-services - 使用 ACL 'Access Denied' 保存到 s3 时,具有 AdministratorAccess 的 AWS Lambda 抛出 'public-read'

转载 作者:行者123 更新时间:2023-12-04 08:06:18 39 4
gpt4 key购买 nike

我关注 AWS Walkthrough on setting up AWS Lambda从 S3 存储桶生成缩略图:当 sourcebucket接收到一个新对象,它调用一个 lambda 来转换该对象并将其缩略图保存到 destination bucket .一切都适用于没有为对象指定 ACL 的默认代码片段,在这种情况下,S3 会自动将其设置为 private .但是,当我修改代码并将对象的 ACL 设置为 'public-read' , Lambda 未能将对象保存到目标存储桶并抛出 'Access Denied'错误。

s3.putObject({
Bucket: dstBucket,
Key: dstKey,
Body: data,
ContentType: 'image/jpeg',
ACL: 'public-read',
StorageClass: style.storageClass})

按照教程,我通过 IAM adminuser 向 lambda 添加了以下访问策略:
aws lambda add-permission \
--function-name CreateThumbnail \
--region eu-west-1 \
--statement-id some-unique-id \
--action "lambda:InvokeFunction" \
--principal s3.amazonaws.com \
--source-arn arn:aws:s3:::sourcebucket \
--source-account bucket-owner-account-id \
--profile adminuser

adminuser 是 AdministratorAccess 组的一部分允许对所有资源执行所有操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}

所以我真的不确定为什么 Lambda 没有保存“公共(public)读取”对象的权限。

按照教程,Lambda 也有一个 AWSLambdaExecute授予其对存储桶执行所有必要操作的权限的角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:*"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::*"
}
]
}

虽然我可以在存储桶级别对所有资源设置“公共(public)读取”策略,但我想在目标存储桶中保留一些对象私有(private)。

enter image description here

最佳答案

看起来像 AWSLambdaExecute本教程建议附加到 Lambda 的角色策略缺乏指定对象 ACL 的权限。为了解决这个问题,我附加了一个额外的内联策略,授予 lambda "s3:PutObjectAcl" 的权限。 Action 也:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::*"
}
]
}

为避免对 lambda 有两种策略,您只需指定一个自定义策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::*"
}
]
}

感谢 this answer .

关于amazon-web-services - 使用 ACL 'Access Denied' 保存到 s3 时,具有 AdministratorAccess 的 AWS Lambda 抛出 'public-read',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049794/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com