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

Jos*_*per 4 amazon-web-services amazon-iam boto3 aws-lambda

我有一个lambda函数,用于进行s3 HeadObject调用。即使为此lambda函数制定了自定义策略,但每次进行此HeadObject调用时,我仍然会收到403错误。具体有;

An error occurred (403) when calling the HeadObject operation: Forbidden
Run Code Online (Sandbox Code Playgroud)

我的政策非常明确地允许GetObject调用有问题的存储桶。不确定是什么问题。我有三遍检查,以确保一切都排队。有问题的行是:

    s3 = boto3.client('s3')
    local_file_path = '/tmp/' + key_name.split('/')[-1] + '_REMOTE.json'
    response = s3.head_object(Bucket=environ['OUTPUT_BUCKET'], Key=OUTPUT_FILE_NAME)
Run Code Online (Sandbox Code Playgroud)

让我知道是否可以提供更多信息以帮助您

Osc*_*rez 6

我在此链接上找到了解决方案,因此所有功劳都归于作者。

基本上,您可能需要检查您是否拥有(至少)该操作的正确权限,s3:GetObject并且s3:ListBucket资源表达式与 ARN 和路径相匹配,例如 this ->"Resource":"arn:aws:s3:::BUCKET_NAME/*"而不是 this -> "Resource":"arn:aws:s3:::BUCKET_NAME"


b.b*_*4rd 5

由于您说过如果缺少s3:ListBucket权限,文件将丢失其预期的行为

您需要s3:GetObject权限才能执行此操作。有关更多信息,请转到Amazon Simple Storage Service开发人员指南中的在策略中指定权限。如果您请求的对象不存在,Amazon S3返回的错误取决于您是否还具有s3:ListBucket权限。

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

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

链接到doco

上传对象HEAD 之前还有一个“不同的”最终一致性行为

Amazon S3数据一致性模型Amazon S3为所有区域的S3存储桶中的新对象的PUTS提供了写后读取一致性,但请注意。需要注意的是,如果在创建对象之前对键名称发出HEAD或GET请求(以查找对象是否存在),Amazon S3最终将为写后读取提供一致性。