检查不存在的S3密钥时,AWS SDK会引发403,但对现有密钥返回true

时间:2016-12-12 15:27:25

标签: java amazon-web-services amazon-s3 aws-sdk

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

s3client.doesObjectExist(bucketName, key);

如果我给它一个现有的密钥名称,它会正确返回true。对于不存在的密钥,我总是得到一个AmazonS3Exception通知我403从API返回。

我必须更改哪些内容才能返回false

服务的IAM策略如下所示:

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

1 个答案:

答案 0 :(得分:4)

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

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

注意MY_BUCKET而不是MY_BUCKET/*

相关问题