Hadoop加密静态及传输数据
2016-11-26
引言:敏感数据在传输过程中,从终点传输到集群时,或者在企业数据从集群中的一个节点转移到另一个节点时,都必须受到保护。有一些方案可以为静态和传输的数据进行数据加密,从而使企业不仅可以满足合规要求,更为重要的是,还可以保护信息资产的安全。
在真正的大数据环境中,有很多其他的数据源、数据暂存区域、临时文件和日志文件都保存着HDFS之外的敏感数据。当然,敏感数据在传输过程中,从终点传输到集群时,或者在企业数据从集群中的一个节点转移到另一个节点时,都必须受到保护。有一些方案可以为静态和传输的数据进行数据加密,从而使企业不仅可以满足合规要求,还可以保护信息资产的安全。
Apache Hadoop传输加密
确保Apache Hadoop集群安全的首要一步是支持传输加密,这是为日后增加的每一个其他的安全层的基础。认证和Kerberos依赖于通信安全,所以在深入支持认证和Kerberos之前,必须支持数据传输的加密。
Apache Hadoop并非是“铁板一块”的应用,正相反,它要涉及Pig和Hive直至Impala及Kudu等。这些服务可能与包括RPC、TCP/IP等协议在内的不同协议通信,而且每种协议都有加密数据的不同方法。使用Web的都不会对浏览器地址栏中的“https://”及其旁边的锁头标志感到陌生。与之类似的是,要实现Hadoop中的安全通信,需要支持使用协议的安全版本。
RPC/SASL
对于与RPC通信的组件来说,需启用SASL来保护传输中的RPC数据。SASL是通过在core-site.xml文件中设置hadoop.rpc.protection属性来启用,在启用此选项时有三个选项:
认证:提供双方间的身份验证;
完整性:提供双方间的身份验证和消息的完整性;
私密性:除提供认证和完整性之外,还提供机密性。
当然,用户可能希望选用最安全的选项,所以下面就看看在core-site.xml文件的内容:
改变此属性后,在集群中的所有后台程序均需重新启动,以确保所有各方都通过相同的加密协议进行通信。
TCP/IP
由于Hadoop 的数据协议用于通过集群数据节点发送和接收数据,这种协议使用直接的TCP/IP套接字,并且支持通过密钥(由RPC进行交换)进行加密通信。为支持TCP/IP加密的数据流,用户需在hdfssite.xml配置文件中将dfs.encrypt.data.transfer属性设置为“true”。这种配置的变化也必须在NameNode和 DataNodes中做出改变:
还可选择配置加密密码;在此案例中,已经配置了更安全的AES-256算法。
在改变了这种属性后,集群中的NameNode 和DataNode后台程序都需要重新启动。
TLS/HTTPS
不同的Hadoop组件都是用不同的编码语言开发的,例如,MapReduce用Java开发,因而SSL/TLS可以用不同的方法进行配置。此例中检查启用MapReduce v2的WebUI的加密。
为启用MapReduce v2的加密WebUI,需要编辑 core-site.xml文件,将hadoop.ssl.enabled属性设置为”true”:
为启用MapReduce v2的shuffle,用户需要编辑mapred-site.xml文件并将
mapreduce.shuffle.ssl.enabled属性设置为“true”:
除此之外,还有证书问题、信任存储以及其他SSL/TLS配置。但是,由于此文只是从一个较高的层次上进行概览而不讨论细节,而是仅仅指出用户需要从活动目录管理员或内部的CA获得SSL/TLS证书后,用正确的值来修改ssl-server.xml和ssl-client.xml文件。
HDFS外的静态数据加密
在启用了所有Apache Hadoop组件中的传输数据和静态数据加密后,用户需要配置的最后一方面就是HDFS之外的数据加密。
虽然有些企业可能会考虑加密硬盘,但并不普遍,而且还要求专门的和更为昂贵的硬件。相反,可以充分利用Linux的本地静态数据加密特性,即dm-crypt。
通 过dm-crypt和LUKS用户可以创建一个加密的块设备,使其位于用户的标准存储设备之上,并且在其读写文件时对数据进行加密或解密。虽然由于Cryptsetup等工具的使用可以使建立dm-crypt块设备相当简单,但加密口令的存储和保护并非不重要,并且要求谨慎规划和测试。