13.HDFS透明加密

13.1 实验目的与环境

  • 要实现HDFS的透明加密,首先需要一个KMS,KMS可以用CDH自带的Java KeyStore KMS也可以使用企业版工具Navigator。
    • Java KeyStore KMS保存秘钥文件到本地,提供简单的密码保护。
    • Cloudera不建议生产系统使用Java KeyStore KMS。
    • 实验主要介绍如何通过Cloudera Manager安装Java KeyStore KMS服务,并且实现HDFS的透明加密。
  • 内容概述
    • 安装KMS服务
    • HDFS加密测试
  • 测试环境
    • CentOS6.5
    • CDH5.13

13.2 安装KMS

  • 安装libcrypto.so,所有机器都需要,安装完成所有机器检查。
[root@ip-172-31-6-148shell]# sh ssh_do_all.sh node.list "yum -y install openssl-devel"
Loaded plugins: fastestmirror, presto
Loading mirror speeds from cached hostfile
 * base: mirror.qoxy.com
 * extras: mirror.qoxy.com
 * updates: mirror.qoxy.com
Setting up Install Process
Package openssl-devel-1.0.1e-57.el6.x86_64 already installed and latest version
Nothing to do
Connection to ip-172-31-6-148.fayson.com closed.
[root@ip-172-31-6-148 shell]# sh ssh_do_all.sh node.list "hadoop checknative"
17/12/09 09:59:54 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
17/12/09 09:59:54 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop:  true/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
snappy:  true/opt/cloudera/parcels/CDH-5.13.0-1.cdh5.13.0.p0.29/lib/hadoop/lib/native/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: true /usr/lib64/libcrypto.so
Connection to ip-172-31-6-148.fayson.com closed.
  • 注:
    • 确认openssl出现true,例如openssl: true/usr/lib64/libcrypto.so。如果是false,表示 libcrypto.so没有正确安装或配置,需要检查和改正。
    • Fayson的机器因为已经安装过了,所以提示“already installedand latest version”
  • 通过Cloudera Manager主界面安装KMS


  • 选择Java KeyStore KMS,点击“继续”
  • 输入秘钥管理员用户和用户组,注意hdfs超级用户已经被禁止设置为秘钥管理员,HDFS管理员和秘钥管理员是分开的。
  • 点击“生成ACL”,并点击“继续”
  • 提示设置“TLS”,暂时不用做任何操作,点击“继续”
  • 等待服务启动完毕,点击“继续”
  • 安装完毕,回到主页,按照提示重启整个集群,等待重启完毕,至此安装KMS完毕。


  • 确认HDFS已经启用了KMS服务


13.3 测试HDFS加密

  • 新建用户user1,创建一个秘钥key1
[root@ip-172-31-6-148 shell]# hadoop key create key1

key1 has not been created. org.apache.hadoop.security.authorize.AuthorizationException: User:root not allowed to do 'CREATE_KEY' on 'key1'
[root@ip-172-31-6-148 shell]# 
[root@ip-172-31-6-148 shell]# sudo -u hdfs hadoop key create key1
key1 has not been created. org.apache.hadoop.security.authorize.AuthorizationException: User:hdfs not allowed to do 'CREATE_KEY' on 'key1'
[root@ip-172-31-6-148 shell]# sudo -u fayson hadoop key create key1
key1 has been successfully created with options Options{cipher='AES/CTR/NoPadding', bitLength=128, description='null', attributes=null}.
KMSClientProvider[http://ip-172-31-10-118.fayson.com:16000/kms/v1/] has been updated.
  • 注意:
    • 在创建秘钥时,发现无论是root用户还是hdfs用户都无法创建成功,必须使用我们在安装配置KMS的时候设置的秘钥管理员fayson。
  • 创建一个HDFS目录并设置为加密区域。
[root@ip-172-31-6-148 shell]# hadoop fs -mkdir /user/user1
[root@ip-172-31-6-148 shell]# sudo -u hdfs hadoop fs -chown user1:user1 /user/user1
[root@ip-172-31-6-148 shell]# sudo -u hdfs hdfs crypto -createZone -keyName key1 -path /user/user1
Added encryption zone /user/user1
[root@ip-172-31-6-148 shell]# sudo -u hdfs hdfs crypto -listZones
/user/user1  key1
  • 注意:需要使用hdfs超级用户
  • 再创建一个目录,用于后面比较加密目录
[root@ip-172-31-6-148 shell]# hadoop fs -mkdir /user1/
[root@ip-172-31-6-148 shell]# sudo -u hdfs hadoop fs -chown user1:user1 /user1
  • 切换到user1用户分别上传文件到加密区域以及非加密区域准备一个文件
  • 上传文件到加密区域和非加密区域
[user1@ip-172-31-6-148 ~]$ hadoop fs -put a.txt /user1
[user1@ip-172-31-6-148 ~]$ hadoop fs -put a.txt /user/user1
[user1@ip-172-31-6-148 ~]$ hadoop fs -cat /user1/a.txt
fsdfsfsdfsdddddddddd
123456789
Fayson is fat!
[user1@ip-172-31-6-148 ~]$ hadoop fs -cat /user/user1/a.txt
fsdfsfsdfsdddddddddd
123456789
Fayson is fat!
  • 注意
    • 需要给上面创建的秘钥key1赋予用户和用户组user1的访问权限,否则用户user1无法put文件到/user/user1目录。
  • 通过HDFS的50070页面查看上传的文件的block分布在那台DataNode上,并记录下Block ID。



  • 登录到ip-172-31-10-118.fayson.com机器,查看block文件从上步骤,可以知道在加密区域/user/user1的文件“a.txt”的block ID为1073776797,在非加密区域/user1的文件“a.txt“的block ID为1073776707
[root@ip-172-31-10-118 ~]# find / -name "*1073776797*"
/dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776797
/dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776797_36850.meta
[root@ip-172-31-10-118 ~]# cat /dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776797
????f�JPQ٥??f ?Lx?+?f?6фt6=ko?1l?+"N?[
root@ip-172-31-10-118 ~]# 
[root@ip-172-31-10-118 ~]# find / -name "*1073776707*"
/dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776707
/dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776707_36760.meta
[root@ip-172-31-10-118 ~]# cat /dfs/dn/current/BP-900745788-172.31.6.148-1508157818810/current/finalized/subdir0/subdir136/blk_1073776707
fsdfsfsdfsdddddddddd
123456789
Fayson is fat!
  • 通过HDFS的透明加密可以实现HDFS底层文件的加密
    • 对于非加密区域/user1下的文件a.tx可以直接通过block ID查找到该block文件,并直接查看到明文。
    • 但是在加密区域/user/user1下的文件a.txt虽然也可以直接查找到该block文件,但是查看确是密文。
  • 在安装Java KMS的时候,Cloudera Manager会提示不能将HDFS超级用户hdfs设置为秘钥管理员,这是为了防止HDFS的超级用户既可以访问任何文件,又可以访问所有秘钥,从而可以直接解密所有HDFS文件而造成安全问题。
  • 在通过user1用户上传文件到自己所属的加密区域时,必须设置该加密区域的秘钥文件key1可以被user1访问,该设置通过Cloudera Manager管理的Java KeyStore KMS的配置中设置,将user1用户和组加入到ACL列表,否则会报以下错误。
[user1@ip-172-31-6-148 ~]$ hadoop fs -put a.txt /user/user1
put: User [user1] is not authorized to perform [DECRYPT_EEK] on key with ACL name [key1]!!
17/12/09 11:49:33 ERROR hdfs.DFSClient: Failed to close inode 352863
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException): No lease on /user/user1/a.txt._COPYING_ (inode 352863): File does not exist. Holder DFSClient_NONMAPREDUCE_1915499091_1 does not have any open files.
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkLease(FSNamesystem.java:3752)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFileInternal(FSNamesystem.java:3839)
   at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.completeFile(FSNamesystem.java:3809)
   at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.complete(NameNodeRpcServer.java:748)
   at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.complete(AuthorizationProviderProxyClientProtocol.java:248)

大数据视频推荐:
腾讯课堂
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容