1

これは私たちがS3バケットオブジェクトのリスト要求を行う方法です。我々は、リソースを要求しているユーザにインラインポリシーを添付したとし特定の「接頭辞」を明示的に要求するのではなく、ユーザーにとってアクセス可能なS3バケットオブジェクトのみを一覧表示するにはどうすればよいですか?

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

特定のユーザーがアクセスできるオブジェクトのリストについては、S3に問い合わせることはできません。

これは、バケット内のすべての単一のオブジェクトに対するユーザーのすべてのアクセス許可を評価する必要があります。これは、そのユーザーに対して有効な特定のポリシーの制約やユーザーが行う要求に固有のものである可能性があります。

サービスは、このようなクエリをサポートしていません。

関連する問題