什么是HDFS透明加密

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

1.概述


数据加密是安全级别要求较高企业所必须的,比如说金融行业,医疗行业或者政府。我们知道HDFS中的数据会以block的形式保存在各台数据节点的本地磁盘中,但这些block都是明文的,如果在操作系统下,直接访问block所在的目录,通过Linux的cat命令是可以直接查看里面的内容的,而且是明文。

我们知道在Hadoop集群中,可以通过开启Kerberos/LDAP来实现用户身份的认证,通过Sentry/Ranger实现数据访问的权限控制。但是这些其实无法控制非法用户在操作系统层面直接访问数据,比如直接拷走disk里的所有block文件,这些都是明文,是可以直接查看的。这个时候我们就需要对关键数据进行加密,让非法用户即使从操作系统层面拷走文件,也是密文,没法查看。

HDFS支持端到端的透明加密,启用以后,对于一些需要加密的HDFS目录里的文件可以实现透明的加密和解密,而不需要修改用户的业务代码。端到端是指加密和解密只能通过客户端。对于加密区域里的文件,HDFS保存的即是加密后的文件,文件加密的秘钥也是加密的,HDFS不会存储和直接访问秘钥。

HDFS的透明加密支持两种方式的加密:静态(at-rest)数据加密,比如持久化保存在磁盘上的数据,传输(in-transit)数据加密,比如通过网络传输的数据。

2.背景


传统数据管理软件或者硬件的加密包含了不同的层级,在不同的层级加密有不同的优点和缺点。

1.应用层加密,这是最安全也是最灵活的方式。加密内容最终由应用程序来控制,并且可以精确的反映用户的需求。但是,编写应用程序来实现加密一般都比较困难,而且有些应用程序可能不支持加密。

2.数据库层加密,类似于应用程序加密。大多数数据库厂商都提供某种形式的加密,但是可能会有性能问题,另外比如说索引没办法加密。

3.文件系统层加密,这种方式对性能影响不大,而且对应用程序是透明的,一般也比较容易实施。但是应用程序细粒度的要求策略,可能无法完全满足。比如,多租户应用程序可能需要对最终用户进行加密,数据库可能需要对单个文件里的每个列进行不同的加密设置。

4.磁盘层加密,易于部署和高性能,但是相当不灵活,只能防止用户从物理层面盗窃数据。

HDFS的透明加密属于数据库层和文件系统层的加密。它有很多好处,比如不错的性能,对于现有的应用程序是透明的。在制定策略时,HDFS也比传统的文件系统有更多的选择。

HDFS加密可以防止在文件系统或之下的攻击,也叫操作系统级别的攻击(OS-level attacks)。操作系统和磁盘只能与加密的数据进行交互,因为数据已经被HDFS加密了。

3.场景


一些政府,金融和监管机构都会要求数据加密。比如医疗行业有HIPAA法规,支付卡行业有PCI DSS法规,美国政府有FISMA法规。HDFS的透明加密可以使企业很容易的遵守这些规定。

通过HDFS的集成,加密也可以在应用层执行,同时应用层可以不做修改而直接对加密数据进行访问。这种架构可以更好的与HDFS的其他功能进行协作。

4.架构

4.1概述


HDFS的透明加密有一个新的概念,加密区域(the encryption zone)。加密区域是一个特殊的目录,写入文件的时候会被透明加密,读取文件的时候又会被透明解密。当加密区域被创建时,都会有一个加密区域秘钥(encryption zone key)与之对应。加密区域里的每个文件都有一个唯一的数据加密秘钥(DEK,data encryption key)。HDFS不会直接处理DEK,HDFS只会处理加密后的DEK(encrypted data encryption key,EDEK)。客户端会解密EDEK,然后用后续的DEK来读取和写入数据。HDFS的DataNode只能看到一串加密字节。

HDFS支持嵌套的加密区域,从而能在文件系统的不同部分使用不同的加密区域秘钥。在创建加密区域之后,比如是根目录/,用户可以用不同的秘钥在子目录比如/home/fayson上创建更多的加密区域。文件的EDEK会使用最近的(the closet ancestor)加密区的秘钥生成。

如果要启用HDFS的透明加密,你需要安装一个额外的服务,KMS(Hadoop

Key Management Server),用来管理秘钥。KMS主要有以下几个职责:

1.提供访问保存的加密区域的秘钥

2.生成存储在NameNode上的加密后的数据加密秘钥(EDEK)

3.为HDFS客户端解密EDEK

4.2 在加密区域里访问数据


当在加密区域中创建好一个文件后,NameNode会要求KMS生成一个新的EDEK,这会被加密区域秘钥(encryption zone’s key)加密。EDEK会作为NameNode的元数据持久化保存起来。

当在加密区域里读取一个文件时,NameNode会给客户端提供EDEK,然后加密区域秘钥(encryption zone’s key)的版本,这个是用来解密EDEK的。然后客户端找KMS来解密EDEK,当然会检查客户端是否有权限在KMS中访问这个版本的加密区域秘钥(encryption zone’s key)。如果成功,客户端会使用DEK来解密文件内容。

所有上面这些读写路径的步骤都会自动的在DFSClient,NameNode以及KMS之间完成。

访问加密的文件数据和元数据是由正常的HDFS文件系统权限控制的。这意味着如果HDFS受到攻击,比如,未经授权的HDFS超级用户,这个恶意用户只能访问加密文件,以及加密后的文件加密秘钥(EDEK)。这是因为对加密区域秘钥(encryption zone’s key)的访问是由KMS控制的,因此这不会构成威胁。

4.3Key Management Server,KeyProvider, EDEKs


KMS是代表HDFS和客户端与后端的秘钥存储进行交互的代理服务。后端的秘钥存储库和KMS都实现了Hadoop KeyProvider API,更多内容请参考:

http://hadoop.apache.org/docs/stable/hadoop-kms/index.html

在KeyProvider API中,每个加密秘钥都有一个唯一的秘钥名称。秘钥可以有多个版本,每个版本的秘钥都有自己的秘钥内容(在加密和解密时使用的实际加密字节)。加密秘钥可以通过秘钥名称返回秘钥的最新版本,或者根据版本号来获取特定版本的秘钥。

KMS还实现了一些附加功能,可以创建和解密加密后的秘钥(encrypted encryption keys,EEKs)。创建和解密EEK都是在KMS中进行的。所以请求创建和解密EEK的客户端,不会处理EEK的加密秘钥。要创建一个新的EEK,KMS会生成一个新的随机秘钥,并会使用指定的秘钥对其进行加密,然后将EEK返回给客户端。为了解密EEK,KMS会检查用户是否有权限访问加密秘钥,然后使用它来解密EEK,并返回解密的加密秘钥。

在HDFS透明加密的场景中,EEK是加密数据加密秘钥的秘钥(EDEK),数据加密秘钥用来(DEK)用来加密和解密文件数据。通常,秘钥存储库会配置为只允许最终用户访问用户加密DEK的秘钥。意思就是说EDEK可以被HDFS安全的存储和处理,因为HDFS用户将不能访问未加密的加密秘钥。

5.总结


大家是不是都晕了呢,Fayson简单总结一下,那么多秘钥大概有以下几种:

1.Encryption Zone Key,EZ Key,是加密区域的秘钥,每创建一个HDFS的加密区域也即是一个目录就会生成一个,一般保存在后端的秘钥存储库中,比如数据库。

2.Data Encryption Key,DEK,每个加密区域里的每个文件唯一的加密秘钥。

3.Encrypted Data Encryption Key,EDEK,每个加密区域里的每个文件唯一的加密秘钥,然后被EZ Key加密后的秘钥。保存在NameNode的元数据中。

所以HDFS的超级用户顶多只能拿到加密后的数据以及EDEK,没有KMS里相应的权限拿到对应的EZ Key,无法解密EDEK,然并卵,还是无法解密数据。一般在企业来说,Hadoop平台的管理员可能是HDFS超级用户,但是后端的秘钥存储库可能是另外的DBA管理员,至少要两个人一起联合起来干坏事,才能解密它不该看的数据。权限分离来保证数据的最终安全。

后面Fayson会通过实操来说明如何实现HDFS数据透明加密。

6.参考


https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hdfs_encryption.html

http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/TransparentEncryption.html

为天地立心,为生民立命,为往圣继绝学,为万世开太平。

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。

原文发布于微信公众号 - Hadoop实操(gh_c4c535955d0f)

原文发表时间:2017-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零学习云计算

kubernetes学习记录(13)——网上集群基于CA签名安全设置的两种方式对比

在《kubernetes学习记录(9)——集群基于CA签名的安全设置》一文中,我是照着《Kubernetes权威指南》以及一些博客做了基于CA签名的安全设置。但...

22900
来自专栏java一日一条

如何针对老旧浏览器设置 HTTPS 策略

几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个问题应该从两...

41120
来自专栏码农二狗

不使用smtp直接发送邮件

26310
来自专栏安智客

密码技术之消息认证码

上一节我们知道消息的完整性保护需要通过单向散列函数来保证。但是光完整性还不够,我们还有确认消息的来源必须是正确的发送者。

22750
来自专栏FreeBuf

Rapid勒索病毒分析与检测

勒索病毒一直是安全行业的一个热点,近期安全人员发现了一款名为rapid的勒索病毒,该勒索病毒使用了 RSA加AES对文件进行加密,它不仅会感染计算机上已有的文件...

52670
来自专栏進无尽的文章

精析-苹果开发者证书的实现机制

      在iOS开发过程中,不可避免的要和证书打交道,真机调试、App上架、打包给测试去测试等都需要搞证书。在此过程中我们会遇到很多的问题,但是如果掌握了真...

22620
来自专栏Seebug漏洞平台

Seebug 漏洞精选集合第一期

这是 Seebug 精选漏洞第一期,主要包含一些硬件设备以及工控类型漏洞,这些漏洞均为一些重要漏洞,并且均包含有基于Pocsuite 编写的PoC! 之后我们将...

52870
来自专栏刺客博客

免费泛解析证书获取及后续安装方法

68950
来自专栏信安之路

无线渗透测试总结

如今,几乎人人都有手机,移动端设备数不胜数,手机、平板、笔记本都要使用无线网络,所以无线安全是非常重要的,本文的主要目的是无线渗透测试的方法总结,本文来源于老外...

15400
来自专栏Hadoop实操

HDFS Federation(联邦)简介

本文主要介绍HDFS Federation(联邦)相关知识,为后续文章《如何为CDH集群启用Federation(联邦)》做一个简单的铺垫。Federation...

1K30

扫码关注云+社区

领取腾讯云代金券