基于ambari 2.4.1 HDP-2.5.0 构建安全的hive数据库
基本条件:
1. 利用ambari 启用kerberos
基本原理:
hadoop 代理机制:hadoop 可以使用"超级"用户,伪装为其他用户提交程序。且可以通过配置对被伪装的用户限定用户名,用户组和IP(或主机名)
详细参考http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/Superusers.html
hadoop 代理机制中限定权限的配置,其中的hive为hiveserver运行用户. 对组,用户,和hosts具有多个值的用','分开。'*'表示不限制
hadoop.proxyuser.hive.groups
hadoop.proxyuser.hive.users
hadoop.proxyuser.hive.hosts
具体方案:
1. 通过kdc统一管理hive用户,以文件或密码的文件提供给客户端进行认证
2. 通过hadoop.proxyuser.hive.groups/users/hosts 对用户进行hdfs级别的登陆限制
3.
验证步骤
本示例演示在系统中添加hdp用户,并通过beeline进行测试
1. 在kdc中分配principal用户,并导出keytab拷贝到客户端 (core-site.xml 中的hadoop.security.auth_to_local会把hdp/xj3@EXAMPLE 解析为hdp用户 )
2. 获取ticket
kinit -kt /tmp/hdp.xj3.keytab hdp/xj3
3. 连接
beeline
显示错误信息
Error: Failed to open new session: java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hive/
[email protected] is not allowed to impersonate hdp (state=,code=0)
4. 需要在namenode上创建hdp用户,并hadoop.proxyuser.hive.groups或hadoop.proxyuser.hive.users权限,具体配置如下
hadoop.proxyuser.hive.users hdp
在客户端用beeline 重新测试
备注:
使用参数
hadoop.security.auth_to_local
hive.server2.authentication.kerberos.keytab /etc/security/keytabs/hive.service.keytab
hive.server2.authentication.spnego.keytab /etc/security/keytabs/spnego.service.keytab
hive.server2.authentication KERBEROS
hive.server2.enable.doAs true
hive.server2.thrift.port 10000
hive.server2.thrift.http.port 10001
hive.server2.transport.mode binary
注意事项:
如果通过group限制对hdfs的访问,需要在namenode上建立相应用户,以及对应的组
例如:hadoop.proxyuser.hive.groups 参数为hdfs,bdg
当有用户提交提交程序时,hdfs 会在namenode上查看主机中用户的组为bdg,如果不是就不予认证
https://github.com/apache/hive/blob/master/beeline/src/test/org/apache/hive/beeline/ProxyAuthTest.java