CDH构建大数据平台-配置集群的Sentry授权安全
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
虽然HDFS授权和使用ACL的服务级授权确实在Hadoop用户授权方面起着至关重要的作用,但是在Hadoop中确实没有总体授权系统。之前我分享了使用Kerberos配置大数据集群的认证安全。本篇博客用来讲解大数据集群的授权安全。认证安全是解决谁可以访问集群,而授权安全是用来解决可以访问集群的人(即经过安全认证的人)能做什么样的事情。
Apache Sentry力图为Hadoop环境提供统一的授权方式,从而Hadoop管理员可以准确指定用户在Hadoop系统中可以执行的操作。Sentry基于角色的访问系统使管理员能够在细粒度级别控制用户访问。为了在集群中设置细粒度授权,必须对数据进行分类,并指定需要访问特定数据集的用户及所需的访问级别。可以综合使用Hive和Sentry来指定细粒度的授权。
一.Sentry基础
1>.什么是Sentry
Apache Sentry为存储在HDFS中的数据提供了细粒度的基于角色的授权。
Sentry为HDFS数据提供基于角色授权控制(RBAC)。
Sentry目前可以与Apache Hive、Hive Metastore/ HCatalog、Apache Solr、Impala和HDFS良好结合。 Sentry被设计作为Hadoop组件的可插拔授权引擎。它允许用户定义授权 规则,来验证用户或应用对Hadoop资源的访问请求。Sentry是高度模块 化的,可以支持Hadoop中各种数据模型的授权。
2>.Sentry相关概念
Authentication
验证凭证以可靠地鉴别一个用户
Authorization
限制一个用户对给定资源的存取权限
User
通过底层认证系统来识别的个体
Group
一组User,由认证系统管理
Privilege
一条指令或规则,以允许对某对象的存取
Role
一组Privilege,或一个包含多条存取规则的模版
Authorization models
定义了受授权规则约束的对象和允许操作的粒度 如在SQL模型中,对象可以是数据库或表,操作 可以是SELECT、INSERT、CREATE。在Search模 型中,对象可以是索引、配置、集合、文档,操 作可以是query和update。
3>.授权过程主要有三个部件参与
Sentry Server:
Sertry RPC Server管理授权元数据。它支持检索和操作元数据的安全接口。在CDH5.13及以上,可以配置多个Sentry Server以获得高可用性。
Data Engine:
是一个数据处理应用,例如Hive或Impala,其需要授权访问数据或元数据资源。Data Engine加载Sentry Plugin,所有访问资源的客户端请求都被截获并路由到Sentry Plugin进行验证。
Sentry Plugin:
在Data Engine中运行。它????供了处理Sentry Server 中存储的授权元数据的接口,并且包括了使用从服务器检索的授权元数据来评估访问请求的授权策略引擎。
4>.Sentry的授权控制过程
Sentry依靠底层认证系统来鉴别用户,如Kerberos或LDAP。它也使用Hadoop中配置的组映射机制,以保证Sentry和其他Hadoop组件看到相同的组映射。 Sentry使用基于角色的存取控制(RBAC),这是一种企业内管理大量用户和数据对象的授权的有力机制。当建立一个新用户时,只需将其加入一个指定的组,即可使该用户具备该组所拥有的所有角色。 因此Sentry的授权控制过程为: 1>.建立用户时,为其分配一个组(通过操作系统或LDAP); 2>.创建Sentry的角色; 3>.将一个或多个细粒度的权限赋给角色; 4>.将一个或多个角色赋给组。这样,该组下的用户就具备这些角色所对应的权限了;
二.Sentry的配置
1>.添加虚拟机主机对应的解析
2>.Hue中导入测试数据
详情请参考:https://www.cnblogs.com/yinzhengjie/p/10940648.html
3>.添加Sentry服务
详情请参考:https://www.cnblogs.com/yinzhengjie/p/11138776.html
三.配置Sentry授权实战案例
1>.在集群的每个节点创建相应的用户和组
[root@node101.yinzhengjie.org.cn ~]# ansible cdh --list-hosts hosts (3): node101.yinzhengjie.org.cn node102.yinzhengjie.org.cn node103.yinzhengjie.org.cn [root@node101.yinzhengjie.org.cn ~]#
[root@node101.yinzhengjie.org.cn ~]# ansible cdh -m shell -a 'groupadd selector' node101.yinzhengjie.org.cn | SUCCESS | rc=0 >> node103.yinzhengjie.org.cn | SUCCESS | rc=0 >> node102.yinzhengjie.org.cn | SUCCESS | rc=0 >> [root@node101.yinzhengjie.org.cn ~]#