检查不存在的S3密钥时,AWS开发工具包将引发403,但对于现有密钥,则返回true

Eag*_*eak 3 java amazon-s3 amazon-web-services aws-sdk

我使用AmazonS3Client1.11.66版中适用于Java的AWS开发工具包中的来检查S3中密钥的存在:

s3client.doesObjectExist(bucketName, key);
Run Code Online (Sandbox Code Playgroud)

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

我要更改什么才能使其返回false

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

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::MY_BUCKET/*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*lev 5

似乎您已授予对象(而非存储桶)权限。您的策略应允许列出存储分区。尝试在策略中指定存储桶名称:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::MY_BUCKET"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,MY_BUCKET而不是MY_BUCKET/*