1

Voici comment nous faisons, demande d'inscription d'objet S3 Bucket.Comment lister uniquement les objets de compartiment S3 accessibles pour un utilisateur, au lieu de demander explicitement un certain 'préfixe'?

final ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName) 

Supposons que nous avons joint la politique en ligne à l'utilisateur, qui demande la ressource,

{ 
     "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" 
     ] 
    } 

Effet de cette politique est que, il permet à l'utilisateur de la liste de tous les objets de niveau racine, y compris la ressource à laquelle l'utilisateur a donné l'autorisation.

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); 

Résultat de c'est:

text.rb 
test/abc 
php_serialize.rb 
xyx/test.txt 

Je veux juste le php_serialize.rb, pour obtenir la liste. Si l'utilisateur demandeur ne connaît pas le préfixe, auquel il a donné les autorisations.

La demande suivante ne fonctionnera pas dans ce cas.

final ListObjectsV2Request req = new ListObjectsV2Request().withBucketName(bucketName).withPrefix("php_serialize.rb"); 

Répondre

0

Il est impossible de demander S3 pour obtenir une liste d'objets serait en mesure d'accéder à un utilisateur spécifique. Cela nécessiterait d'évaluer toutes les permissions de l'utilisateur contre (potentiellement) chaque objet dans le compartiment, ce qui serait au mieux intensif en termes de calcul et impossible au pire, en fonction des contraintes de politique spécifiques en vigueur contre cet utilisateur et des propriétés pourrait être spécifique à la requête faite par l'utilisateur.

Le service ne prend pas en charge une telle requête.