我下面的AWS演练设置AWS Lambda生成缩略图从一个S3桶:当一个源桶
收到一个新对象,它调用一个lambda转换该对象,并将其缩略图保存到一个目标桶
。一切都与默认代码片段一起工作,其中没有为对象指定ACL,在这种情况下,S3会自动将其设置为Private
。但是,当我修改代码并将对象的ACL设置为公共读取时,Lambda无法将对象保存到目标桶中,并抛出一个访问拒绝错误。
s3.putObject({
Bucket: dstBucket,
Key: dstKey,
Body: data,
ContentType: 'image/jpeg',
ACL: 'public-read',
StorageClass: style.storageClass})
在本教程之后,我通过IAMadminuser
向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没有保存“公共读取”对象的权限。
遵循本教程,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:::*"
}
]
}
虽然我可以在桶级别的所有资源上设置“公共读取”策略,但我希望在目标桶中保留一些对象的私有性。
看起来像AWSLambdaExecute
角色策略,教程建议附加到Lambda缺少指定对象ACL的权限。为了解决这个问题,我附加了一个额外的内联策略,它授予lambda对"s3: PutObjectAcl"
操作的权限:
{
"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:::*"
}
]
}
多亏了这个答案。
问题内容: 通过将此Applet与JDBC结合使用,我将获得以下错误 问题答案: 如果不采取措施为小程序赋予适当的权限,您将无法在小程序中运行JDBC。Oracle 的本教程详细介绍了该主题。
我正试图用预签名的URL直接上传一个文件到S3 bucket,但在PUT请求上出现AccessDenied(403 Plibended)错误。 附注。忘了补充。我已经尝试添加和以及并且在本例中上载工作正常,但是如何限制上载的访问?它应该只适用于预签名的URL,对吗?
我有一个lambda函数,它使用一个具有以下策略摘录的角色 我的桶策略如下所示 我在角色和bucket策略上都允许使用GetObject和ListBucket。但是,当我的函数运行时 我明白了 [错误]ClientError:调用GetObject操作时发生错误(AccessDenied):拒绝访问 我还需要添加哪些权限?对象就在那里,当我使用管理员角色在本地运行代码时,我可以得到它。 最新消息
我正在尝试将图像上传到我的AWS存储桶,我创建了一个新用户授予他完整的控制权 但是,在上传时,我收到以下错误: 05-27 07:09:47.219: W/System.err(20594):com.amazonaws.services.s3.model.Amazon S3异常:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:访问被拒绝;请求ID:),S3扩展请求ID:/=
问题内容: 我有一个奇怪的错误。我通过命令行以root用户身份登录到本地Mysql。创建数据库后: 然后给某些用户特权: 这给出了错误: 根目录的权限(显示授予;)显示: 我还要确保以root用户身份登录: 这确认我以“ root” @“ localhost”的身份登录 我已经创建了数据库并多次分配了用户,但从未遇到问题。为什么以root用户身份登录时无法将用户分配给root用户创建的数据库? P
为了访问我的S3 bucket,我导出了我的cred 我可以通过做 我还可以用boto3验证它在python中工作 我可以看到文件在桶里。 然而,当我使用Spark执行此操作时: 我得到了一个很好的 这是我在本地提交作业的方式 spark-submit--packages com.amazonaws:aws--sdk-pom:1.11.98,org.apache.hadoop:hadoop-aws