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 6e0bd0d26 [#6055] feat(core):  extend OSS credential provider to 
support OSS fileset operations (#6029)
6e0bd0d26 is described below

commit 6e0bd0d267b60fa8dcb2f9edb4bf5d69d1071489
Author: FANNG <[email protected]>
AuthorDate: Thu Jan 2 14:35:43 2025 +0800

    [#6055] feat(core):  extend OSS credential provider to support OSS fileset 
operations (#6029)
    
    ### What changes were proposed in this pull request?
    1. correct `ListBucket` to `ListObjects`
    2. add `oss:GetBucketInfo` action
    
    
    ### Why are the changes needed?
    
    Fix: #6055
    
    ### Does this PR introduce _any_ user-facing change?
    no
    
    ### How was this patch tested?
    1. run pass fileset oss test
---
 .../apache/gravitino/oss/credential/OSSTokenProvider.java | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git 
a/bundles/aliyun/src/main/java/org/apache/gravitino/oss/credential/OSSTokenProvider.java
 
b/bundles/aliyun/src/main/java/org/apache/gravitino/oss/credential/OSSTokenProvider.java
index 04ef0022a..79d7f51f7 100644
--- 
a/bundles/aliyun/src/main/java/org/apache/gravitino/oss/credential/OSSTokenProvider.java
+++ 
b/bundles/aliyun/src/main/java/org/apache/gravitino/oss/credential/OSSTokenProvider.java
@@ -138,9 +138,10 @@ public class OSSTokenProvider implements 
CredentialProvider {
             .effect(Effect.ALLOW)
             .addAction("oss:GetObject")
             .addAction("oss:GetObjectVersion");
+
     // Add support for bucket-level policies
     Map<String, Statement.Builder> bucketListStatementBuilder = new 
HashMap<>();
-    Map<String, Statement.Builder> bucketGetLocationStatementBuilder = new 
HashMap<>();
+    Map<String, Statement.Builder> bucketMetadataStatementBuilder = new 
HashMap<>();
 
     String arnPrefix = getArnPrefix();
     Stream.concat(readLocations.stream(), writeLocations.stream())
@@ -150,22 +151,24 @@ public class OSSTokenProvider implements 
CredentialProvider {
               URI uri = URI.create(location);
               
allowGetObjectStatementBuilder.addResource(getOssUriWithArn(arnPrefix, uri));
               String bucketArn = arnPrefix + getBucketName(uri);
-              // ListBucket
+              // OSS use 'oss:ListObjects' to list objects in a bucket while 
s3 use 's3:ListBucket'
               bucketListStatementBuilder.computeIfAbsent(
                   bucketArn,
                   key ->
                       Statement.builder()
                           .effect(Effect.ALLOW)
-                          .addAction("oss:ListBucket")
+                          .addAction("oss:ListObjects")
                           .addResource(key)
                           .condition(getCondition(uri)));
-              // GetBucketLocation
-              bucketGetLocationStatementBuilder.computeIfAbsent(
+              // Add get bucket location and bucket info action.
+              bucketMetadataStatementBuilder.computeIfAbsent(
                   bucketArn,
                   key ->
                       Statement.builder()
                           .effect(Effect.ALLOW)
                           .addAction("oss:GetBucketLocation")
+                          // Required for OSS Hadoop connector to get bucket 
information
+                          .addAction("oss:GetBucketInfo")
                           .addResource(key));
             });
 
@@ -192,7 +195,7 @@ public class OSSTokenProvider implements CredentialProvider 
{
       policyBuilder.addStatement(
           
Statement.builder().effect(Effect.ALLOW).addAction("oss:ListBucket").build());
     }
-    bucketGetLocationStatementBuilder
+    bucketMetadataStatementBuilder
         .values()
         .forEach(statementBuilder -> 
policyBuilder.addStatement(statementBuilder.build()));
 

Reply via email to