Skip to content

Commit 1552f21

Browse files
committed
Use AWS SDK for MinIO createbucket policy.
1 parent 1d6199c commit 1552f21

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

admin-cli/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@
5959
<version>2.31.27</version>
6060
<scope>compile</scope>
6161
</dependency>
62+
<dependency>
63+
<groupId>software.amazon.awssdk</groupId>
64+
<artifactId>iam-policy-builder</artifactId>
65+
<version>2.31.27</version>
66+
<scope>compile</scope>
67+
</dependency>
6268
<dependency>
6369
<groupId>org.json</groupId>
6470
<artifactId>json</artifactId>

admin-cli/src/main/java/cloud/katta/cli/commands/storage/MinioStsSetup.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import cloud.katta.cli.KattaSetupCli;
1818
import io.minio.admin.MinioAdminClient;
1919
import 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
}

admin-cli/src/test/java/cloud/katta/cli/commands/storage/MinioStsSetupIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void testMinioSetup() throws Exception {
4040
{
4141
final JSONObject miniocreatebucketpolicy = new JSONObject(cannedPolicies.get("fusillicreatebucketpolicy"));
4242
final JSONArray statements = miniocreatebucketpolicy.getJSONArray("Statement");
43-
int count = 0;
43+
long count = 0;
4444
for(int i = 0; i < statements.length(); i++) {
4545
count += statements.getJSONObject(i).getJSONArray("Resource").toList().stream().map(Objects::toString).filter(s -> s.contains("fusilli")).count();
4646
}
@@ -49,7 +49,7 @@ public void testMinioSetup() throws Exception {
4949
{
5050
final JSONObject minioaccessbucket = new JSONObject(cannedPolicies.get("fusilliaccessbucketpolicy"));
5151
final JSONArray statements = minioaccessbucket.getJSONArray("Statement");
52-
int count = 0;
52+
long count = 0;
5353
for(int i = 0; i < statements.length(); i++) {
5454
count += statements.getJSONObject(i).getJSONArray("Resource").toList().stream().map(Objects::toString).filter(s -> s.contains("fusilli")).count();
5555
}

0 commit comments

Comments
 (0)