这就是我们如何制作S3 Bucket对象列表请求。
final ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName)
假设我们已将内联策略附加到请求资源的用户
{
"Sid": "AllowRootAndHomeListingOfBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::XXXX.XXXX",
"arn:aws:s3:::XXXX.XXXXX/php_serialize.rb"
]
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::XXXX.XXXX/php_serialize.rb"
]
}
此策略的效果是,它允许用户列出所有根级别对象,包括向用户授予权限的资源。
do {
result = s3client.listObjectsV2(req);
for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {
}
System.out.println("Next Continuation Token : " + result.getNextContinuationToken());
req.setContinuationToken(result.getNextContinuationToken());
} while(result.isTruncated() == true );
结果是:
text.rb
test/abc
php_serialize.rb
xyx/test.txt
我只想要列出php_serialize.rb
。如果请求用户不知道前缀,则向他授予权限。
根据请求,在这种情况下不起作用。
final ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName).withPrefix("php_serialize.rb");
答案 0 :(得分:0)
不可能向S3询问特定用户可以访问的对象列表。
这将需要针对(可能)桶中的每个单个对象评估所有用户的权限,这在最好的情况下是计算密集的,在最坏的情况下是不可能的,这取决于对该用户有效的特定策略约束。以及可能特定于用户请求的属性。
该服务不支持此类查询。