本文旨在展示CDH基于Kerberos身份认证和基于Sentry的权限控制功能的测试示例。
1. 准备测试数据
1 2 3 4 5 6 | |
2. 创建用户
2.1. 创建系统用户
在集群所有节点创建系统用户并设置密码
1 2 3 4 5 6 | |
2.2. 创建kerberos用户
1 2 3 | |
3. 创建数据库和表
3.1. 创建数据库
admin为sentry的超级管理员,该用户配置权限时已设置
1 | |
通过beeline连接 hiveserver2,运行下面命令创建hive库的超级管理员角色, 并将该角色赋予admin组,使admin有操作hive库的权力
1 2 3 4 | |
创建两个测试数据库
1 2 | |
3.2. 创建表
在两个测试数据库中各创建一张测试表,并导入测试数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
4. 赋予用户权限
4.1. 给user1赋予db1的所有权限
1 2 3 | |
4.2. 给user2赋予db2的所有权限
1 2 3 | |
4.3. 给user3赋予db2.table1的所有权限
1 2 3 4 | |
5. 测试用户权限
5.1. Hive测试
5.1.1. admin用户拥有整个hive库的权限
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
5.1.3. user2用户只具有db2和default的权限
1 2 3 4 5 6 7 8 9 | |
5.1.4. user3用户只具有db2.table1和default的权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
5.2. Hdfs测试
配置hdfs acl与sentry同步后,hdfs权限与sentry监控的目录(/user/hive/warehouse)的权限同步
5.2.1. 切换到hive用户,查看hive库文件的权限
设置hdfs acl与sentry同步后,sentry监控的hive库的权限改动会同步到对应的hdfs文件权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | |
5.2.2. 切换到user1用户,查看hdfs文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
5.2.3. 切换到user2用户,查看hdfs文件
1 2 3 4 5 6 7 8 9 10 | |
5.3. Spark测试
5.3.1. Spark读hive表数据并打印到控制台
(1) 切换到user1用户测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
(2) 切换到user2用户测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
5.3.2. Spark读文件数据写入hive表中
调用工具程序spark.jar读本地文件/home/xdf/events.csv数据写到db2.table2
切换到user2用户测试
1 2 3 4 5 6 7 | |
成功!
写到db1.table1报错,没有权限!
1 | |
上面只是测试环境,因为kinit + 密码的方式有时效限制,不适合在生产环境运行,幸好spark提供了相关的参数:
1 2 3 4 | |
spark的权限管理通过对hdfs/hive的文件目录设置权限来管理,不同的用户拥有不同的权限,用户在提交spark任务时,指定对应用户的kerberos principle和keytab来实现权限管理。任务提交命令如下:
1 | |
其中--principal 和--keytab与用户一一对应
注意:spark-submit只有在yarn-cluster模式下,--principal 和--keytab才有效
5.4. Kafka测试
5.4.1. 认证
用户kafka为kafka权限控制的超级管理员
1 | |
5.4.2. 创建topic
创建topic1和topic2
1 2 | |
5.4.3. 赋权
给user1用户附topic1的读写权限
1 2 | |
给user2用户附topic2的读写权限
1 2 | |
5.4.4. 查看权限
1 2 3 4 5 6 7 | |
5.4.5. 创建生产消费配置文件
创建consumer.properties
1 2 3 4 5 | |
创建producer.properties
1 2 3 4 | |
5.4.6. 生产数据
命令行生产数据
1 2 3 4 | |
5.4.7. 消费数据
命令行消费数据
1 2 3 4 | |
用户对topic没有权限时报错
1 2 3 4 5 | |
5.4.8. 移除权限
登陆管理员用户移除权限
1 | |
删除user1对topic1的消费权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
测试user1消费topic1报错,说明权限已经移除
1 2 3 4 5 6 7 8 9 10 11 12 | |