juv*_*oco 3 amazon-s3 amazon-web-services aws-lambda
我正在创建一个 AWS Lambda 函数,尝试将文件 (s3.download_file) 下载到我使用Python (3.6) 中的临时文件库创建的临时目录。然后,我对文件进行一些转换,并且需要再次上传它(s3.upload_file)。我对我的临时目录的生命周期充满信心,当 Lambda 完成其工作时,临时目录将自行销毁。Lambda 返回与禁止的 HeadObject 操作相关的错误。确切的错误是:
“调用 HeadObject 操作时发生错误 (403):禁止”
我该如何调试这个错误?我已经检查了几个来源,其中一些谈到调整策略、检查权限,但我的问题是,有一些逐步的步骤(AWS 在其文档中没有),可以让我解决这个问题吗?
您对 S3 的 API 调用是使用 AWS 凭证进行的。如果您想在 S3 对象上调用 HTTP HEAD (或HeadObject)操作,那么您的凭据需要拥有相关 S3 对象的权限。
\n检查与Lambda 函数正在使用的IAM 角色关联的 IAM 策略。你需要s3:GetObject许可。
请注意 HeadObject 的另一件事:如果您请求的对象不存在,S3 返回的错误取决于您是否也拥有该s3:ListBucket权限:
如果您拥有存储桶的 s3:ListBucket 权限,S3 将返回 HTTP 状态代码 404(“无此类密钥”)错误
\n如果您没有\xe2\x80\x99t s3:ListBucket 权限,S3 将返回 HTTP 状态代码 403(“访问被拒绝”)错误
\n以下是 S3 策略的示例,该策略允许GetObject针对 in 中的所有对象执行 S3 操作mybucket,并且还允许ListBucketon mybucket:
{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Effect": "Allow",\n "Action": "s3:GetObject",\n "Resource": [\n "arn:aws:s3:::mybucket/*"\n ]\n },\n {\n "Effect": "Allow",\n "Action": "s3:ListBucket",\n "Resource": [\n "arn:aws:s3:::mybucket"\n ]\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
23870 次 |
| 最近记录: |