Java AWS SDK在检查不存在的S3密钥时抛出403,但在检查现有密钥时返回true
我使用AWS SDK for Java版本1.11.66中的Java AWS SDK在检查不存在的S3密钥时抛出403,但在检查现有密钥时返回true,java,amazon-web-services,amazon-s3,aws-sdk,Java,Amazon Web Services,Amazon S3,Aws Sdk,我使用AWS SDK for Java版本1.11.66中的AmazonS3Client检查S3中是否存在密钥: s3client.doesObjectExist(bucketName, key); 如果我给它一个现有的键名,它会正确地返回true。对于不存在的密钥,我总是得到一个AmazonS3Exception通知我从API返回403 我必须更改什么才能使其返回false? 服务的IAM策略如下所示: { "Version": "2012-10-17", "Statement":
AmazonS3Client
检查S3中是否存在密钥:
s3client.doesObjectExist(bucketName, key);
如果我给它一个现有的键名,它会正确地返回true
。对于不存在的密钥,我总是得到一个AmazonS3Exception
通知我从API返回403
我必须更改什么才能使其返回false
?
服务的IAM策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::MY_BUCKET/*"
}
]
}
似乎您已将权限授予对象,而不是存储桶。您的策略应该允许列出存储桶。尝试在策略中指定bucket名称:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::MY_BUCKET"
}
]
}
注意
MY_BUCKET
而不是MY_BUCKET/*
我想这可以帮助你:具体地说,“操作”:[“s3:ListBucket”]
。我实际上需要这两个,我的_BUCKET,我的_BUCKET/*