设置对象访问权限
与桶访问权限类似,对象访问权限同样具有 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());
}