开启Hadoop安全认证之后的问题及解决方案简述

这篇博客主要记录在开启Hadoop安全认真之后的一些痛点和解决方案的概述。而非讨论为什么需要开启Hadoop安全认证或者Hadoop安全机制架构和实现。


Linux,Kerberos,OpenLDAP用户信息的集中管理

Hadoop安全模块不存储用户和用户组信息,而是依赖Linux系统的用户和用户组。同时,在开启安全认证模式之后,需要映射kerberos principle到Linux user account以及映射user account到user group。随之而来的问题是如何统一管理用户信息。

可选方案:

  1. 管理用户信息在Linux,Kerberos和OpenLDAP依赖Linux的用户信息:No,需要重复管理所有Linux系统的用户信息
  2. 管理用户信息在Kerberos,Linux和OpenLDAP依赖Kerberos的用户信息:No,Kerberos不支持用户组
  3. 管理用户信息在OpenLDAP,Linux和Kerberos依赖OpenLDAP的用户信息:Yes
    • Linux 依赖OpenLDAP的用户信息:使用 PAM 集成 OpenLDAP 实现Linux 统一管理系统用户 http://www.ibm.com/developerworks/cn/linux/1406_liulz_pamopenldap/
    • Kerberos依赖OpenLDAP的用户信息:https://web.mit.edu/kerberos/krb5-1.13/doc/admin/conf_ldap.html

Apache Hive权限管理

Hive背后有不同的data storage,如hdfs,hbase。如果不依赖于类似Apache Sentry的产品,需要依赖背后的data storage的ACL进行权限管理,如用户查询hdfs-based hive table时,需要有对hdfs数据的read权限。此时的痛点在于对Hive schema的管理,例如防止用户误删或者修改table,view。解决这一问题,比较有效和易于理解的方式是使用Storage-System Based Authorization - https://cwiki.apache.org/confluence/display/Hive/HCatalog+Authorization。这个解决方案的limitation是在创建external table时,也需要对data storage有创建权限(如hdfs的folder,hbase的table)。

Apache HBase权限管理

问题:HBase开启安全模式之后,需要Grant权限给到特定User或User Group,无法实现grant某一个namespace给到所有用户,如grant ALL, '@namespace1'.

解决方案:在创建Hadoop用户时,为用户添加默认组,如 hadoop-user。

客户端Java安全访问

在Windows下,需要使用java目录下的kinit,而不是MIT kerberos。

客户端Python安全访问

Thrift相比于restful有更好的执行效率,大部分Hadoop组件都通过Thrift实现了数据访问,如Hive和Hbase的Thrift server。如果要基于Python实现Thrift客户端,难点在于Kerberos认证。Python下,kerberos的认证主要有如下两种方案, 但是都不支持windows。 
1) kerberos(python package) >> pure-sasl(python package) >> thrift (python package)

2) cyrus-sasl-*, saslwrapper, python-saslwrapper(Linux libs) >> sasl(python package) >> thrift-sasl(python package) >> thrift(python package)

另外一个问题是,当需要实现一些长时间运行的程序时(超过TGT的lifetime),需要额外实现renew TGT,并重新创建Thrift连接。

你可能感兴趣的:(Hadoop,-,安全管理)