暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Ozone Native ACL的特性及应用

数据湖技术 2020-05-10
771

1 简介

 Ozone目前支持本地的访问控制(Native ACLs)以及基于Ranger的访问控制。本文我们主要介绍Native ACL的特性及应用。

2 功能及特性介绍

2.1 Native ACL权限分类

作为一个对象存储系统,Ozone Native ACL的实现跟Hadoop ACL有较大区别。Ozone整体分为Volume、Bucket、Key这三个层级。其中Volume类似于用户的Home目录,其下可以包含多个Bucket。Bucket类似于S3的Bucket,其下存储Key和Value。三者关系如下:

Volume -  e.g. /volume
Bucket - e.g. /volume/bucket1, /volume/bucket2
Key - e.g. /volume/bucket1/key1, /volume/bucket1/key2

在这三个层级上都有单独的Native ACL,目前Ozone支持的ACL操作有如下几类:
1、Create – 允许用户创建volume下bucket、bucket下key。注意开启acl之后只有超级用户拥有创建volume的权限(通过ozone.administrators指定)。
2、List – 允许用户获取volume下的bucket,以及bucket下的keys列表。有volume权限的普通用户及超级用户,能够查看volume列表。
3、Delete – 允许用户删除volume、bucket、key
4、Read – 允许用户读取volume、bucket、key的metadata, 以及key的真实数据。
5、Write - 允许用户修改volume、bucket的metadata,以及overwrite已存在的key。
6、Read_ACL – 允许用户获取volume、bucket、key的ACL信息.
7、Write_ACL – 允许用户修改volume、bucket、key的ACL信息.
8、ALL – 允许用户拥有以上所有权限.

另外Ozone提供了如下api来进行ACL的设置: 

1、addacl – 在已有acl中添加新的ACL
2、removeacl – 在已有acl中移除部分ACL
3、setacl – 重置已有ACL
4、getacl – 获取ACL info。

2.1 Native ACL的原理及特性

Ozone目前是将用户的acl信息保存在volume、bucket、key的info当中。如果一个用户A拥有bucket的写权限,那么他就能够在该bucket下写入key,新写入的key默认的只有用户A有权限(ALL)操作(超级用户也无权操作)。用户B若想访问该key需要由用户A给其授权。实现原理如下:

需要注意的是若用户A通过s3g去创建volume、bucket及key,Ozone会默认将s3g超级用户(OzoneS3Manager)添加到acl中,用户A及OzoneS3Manager权限均为ALL如下:

[ {
"type" : "USER",
"name" : "userA",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "USER",
"name" : "OzoneS3Manager",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
} ]

另外ozone已支持权限继承,这是个非常不错的功能。用户可以在volume及bucket上设置default rule,后续新写入的key都会继承该权限。比如:可以在volume及bucket设置user:test:a[DEFAULT],那么通过任何用户新写入的key,都会给test用户加上ALL的权限,即用户test可以操作该bucket下的所有key。具体用法我们在3.2的使用中介绍。

3 Native ACL的应用

3.1 启用Native ACL

在ozone-site.xml中加入以下配置,并重启om。即可启用Ozone Native ACL:

<property>
<name>ozone.acl.enabled</name>
<value>true</value>
</property>
<property>
<name>ozone.acl.authorizer.class</name>
<value>org.apache.hadoop.ozone.security.acl.OzoneNativeAuthorizer</value>
</property>
<property>
<name>ozone.administrators</name>
<value>root</value>
</property>

3.2 Native ACL的使用

1、启用ACL后可以使用超级用户预先创建volume,以上配置的超级用户是root,创建完volume之后其默认的权限是:

[root@ozone1 ~]$ozone sh volume getacl volume1
[{
"type" : "USER",
"name" : "root",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}]

2、其他用户userA、userB若想操作该volume1,在其中创建bucket并写入key,则需要由root给其添加权限如下:

[root@ozone1 ~]$ozone sh volume addacl volume1 -a user:userA:a
[root@ozone1 ~]$ozone sh volume addacl volume1 -a user:userB:a
[root@ozone1 ~]$ozone sh volume getacl volume1
[{
"type" : "USER",
"name" : "root",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "USER",
"name" : "userA",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "USER",
"name" : "userA",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}]

3、此时可使用userA操作该volume1,可以创建bucket1,然后向其中写入key。写入key之前我们可以先设置userB的权限继承。让userB拥有所有新写入key的操作权限。具体操作及结果如下:

[userA@ozone1 ~]$ozone sh bucket create volume1/bucket1
[userA@ozone1 ~]$ozone sh bucket addacl volume1/bucket1 -a user:userB:a[DEFAULT]
[userA@ozone1 ~]$ozone sh bucket getacl volume1/bucket1
[ {
"type" : "USER",
"name" : "userA",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "USER",
"name" : "userB",
"aclScope" : "DEFAULT", //此时userB的aclScope为DEFAULT
"aclList" : [ "ALL" ]
}]
[userA@ozone1 ~]$ozone sh key put volume1/bucket1/hosts /etc/hosts
[userA@ozone1 ~]$ozone sh key getacl volume1/bucket1/hosts
[ { // 可以看到未给userB单独授该key的权限,userB通过权限继承也能获取到响应权限。
"type" : "USER",
"name" : "userA",
"aclScope" : "ACCESS",
"aclList" : [ "ALL" ]
}, {
"type" : "USER",
"name" : "userB",
"aclScope" : "ACCESS", //此时userB的aclScope为ACCESS
"aclList" : [ "ALL" ]
}]

以上仅仅演示了Native ACL大致使用流程,像其他ACL api的使用可以参考shell的help提示。另外Native ACL更多的是跟认证结合使用,目前Ozone本身支持kerberos认证,后面的文章中我们将会对此进一步介绍。

参考

[1]Hadoop原生对象存储Ozone

[2]https://hadoop.apache.org/ozone/docs/0.5.0-beta/security/securityacls.html

[3]https://issues.apache.org/jira/browse/HDDS-1544 

欢迎关注“数据湖技术”公众号,更多精彩待续!


腾讯大数据诚招计算、存储、消息中间件、调度、中台等各方向的大数据研发工程师,请私信或联系jerryshao@tencent.com。

文章转载自数据湖技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论