Как установить политику S3 Bucket для нескольких объектов? - PullRequest
0 голосов
/ 08 января 2019

Как установить политику S3 Bucket для нескольких объектов?

Statement allowRestrictedWriteStatement = new Statement(Effect.Allow)
             .withPrincipals(new Principal("12345678910"))
             .withActions(S3Actions.DeleteObject)
             .withResources(new S3ObjectResource(myBucketName, "folder1/folder2"));

     Statement allowRestrictedWriteStatement2 = new Statement(Effect.Deny)
             .withPrincipals(new Principal("12345678910"))
             .withActions(S3Actions.DeleteObject)
             .withResources(new S3ObjectResource(myBucketName, "folder1/folder3"));

     Policy policy = new Policy()
             .withStatements(allowRestrictedWriteStatement,allowRestrictedWriteStatement2);

     AWSCredentials credentials = new BasicAWSCredentials("xxxxxxxxxxxxx", "yyyyyyyyyyy");
     AmazonS3 s3client = new AmazonS3Client(credentials);
     s3client.setBucketPolicy(myBucketName,policy.toJson());

С помощью вышеприведенного кода я могу установить разрешение и запрет на два объекта корзины. Что делать, если нам нужно установить разрешить и запретить для объекта, доступного в двух списках, т.е. listAllow и listDeny содержат по 5 объектов каждый, и мне нужно установить политику сегментов для этих объектов списков. Любое предложение, пожалуйста?

1 Ответ

0 голосов
/ 08 января 2019

Я нашел решение -

List<Statement> newlistAllow = new ArrayList <>();
 for (CommonPrefix  objectToDelete:listAllow) {
     Statement allowRestrictedWriteStatement = new Statement(Statement.Effect.Allow)
             .withPrincipals(new Principal("12345678910"))
             .withActions(S3Actions.DeleteObject)
             .withResources(new S3ObjectResource(bucketNameToUse,objectToDelete.toString()));
     newlistAllow.add(allowRestrictedWriteStatement);
 }

 List<Statement> newlistDeny = new ArrayList <>();
 for (CommonPrefix objectToRetain:listDeny) {
     Statement denyRestrictedWriteStatement = new Statement(Statement.Effect.Deny)
             .withPrincipals(new Principal("12345678910"))
             .withActions(S3Actions.DeleteObject)
             .withResources(new S3ObjectResource(bucketNameToUse,objectToRetain.toString()));
     newlistDeny.add(denyRestrictedWriteStatement);
 }

 Policy policyDeny = new Policy();
 policyDeny.setStatements(newlistDeny);
 Policy policyAllow = new Policy();
 policyAllow.setStatements(newlistAllow);

 AWSCredentials credentials = new BasicAWSCredentials("xxxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyyyy");
 AmazonS3 s3client = new AmazonS3Client(credentials);

 s3client.setBucketPolicy(bucketNameToUse,policyAllow.toJson());
 s3client.setBucketPolicy(bucketNameToUse,policyDeny.toJson());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...