【发布时间】:2019-10-31 12:15:14
【问题描述】:
我有一些 Python 可以请求预签名的 POST URL 以将对象上传到 S3 存储桶。它可以在具有管理员权限的 IAM 用户下在本地运行,我可以使用 Postman 和 cURL 将内容上传到存储桶。但是,当尝试在 Lambda 中运行相同的代码时,它会显示“您提供的 AWS 访问密钥 ID 在我们的记录中不存在。”。
唯一的区别是 Lambda 函数在没有管理员权限的情况下运行(但它确实有一个允许它在存储桶上运行任何 S3 操作的策略)并且使用的是不同(旧)版本的 Boto3。
我尝试使用从 Lambda 函数返回的详细信息,其方式与我使用本地返回的详细信息完全相同,但 Lambda 详细信息不起作用。
【问题讨论】:
-
因此,您的 Lambda 函数配置了一个 IAM 角色,其策略包括相关存储桶上的 s3:*。您的 Lambda 函数能否列出该存储桶中的对象,或从该存储桶获取对象(或者这些操作是否也会因错误而失败)?
-
正确,我的 Lambda 函数配置为使用一个 IAM 角色,该角色的策略包括 s3:* 在我尝试为其生成预签名 URL 的存储桶上。我刚刚测试过,它也可以列出该桶中的所有对象。
-
您的客户端最终用于 POST 的预签名 URL 是否已损坏?
-
您找到解决方案了吗?我遇到了同样的问题 py/.net lambdas,在本地它们都工作得很好......
标签: amazon-web-services amazon-s3 aws-lambda boto3 boto