2017年,美国信用评级机构 Equifax 遭受黑客攻击,导致1.4亿个人的敏感信息泄露;
2020年,发生了 SolarWinds 公司的软件供应链遭受恶意代码攻击事件,涉及多个行业和国家;
2022年,网信办依据《数据安全法》等法律法规,对滴滴公司开出人民币80.26亿元的巨额罚款,对互联网企业敲响数据安全警钟。
近年来,数据安全正在快速成为当今信息化时代一个备受关注的话题。在数字化快速发展的今天,各个领域都离不开数据的支撑,而数据安全问题也随之成为了一项重要的任务。企业、政府、学术机构等各种组织和个人都需要保护自己的数据免于泄露、丢失、篡改或被滥用等风险。
Hadoop 作为进入大数据领域的必备技术,由于自身的业务特点,一般都是部署在用户内网中,所以在早期设计的时候不是太注重安全方面的设计,而更多的专注于实现业务的功能。
作为领先的数字化基础软件与应用服务商袋鼠云,一直以来也高度重视数据安全问题,2022年12月,在自研的大数据计算引擎 EasyMR 上新增了一站式大数据应用安全防控以及数据权限管控能力。
基于此,EasyMR 可以实现一键部署安全管控服务,一键开启大数据集群组件的安全认证、用户管理以及权限管控服务。
本文就为大家展开介绍一下 EasyMR 具体是如何管理 Hadoop 数据安全的。
最早部署 Hadoop 集群时并没有考虑安全问题,未开启安全认证时,Hadoop 是以客户端提供的用户名作为用户凭证, 一般就是发起任务的 Unix 用户。线上机器部署服务通常会采用统一账号,当以统一账号部署集群时,所有执行 Hadoop 任务的用户都是集群的超级管理员,非常容易发生误操作。
即便是以管理员账号部署集群,恶意用户在客户端仍然可以冒充管理员账号执行。随着集群的不断扩大, 各部门对集群的使用需求增加,集群安全问题就显得颇为重要。Hadoop 的安全问题,一般包括以下两个方面:
· 用户认证(Authentication) 即是对用户身份进行核对, 确认用户是其声明的身份, 这里包括用户和服务的认证。
· 用户授权(Authorization) 即是权限控制,对特定资源,特定访问用户进行授权或拒绝访问,用户授权是建立在用户认证的基础上, 没有可靠的用户认证谈不上用户授权。
EasyMR Hadoop 的安全认证是基于 Kerberos 实现的,集成 LDAP 用户体系。 Kerberos 是一个网络身份验证协议,用户只需输入身份验证信息,验证通过获取票据即可访问多个接入 Kerberos 的服务,机器的单点登录也可以基于此协议完成。
Hadoop 本身并不创建用户账号,而是使用 Kerberos 协议来进行用户身份验证,从 Kerberos 凭证中的用户信息获取用户账号, 这样一来就跟实际用户运行的账号无关。
EasyMR 接管 Hadoop 安全主要使用以下两种账号管理方式:
原先我们使用单一账号作为集群管理员,且这一账号为线上统一登录账号, 这存在极大的安全隐患,我们需要使用特殊账号来管理集群。这里涉及的问题是,我们需要几个运维账号呢? 一种简单的做法是使用一个特殊运维账号, CDH 和 Apache官方也都推荐按服务划分账号来启动集群。
考虑到精细化控制可以有效避免误操作,EasyMR 遵循官方的建议使用多账号,使用 Hadoop 作为同一用户组,每个组件使用单独的用户。如果是从单一运维账号迁移到多个账号部署时,则需要考虑相关文件权限问题,包括本地以及 HDFS 两部分,可以在安全部署上线时完成相应改动。
EasyMR 组件服务运行的用户信息可以配置在产品包服务层级下,下图以服务 hdfs_namenode 为例:


考虑到每个团队下会有不同的小组,每个小组都有使用 Hadoop 来进行大数据处理需求,所以需要一定程度的多租户环境, 这里主要考虑其中的数据和操作的权限问题,EasyMR 集成了 LdapServer 目录服务系统,其功能优势具体体现如下:
• LdapServer 能够减少用户账户管理人员在面对用户数量大、增长快等问题的情况下对账号的创建、回收、权限管理、安全审计等一系列复杂而繁琐工作的压力。
• LdapServer 能够解决多层次、多类型系统、数据库的安全访问难题,所有与账号相关的管理策略均配置在服务端,实现了账号的集中维护和管理。
• LdapServer 能够充分继承和利用平台组织中现有的账户管理系统的身份认证功能,并实现了账户管理与访问控制管理的分离,提高了大数据平台访问认证的安全性。
EasyMR 可以支持 Hadoop,Hive,Spark,Ranger 组件开启Kerberos功能,每个组件的开启操作基本一致。下面以开启Hadoop Kerberos 功能为例为大家介绍EasyMR 具体是如何部署 Hadoop 安全的。

● 安装 zookeeper、openldap、kdc、Hadoop 服务
以安装 Hadoop 服务为例,选中需要安装的服务,点击下一步;

指定每个服务需要部署的节点,点击执行部署;

部署完成后,可以在节点检查目录的权限及组件的启动用户。

部署完服务后,需要按照 Kerberos 开启顺序依次开启。
● zookeeper 开关
首先在服务页面,选择 zookeeper 服务,在部署配置里面找到 Switch 开关项,切换开关状态,等待开关开启结果。

● Hadoop 开关
在服务页面,选择 hadoop pkg 服务,在部署配置里面找到 Switch 开关项,切换开关状态,等待开关开启结果,开启成功后,hadoop Kerberos 功能就成功启用了。

授权一般来说是由应用来决定的,通过在 LDAP 数据库中配置一些属性可以让应用程序来进行授权判断。EasyMR 在部署完 LdapServer 后,平台管理里面将会自动关联 LdapServer 的连接信息,用户只需选中对应的 LdapServer 连接,在对应的用户下点击下载票据即可。

《数据治理行业实践白皮书》下载地址:https://fs80.cn/380a4b
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/