我如何只列出用户可访问的 S3 存储桶对象,而不是明确要求某些 'prefix'?

How do i list only accessible S3 bucket objects for a user, instead of explicitly asking for certain 'prefix'?

这就是我们提出 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");

无法向 S3 请求特定用户能够访问的对象列表。

这将需要针对(可能)存储桶中的每个对象评估所有用户的权限,这将是计算密集型的,最坏的情况下是不可能的,具体取决于对该用户和属性有效的特定策略约束这可能特定于用户提出的请求。

该服务不支持此类查询。