我们宣布
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
管理对桶和对象的 Amazon S3 访问权限
您可以为 Amazon S3 存储桶和对象使用访问控制列表 (ACL),以实现对 Amazon S3 资源的精细控制。
注意
这些代码示例假定您了解使用Amazon SDK for Java 中的内容,并且已使用设置用于开发的 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); }
请参阅 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;
代码
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 类通过电子邮件设置被授权者,这里采用后者。
请参阅 GitHub 上的完整示例
获取对象的访问控制列表
要获取对象的当前 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); }
请参阅 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;
代码
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 类通过电子邮件设置被授权者,这里采用后者。
请参阅 GitHub 上的完整示例
更多信息
-
《Amazon S3 API Reference》中的 GET Bucket acl
-
《Amazon S3 API Reference》中的 PUT Bucket acl
-
《Amazon S3 API Reference》中的 GET Object acl
-
《Amazon S3 API Reference》中的 PUT Object acl