This is an automated email from the ASF dual-hosted git repository.

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new c158b754a [#6031]  extend S3 credential provider to support S3 fileset 
operations (#6033)
c158b754a is described below

commit c158b754a850365e8fa6749dd97bbd2c50a40dbe
Author: FANNG <[email protected]>
AuthorDate: Thu Jan 2 14:23:30 2025 +0800

    [#6031]  extend S3 credential provider to support S3 fileset operations 
(#6033)
    
    ### What changes were proposed in this pull request?
    
    add get file meta permission for fileset operation
    
    ### Why are the changes needed?
    
    Fix: #6031
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    pass fileset tests
---
 .../org/apache/gravitino/s3/credential/S3TokenProvider.java   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 
a/bundles/aws/src/main/java/org/apache/gravitino/s3/credential/S3TokenProvider.java
 
b/bundles/aws/src/main/java/org/apache/gravitino/s3/credential/S3TokenProvider.java
index 24b88875d..56d293d04 100644
--- 
a/bundles/aws/src/main/java/org/apache/gravitino/s3/credential/S3TokenProvider.java
+++ 
b/bundles/aws/src/main/java/org/apache/gravitino/s3/credential/S3TokenProvider.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.s3.credential;
 
 import java.net.URI;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -49,6 +50,7 @@ import software.amazon.awssdk.services.sts.model.Credentials;
 
 /** Generates S3 token to access S3 data. */
 public class S3TokenProvider implements CredentialProvider {
+
   private StsClient stsClient;
   private String roleArn;
   private String externalID;
@@ -134,6 +136,7 @@ public class S3TokenProvider implements CredentialProvider {
               allowGetObjectStatementBuilder.addResource(
                   IamResource.create(getS3UriWithArn(arnPrefix, uri)));
               String bucketArn = arnPrefix + getBucketName(uri);
+              String rawPath = trimLeadingSlash(uri.getPath());
               bucketListStatmentBuilder
                   .computeIfAbsent(
                       bucketArn,
@@ -142,10 +145,14 @@ public class S3TokenProvider implements 
CredentialProvider {
                               .effect(IamEffect.ALLOW)
                               .addAction("s3:ListBucket")
                               .addResource(key))
-                  .addCondition(
+                  .addConditions(
                       IamConditionOperator.STRING_LIKE,
                       "s3:prefix",
-                      concatPathWithSep(trimLeadingSlash(uri.getPath()), "*", 
"/"));
+                      Arrays.asList(
+                          // Get raw path metadata information for AWS hadoop 
connector
+                          rawPath,
+                          // Listing objects in raw path
+                          concatPathWithSep(rawPath, "*", "/")));
               bucketGetLocationStatmentBuilder.computeIfAbsent(
                   bucketArn,
                   key ->

Reply via email to