Apache Sentry最初由Cloudera公司内部开发,针对Hadoop系统中的数据(主要是HDFS、Hive的数据)进行细粒度控制,对HDFS、Hive以及Impala有着良好的支持性。2013年Sentry 成为 Apache 的孵化项目,为 Hadoop 集群元数据和数据存储提供集中、细粒度的访问控制。其架构包括DataEngine、Plugin、Policy metadata等部分,Plugin负责和Sentry Server通信以同步权限策略信息,并包含认证引擎模块进行权限验证,Sentry Server中还有audit模块记录请求访问记录。
项目地址:https://cwiki.apache.org/confluence/display/SENTRY/Home
一、基本原理
1.权限定义:明确不同类型的权限,如对 Hive 表的查询、插入、更新、删除权限,对 HDFS 文件的读写权限等。
2.角色关联:将定义好的权限组合成角色,例如“分析师”角色可能拥有对某些特定数据集的查询权限。
3.用户映射:将用户或用户组与相应的角色关联起来,这样用户就继承了角色所拥有的权限。
4.动态检查:在用户发起数据访问请求时,Sentry 会动态检查该用户是否具有相应的权限,只有通过权限验证的请求才会被允许执行。
二、技术架构
1.Sentry Server:作为核心组件,负责管理所有的权限信息,包括角色、权限、用户与角色的映射关系等。它接收来自客户端的权限验证请求,并根据存储的权限信息进行判断。
2.Plugin:不同的 Hadoop 组件(如 Hive、HDFS、Impala 等)通过各自的 Plugin 与 Sentry Server 进行通信。当用户在这些组件中发起数据访问操作时,Plugin 会拦截请求,并将请求转发给 Sentry Server 进行权限验证。
3.Policy Store:用于存储权限策略信息,通常可以是关系型数据库(如 MySQL)。Sentry Server 从 Policy Store 中读取和更新权限信息。
4.Audit Logging:记录所有的权限验证请求和结果,方便进行安全审计和监控。
三、不足之处
1.性能开销:由于每次数据访问都需要进行权限验证,会增加一定的性能开销,尤其是在高并发场景下,可能会影响系统的响应速度。
2.配置复杂性:对于复杂的权限策略,配置和管理起来较为繁琐,需要对 Sentry 的架构和配置有深入的了解。
3.组件兼容性:虽然支持多种 Hadoop 组件,但在与一些新兴的或非标准的组件集成时,可能会遇到兼容性问题。
4.缺乏动态性:权限的更新和修改不能实时生效,需要一定的时间来同步,可能无法满足对实时性要求较高的业务场景。
四、安全集成
1.与Kerberos集成
Kerberos是一种网络认证协议,用于在不安全的网络环境中提供强身份验证。Apache Sentry与Kerberos集成时,可借助Kerberos对用户进行身份认证。
当用户通过Kerberos获取到身份票据后,在访问受Sentry保护的资源时,Sentry会与Kerberos进行交互,验证用户身份的合法性,确保只有经过认证的用户才能进行后续的权限验证和数据访问。
2.与Apache Knox集成
Apache Knox是Hadoop生态系统的网关服务,提供了统一的安全访问入口。Sentry可以与Knox集成,将权限控制功能扩展到通过Knox访问的各种Hadoop资源。
当用户通过Knox访问Hadoop集群中的数据时,Knox会拦截请求,并将相关的用户信息和请求信息传递给Sentry进行权限验证。Sentry根据配置的权限策略,判断用户是否有权访问请求的资源,然后将结果返回给Knox,由Knox决定是否允许请求通过。
3.与Apache Ranger集成
Apache Ranger是一个用于管理Hadoop生态系统中数据安全和权限的框架。虽然Sentry和Ranger都提供权限管理功能,但它们的侧重点有所不同,Sentry主要侧重于Hive、Impala等特定组件的权限管理,而Ranger提供了更全面、更灵活的跨组件权限管理。
两者可以集成,例如在一些场景中,可以使用Ranger来管理HDFS等底层存储的权限,而使用Sentry来管理Hive、Impala等上层应用的权限。通过这种方式,可以实现从底层存储到上层应用的端到端数据权限管理,提供更统一、更精细的安全控制。
4.与LDAP集成
轻量级目录访问协议(LDAP)通常用于存储和管理用户身份信息和组织结构。Apache Sentry可以与LDAP集成,将用户和组信息从LDAP目录中同步到Sentry的权限管理系统中。
这样,在Sentry中进行权限配置和用户角色分配时,可以直接基于LDAP中的用户和组信息进行操作,避免了在Sentry中重复维护用户和组数据。同时,当LDAP中的用户信息发生变化时,Sentry可以及时感知并更新相关的权限信息,保证权限管理的准确性和实时性。
五、应用场景
在企业的数据仓库中,不同部门的员工对数据的访问需求不同。例如,财务部门员工可以访问财务数据,而销售部门员工只能访问销售相关数据。Apache Sentry 可以对不同部门的员工进行细粒度的权限控制,确保数据的安全性和合规性。
在云计算或多租户的数据平台中,不同租户需要隔离和控制对共享数据资源的访问。Sentry 可以为每个租户定义独立的角色和权限,实现租户之间的数据隔离和安全访问。
在数据共享平台中,数据所有者可以通过 Sentry 为不同的用户或用户组分配不同的权限,控制数据的共享范围和使用方式,保护数据的隐私和知识产权。
1.金融行业
客户信息管理:银行等金融机构需要严格保护客户的个人信息和财务数据。Apache Sentry可以根据员工的职位和职责,精确授予对客户信息的访问权限。例如,客服人员只能查看客户的基本联系信息和账户状态,而信贷专员可以访问客户的信用记录和财务报表等敏感信息。
交易数据监控:在证券交易等场景中,不同部门的人员对交易数据的访问需求不同。风险控制部门需要实时监控所有交易数据以检测异常交易,而市场营销部门可能只需要访问部分交易数据来分析市场趋势。Apache Sentry可以为不同部门的人员分配相应的权限,确保交易数据的安全和合规使用。
2.医疗行业
电子病历管理:医院的电子病历系统包含了患者的大量敏感信息,如病情诊断、治疗记录、个人隐私等。Apache Sentry可以根据医护人员的角色和职责,限制对电子病历的访问权限。例如,医生可以查看和修改自己患者的病历,护士可以查看患者的基本信息和护理记录,而行政人员只能查看统计数据,不能访问具体的患者病历内容。
医学研究数据共享:在医学研究中,可能需要共享一些患者数据用于科研目的,但需要保护患者的隐私。Apache Sentry可以对参与研究的人员进行权限管理,只允许他们访问经过匿名化处理且与研究相关的数据,确保患者数据的安全和隐私。
3.互联网公司
用户数据保护:互联网公司拥有大量的用户数据,包括用户的个人信息、行为数据、偏好设置等。Apache Sentry可以帮助公司保护用户数据的安全,根据员工的工作需要授予不同级别的访问权限。例如,数据分析师可以访问汇总后的用户行为数据进行数据分析,而产品经理只能查看与产品相关的用户反馈和统计信息,禁止直接访问用户的个人敏感信息。
广告数据管理:对于广告业务,不同团队对广告数据的访问需求不同。广告投放团队需要实时了解广告的投放效果和数据,以便及时调整策略;而财务团队则需要查看广告收入和成本数据进行核算。Apache Sentry可以为不同团队设置相应的权限,确保广告数据的安全和有效利用。