我使用版本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/*"
}
]
}
答案 0 :(得分:4)
好像你已经授予了对象的权限,而不是桶。您的策略应该允许列出存储桶。尝试在策略中指定存储桶名称:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::MY_BUCKET"
}
]
}
注意MY_BUCKET
而不是MY_BUCKET/*
。