找不到对象时 AWS 返回 403 而不是 404

AWS returning 403 instead of 404 when object not found

我正在使用 IAM 角色访问 S3,如果未找到对象,则 S3 返回 403。我可以在 AmazonS3Client 中看到以下代码。它不迎合 403 并将异常传递给客户端。

public boolean doesObjectExist(String bucketName, String objectName) throws AmazonServiceException, SdkClientException {
    try {
        this.getObjectMetadata(bucketName, objectName);
        return true;
    } catch (AmazonS3Exception var4) {
        if (var4.getStatusCode() == 404) {
            return false;
        } else {
            throw var4;
        }
    }
}

以下是 IAM 角色的策略。

{
   "Statement":[
      {
         "Action":[
            "s3:List*"
         ],
         "Resource":"arn:aws:s3:::bucket_name",
         "Effect":"Allow"
      },
      {
         "Action":[
            "s3:Get*",
            "s3:PutObject*",
            "s3:DeleteObject*",
         ],
         "Resource":"arn:aws:s3:::bucket_name/*",
         "Effect":"Allow"
      }
   ]
}

我在某处读到,如果未找到对象,则 aws 尝试列出,如果列表权限不可用,则抛出 403 错误。

我的问题是 - 我可以在政策中做哪些确切的更改来停止 403。它是政府客户,任何更改都需要很多时间。如果您能帮助我进行精确的政策更改,那将是很大的帮助。我的猜测是 "s3:ListBucket" 我无法在本地复制它,因为我无法使用 IAM 角色并且在其他环境中我没有权限。

编辑: 我已经获得 "s3:List*" 存储桶资源。将 S3:ListBucket 添加到 bucket/* 有何帮助?

请检查此问题的答案 How do I have an S3 bucket return 404 (instead of 403) for a key that does not exist in the bucket/

它解释了为什么当您无权访问存储桶时 S3 returns 403 而不是 404(提示:不向恶意用户泄露信息)

解决方案是按照您的建议获得 ListBucker API 的权限。

在“操作”中添加“S3:ListBucket”