Ozone 既支持类似 Ranger 这样的 ACL 插件,也支持原生的 ACL。如果需要启用原生的 ACL,在 ozone-site.xml 中添加下面的参数:
| Property | Value |
|---|---|
| ozone.acl.enabled | true |
| ozone.acl.authorizer.class | org.apache.hadoop.ozone.security.acl.OzoneNativeAuthorizer |
Ozone 的 ACL 是 Posix ACL 和 S3 ACL 的超集。
ACL 的通用格式为 对象:角色:权限:范围.
对象 可选的值包括:
角色 可选的值包括:
权限 可选的值包括::
范围 可选的值包括::
ACL 可以通过 Ozone 提供的一系列 API 进行操作,支持的 API 包括:
还可以使用 ozone sh 命令来操作 ACL。
用法 : ozone sh <object> <action> [-a=<value>[,<value>...]] <object-uri>
-a 表示以逗号分隔的 ACL 列表。除了 getacl 之外的所有子命令都需要它。
<value> 的格式为 type:name:rights[scope]。
type 可以是 user, group, world 或 anonymous。
name 是用户/组的名称。如果 type 为 world 和 anonymous,则 name 应留空或分别为 WORLD 或 ANONYMOUS。
rights 可以是 (读取=r, 写入=w, 删除=d, 列举=l, 全部=a, 毫无=n, 创建=c, 读 ACL=x, 写 ACL=y)。
scope 可以是 ACCESS 或 DEFAULT. 如果不指定,默认 ACCESS。
$ ozone sh bucket setacl -a user:testuser2:a /vol1/bucket1 ACLs set successfully. $ ozone sh bucket setacl -a user:om:a,group:om:a /vol1/bucket2 ACLs set successfully. $ ozone sh bucket setacl -a=anonymous::lr /vol1/bucket3 ACLs set successfully. $ ozone sh bucket setacl -a world::a /vol1/bucket4 ACLs set successfully.
$ ozone sh bucket getacl /vol1/bucket2 [ { "type" : "USER", "name" : "om/om@EXAMPLE.COM", "aclScope" : "ACCESS", "aclList" : [ "ALL" ] }, { "type" : "GROUP", "name" : "om", "aclScope" : "ACCESS", "aclList" : [ "ALL" ] } ]
$ ozone sh bucket addacl -a user:testuser2:a /vol1/bucket2 ACL user:testuser2:a[ACCESS] added successfully. $ ozone sh bucket addacl -a user:testuser:rxy[DEFAULT] /vol1/bucket2 ACL user:testuser:rxy[DEFAULT] added successfully. $ ozone sh prefix addacl -a user:testuser2:a[DEFAULT] /vol1/buck3/dir1/ ACL user:testuser2:a[DEFAULT] added successfully.
$ ozone sh bucket removeacl -a user:testuser:r[DEFAULT] /vol1/bucket2 ACL user:testuser:r[DEFAULT] removed successfully.