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/*
。
我在版本 1.11.66 中使用 Java 的 AWS SDK 中的 AmazonS3Client
检查 S3 中是否存在密钥:
s3client.doesObjectExist(bucketName, key);
如果我给它一个现有的键名,它会正确 returns true
。对于不存在的密钥,我总是收到 AmazonS3Exception
通知我从 API.
我需要更改什么才能实现 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/*
。