1717import cloud .katta .cli .KattaSetupCli ;
1818import io .minio .admin .MinioAdminClient ;
1919import picocli .CommandLine ;
20+ import software .amazon .awssdk .policybuilder .iam .IamEffect ;
21+ import software .amazon .awssdk .policybuilder .iam .IamPolicy ;
22+ import software .amazon .awssdk .policybuilder .iam .IamPolicyWriter ;
2023
2124/**
2225 * Sets up MinIO for Katta in STS mode:
@@ -63,10 +66,10 @@ public class MinioStsSetup implements Callable<Void> {
6366
6467 @ Override
6568 public Void call () throws Exception {
66- if (createbucketPolicyName == null ) {
69+ if (createbucketPolicyName == null ) {
6770 createbucketPolicyName = String .format ("%screatebucketpolicy" , bucketPrefix );
6871 }
69- if (accessbucketPolicyName == null ) {
72+ if (accessbucketPolicyName == null ) {
7073 accessbucketPolicyName = String .format ("%saccessbucketpolicy" , bucketPrefix );
7174 }
7275
@@ -76,20 +79,30 @@ public Void call() throws Exception {
7679
7780 // /mc admin policy create myminio cipherduckcreatebucket /setup/minio_sts/createbucketpolicy.json
7881 {
79- final JSONObject miniocreatebucketpolicy = new JSONObject (IOUtils .toString (KattaSetupCli .class .getResourceAsStream ("/setup/local/minio_sts/createbucketpolicy.json" ), Charset .defaultCharset ()));
80- final JSONArray statements = miniocreatebucketpolicy .getJSONArray ("Statement" );
81- for (int i = 0 ; i < statements .length (); i ++) {
82- final List <String > list = statements .getJSONObject (i ).getJSONArray ("Resource" ).toList ().stream ().map (Objects ::toString ).map (s -> s .replace ("katta" , bucketPrefix )).toList ();
83- statements .getJSONObject (i ).put ("Resource" , list );
84- }
85- minioAdminClient .addCannedPolicy (createbucketPolicyName , miniocreatebucketpolicy .toString ());
82+ final IamPolicy miniocreatebucketpolicy = IamPolicy .builder ()
83+ .addStatement (b -> b
84+ .effect (IamEffect .ALLOW )
85+ .addAction ("s3:CreateBucket" )
86+ .addAction ("s3:GetBucketPolicy" )
87+ .addAction ("s3:PutBucketVersioning" )
88+ .addAction ("s3:GetBucketVersioning" )
89+ .addResource (String .format ("arn:aws:s3:::%s*" , bucketPrefix )))
90+ .addStatement (b -> b
91+ .effect (IamEffect .ALLOW )
92+ .addAction ("s3:PutObject" )
93+ .addResource (String .format ("arn:aws:s3:::%s*/*/" , bucketPrefix ))
94+ .addResource (String .format ("arn:aws:s3:::%s*/*.uvf" , bucketPrefix )))
95+ .build ();
96+ minioAdminClient .addCannedPolicy (createbucketPolicyName , miniocreatebucketpolicy .toJson (IamPolicyWriter .builder ()
97+ .prettyPrint (true )
98+ .build ()));
8699 System .out .println (minioAdminClient .listCannedPolicies ().get (createbucketPolicyName ));
87100 }
88101 // /mc admin policy create myminio cipherduckaccessbucket /setup/minio_sts/accessbucketpolicy.json
89102 {
90103 final JSONObject minioaccessbucketpolicy = new JSONObject (IOUtils .toString (KattaSetupCli .class .getResourceAsStream ("/setup/local/minio_sts/accessbucketpolicy.json" ), Charset .defaultCharset ()));
91104 final JSONArray statements = minioaccessbucketpolicy .getJSONArray ("Statement" );
92- for (int i = 0 ; i < statements .length (); i ++) {
105+ for (int i = 0 ; i < statements .length (); i ++) {
93106 final List <String > list = statements .getJSONObject (i ).getJSONArray ("Resource" ).toList ().stream ().map (Objects ::toString ).map (s -> s .replace ("katta" , bucketPrefix )).toList ();
94107 statements .getJSONObject (i ).put ("Resource" , list );
95108 }
0 commit comments