前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是HDFS透明加密

什么是HDFS透明加密

作者头像
Fayson
修改2018-04-01 19:43:56
4K0
修改2018-04-01 19:43:56
举报
文章被收录于专栏:Hadoop实操Hadoop实操

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.2 在加密区域里访问数据
  • 4.3Key Management Server,KeyProvider, EDEKs
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档