AWS SDK for Java 1.x 已於 2025 年 12 月 31 日end-of-support。我們建議您遷移至 AWS SDK for Java 2.x,以繼續接收新功能、可用性改善和安全性更新。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
管理儲存貯體和物件的 Amazon S3 存取許可
您可以針對 Amazon S3 儲存貯體和物件使用存取控制清單 (ACLs),以精細控制 Amazon S3 資源。
注意
這些程式碼範例假設您了解使用 AWS SDK for Java 中的資料,並使用設定 AWS 登入資料和開發區域中的資訊來設定預設 AWS 登入資料。
取得儲存貯體的存取控制清單
若要取得儲存貯體的目前 ACL,請呼叫 AmazonS3 的 getBucketAcl方法,將儲存貯體名稱傳遞給它以進行查詢。此方法會傳回 AccessControlList 物件。若要取得清單中的每個存取授權,請呼叫其 getGrantsAsList 方法,這會傳回標準 Java 授予物件清單。
匯入
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;
Code
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { AccessControlList acl = s3.getBucketAcl(bucket_name); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
請參閱 GitHub 上的完整範例
設定儲存貯體的存取控制清單
若要新增或修改儲存貯體的 ACL 許可,請呼叫 AmazonS3 的 setBucketAcl方法。它需要 AccessControlList 物件,其中包含要設定的承授者和存取層級清單。
匯入
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;
Code
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion(Regions.DEFAULT_REGION).build(); try { // get the current ACL AccessControlList acl = s3.getBucketAcl(bucket_name); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setBucketAcl(bucket_name, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
注意
您可以直接使用承授者類別提供承授者的唯一識別符,或使用 EmailAddressGrantee 類別來透過電子郵件設定承授者,如同我們在這裡所做的。
請參閱 GitHub 上的完整範例
取得物件的存取控制清單
若要取得物件的目前 ACL,請呼叫 AmazonS3 的 getObjectAcl方法,將要查詢的儲存貯體名稱和物件名稱傳遞給它。如同 getBucketAcl,此方法會傳回 AccessControlList 物件,您可以用來檢查每個授與。
匯入
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.Grant;
Code
try { AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); List<Grant> grants = acl.getGrantsAsList(); for (Grant grant : grants) { System.out.format(" %s: %s\n", grant.getGrantee().getIdentifier(), grant.getPermission().toString()); } } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); }
請參閱 GitHub 上的完整範例
設定物件的存取控制清單
若要新增或修改物件的 ACL 許可,請呼叫 AmazonS3 的 setObjectAcl方法。它需要 AccessControlList 物件,其中包含要設定的承授者和存取層級清單。
匯入
import com.amazonaws.AmazonServiceException; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.AccessControlList; import com.amazonaws.services.s3.model.EmailAddressGrantee;
Code
try { // get the current ACL AccessControlList acl = s3.getObjectAcl(bucket_name, object_key); // set access for the grantee EmailAddressGrantee grantee = new EmailAddressGrantee(email); Permission permission = Permission.valueOf(access); acl.grantPermission(grantee, permission); s3.setObjectAcl(bucket_name, object_key, acl); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } }
注意
您可以直接使用承授者類別提供承授者的唯一識別符,或使用 EmailAddressGrantee 類別來透過電子郵件設定承授者,如同我們在這裡所做的。
請參閱 GitHub 上的完整範例
詳細資訊
-
Amazon S3 API 參考中的 GET 儲存貯體 acl
-
Amazon S3 API 參考中的 PUT 儲存貯體 acl
-
Amazon S3 API 參考中的 GET 物件 acl
-
Amazon S3 API 參考中的 PUT 物件 acl