AWS SDK 在检查不存在的 S3 密钥时抛出 403,但对于现有密钥 returns true

AWS SDK throws 403 when checking for non-existing S3 key, but returns true for existing key

我在版本 1.11.66 中使用 Java 的 AWS SDK 中的 AmazonS3Client 检查 S3 中是否存在密钥:

s3client.doesObjectExist(bucketName, key);

如果我给它一个现有的键名,它会正确 returns true。对于不存在的密钥,我总是收到 AmazonS3Exception 通知我从 API.

返回的 403

我需要更改什么才能实现 return false?

该服务的 IAM 策略如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::MY_BUCKET/*"
    }
  ]
}

您似乎授予了对象权限,而不是存储桶权限。您的策略应该允许列出存储桶。尝试在策略中指定存储桶名称:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::MY_BUCKET"
    }
  ]
}

注意 MY_BUCKET 而不是 MY_BUCKET/*