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