これは私たちが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");