ClientError:调用 HeadObject 操作时发生错误 (403):禁止

2024-04-20

我正在创建一个 AWS Lambda 函数,尝试将文件 (s3.download_file) 下载到我使用以下命令创建的临时目录tempfile来自 Python (3.6) 的库。然后,我对文件进行一些转换,并且需要再次上传它(s3.upload_file)。我对我的临时目录的生命周期充满信心,当 Lambda 完成其工作时,临时目录将自行销毁。 Lambda 返回与禁止的 HeadObject 操作相关的错误。确切的错误是:

“调用 HeadObject 操作时发生错误 (403):禁止”

我该如何调试这个错误?我已经检查了几个来源,其中一些谈到调整策略、检查权限,但我的问题是,有一些逐步的步骤(AWS 在其文档中没有),可以让我解决这个问题吗?


您对 S3 的 API 调用是使用 AWS 凭证进行的。如果您想调用 HTTP HEAD(或头部对象 https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)对 S3 对象进行操作,那么您的凭据需要拥有相关 S3 对象的权限。

检查与关联的 IAM 策略IAM role https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.htmlLambda 函数正在使用的。你需要s3:GetObject允许。

请注意 HeadObject 的另一件事:如果您请求的对象不存在,S3 返回的错误取决于您是否也有s3:ListBucket允许:

  • 如果您拥有存储桶的 s3:ListBucket 权限,S3 将返回 HTTP 状态代码 404(“无此类密钥”)错误

  • 如果您没有 s3:ListBucket 权限,S3 将返回 HTTP 状态代码 403(“访问被拒绝”)错误

以下是允许 S3 的 S3 策略示例GetObject针对所有对象的行动mybucket并且还允许ListBucket on mybucket:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": [
        "arn:aws:s3:::mybucket/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListBucket",
      "Resource": [
        "arn:aws:s3:::mybucket"
      ]
    }
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClientError:调用 HeadObject 操作时发生错误 (403):禁止 的相关文章

随机推荐