自2024年7月31日起, 适用于 Java 的 Amazon SDK 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理存储桶和对象的 Amazon S3 访问权限
您可以使用 Amazon S3 存储桶和对象的访问控制列表 (ACLs) 来精细控制您的资源。 Amazon S3
注意
这些代码示例假设您理解《使用》中的内容, 适用于 Java 的 Amazon SDK并已使用设置 Amazon 凭据和开发区域中的信息配置了默认 Amazon 凭据。
获取存储桶的访问控制列表
要获取桶的当前 ACL,请调用 AmazonS3 的 getBucketAcl
方法,将桶名称 传递给它以进行查询。此方法返回一个AccessControlList对象。要获取列表中的每个访问授权,请调用其 getGrantsAsList
方法,这会返回一个包含 Grant 对象的标准 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;
代码
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); }
请参阅上的完整示例
设置存储桶的访问控制列表
要添加或修改存储桶对 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;
代码
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); }
注意
您可以使用 Grantee 类直接提供被授权人的唯一标识符,也可以使用该EmailAddressGrantee类通过电子邮件设置被授权者,就像我们在此处所做的那样。
请参阅上的完整示例
获取对象的访问控制列表
要获取对象的当前 ACL,请调用 AmazonS3 的 getObjectAcl
方法,将桶名称 和对象名称 传递给它以进行查询。比如getBucketAcl
,这个方法返回一个AccessControlList对象,你可以用它来检查每个 Grant。
导入
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;
代码
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); }
请参阅上的完整示例
设置对象的访问控制列表
要添加或修改对象对 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;
代码
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); } }
注意
您可以使用 Grantee 类直接提供被授权人的唯一标识符,也可以使用该EmailAddressGrantee类通过电子邮件设置被授权者,就像我们在此处所做的那样。
请参阅上的完整示例
更多信息
-
在 Amazon S3 API 参考中@@ 获取存储桶 acl
-
将存储桶 acl 放在 Amazon S3 API 参考中
-
在 Amazon S3 API 参考中@@ 获取对象 acl
-
在 Amazon S3 API 参考中@@ 放置对象 acl