管理Amazon S3对存储桶和对象的访问权限 - AWS SDK for Java

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

管理Amazon S3对存储桶和对象的访问权限

您可以为 Amazon S3 存储桶和对象使用访问控制列表 (ACL),以实现对 Amazon S3 资源的精细控制。

注意

这些代码示例假设你了解中的材料使用AWS SDK for Java并且已配置默认值AWS使用中的信息的凭据设置AWS发展凭证和区域.

获取存储桶的访问控制列表

要获取存储桶的当前 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 上的完整示例

更多信息