设置对象访问权限

与桶访问权限类似,对象访问权限同样具有 CannedAccessControlList 与 AccessControlList 两种。需要注意的是,对象的访问优先级要高于桶访问权限。比如桶访问权限是 private,但是对象访问权限是 public read,则所有用户都可以访问该对象。默认情况下,只有对象的拥有者才能访问该对象,即对象的访问权限默认是 private。

  • CannedAccesssControlList

CannedAccesssControlList 格式的对象访问权限包含了:Private(私有读写),PublicRead(公共读私有写),PublicReadWrite(公共读写)。

权限 Java SDK对应值
私有读写 CannedAccessControlList.Private
公共读私有写 CannedAccessControlList.PublicRead
公共读写 CannedAccessControlList.PublicReadWrite
注册用户可读 CannedAccessControlList.AuthenticatedRead

使用 CannedAccesssControlList 设置桶的访问权限示例代码如下:

//设置为公共读写
String bucketName = "<your-bucket-name>";
String objectKey = "<your-object-key>";
s3.setObjectAcl(bucketName, objectKey, CannedAccessControlList.PublicReadWrite);
  • AccessControlList

使用 AccessControlList 设置对象访问权限时,可以设置特定用户对象的访问权限。对象的 AccessControlList 权限如下表:

权限 Java SDK对应值
可读取object的数据。 Permission.Read
对object无效 Permission.Write
可读取object的acl规则。 Permission.ReadAcp
可修改object的acl规则。 Permission.WriteAcp
完全权限。以上的所有权限 Permission.FullControl

使用AccesssControlList设置对象的权限示例代码如下:

String bucketName = "<your-bucket-name>";
String objectKey = "<your-object-key>";
try {
    AccessControlList acl = s3.getObjectAcl(bucketName, objectKey);//获取原有对象访问权限,在此基础上添加权限
    Grant grant = new Grant(GroupGrantee.AllUsers, Permission.Read);//开启所有用户的读权限
    acl.grantAllPermissions(grant);
    CanonicalGrantee canonicalGrantee = new CanonicalGrantee("user-id");//开启用户user-id的完全控制权限
    acl.grantPermission(canonicalGrantee,Permission.FullControl);
    s3.setObjectAcl(bucketName, objectKey, acl);
} catch (AmazonServiceException e) {
    System.err.println(e.getErrorMessage());
}