首頁>基金 > 正文

      熱消息:我們一起聊聊Hdfs的透明加密記錄

      2023-06-29 10:27:52    出處:清一色財經

      ? HDFS透明加密(Transparent Encryption)支持端對端的透明加密,啟用以后,對于一些需要加密的HDFS目錄里的文件可以實現透明的加密和解密,而不需要修改用戶的業務代碼。端對端是指加密和解密只能通過客戶端來操作。

      1、背景

      我們知道,在hdfs中,我們的數據是以block塊存儲在我們的磁盤上的,那么默認情況下,它是以密文存儲的,還是以明文存儲的呢?如果是明文存儲的,那么是否就不安全呢?那么在hdfs中是如何做才能做到數據的透明加密呢?

      2、常見的加密層級


      (資料圖片僅供參考)

      常見的加密層級

      應用層加密:這是最安全和最靈活的方法。加密內容最終由應用程序來控制。并且可以精確的反應用戶的需求。但是,編寫應用程序來實現加密一般都比較困難。數據庫層加密:類似于應用程序級加密。大多數數據庫供應商都提供某種形式的加密。但是可能存在性能問題。比如:索引無法加密。文件系統層加密:這種方式對性能影響不大,且對應用程序是透明的,一般也比較容易實施。但是如果需要應對細粒度的要求策略,可能無法完全滿足。比如:加密文件系統(EFS)用于在(NTFS)文件系統卷上存儲已加密的文件。磁盤層加密:易于部署和高性能,但是相當不靈活,只能防止用戶從物理層面盜竊數據。

      3、透明加密介紹

      HDFS透明加密(Transparent Encryption)支持端對端的透明加密,啟用以后,對于一些需要加密的HDFS目錄里的文件可以實現透明的加密和解密,而不需要修改用戶的業務代碼。端對端是指加密和解密只能通過客戶端來操作。對于加密區域里的文件,HDFS保存的即是加密后的文件,文件加密的密鑰也是加密的。讓非法用戶即使從操作系統層面拷走文件,也是密文,沒法查看。HDFS集群管理和密鑰的管理是互相獨立的職責,由不同的用戶角色(HDFS管理員、密鑰管理員)承擔。只有HDFS客戶端可以加密或解密數據,密鑰管理在HDFS外部,HDFS無法訪問未加密的數據或加密密鑰。

      4、HDFS透明加密的核心概念

      4.1 加密區域

      加密區域就是HDFS上的一個目錄,只不過該目錄相對而言稍微特殊點。文件寫入的時候會被透明加密,文件讀取的時候會被透明解密。

      4.2 加密區域密鑰-EZ KEY

      當加密區域被創建時,都會有一個加密區域密鑰(EZ密鑰, encryption zone key)與之對應,EZ密鑰存儲在HDFS外部的密鑰庫中。

      4.3 數據加密密鑰-DEK

      加密區域里的每個文件都有其自己的加密密鑰,叫做數據加密密鑰(DEK, data. encryption key)。

      DEK

      4.4 加密數據加密密鑰 EDEK

      DEK會使用其各自的加密區域的EZ密鑰進行加密,以形成加密數據加密密鑰(EDEK)

      EDEK

      4.5 DEK的加解密和文件的加解密

      DEK的加解密和文件的加解密

      4.6 密鑰庫

      存儲密鑰(key)的叫做密鑰庫(keystore),將HDFS與外部企業級密鑰庫(keystore)集成是部署透明加密的第一步。為什么密鑰庫獨立與HDFS之外?可以指責分離,而且也更加安全。 這樣hdfs管理員和keystore管理員就是2個人,各個處理各自的事情。

      4.7 KMS 密鑰管理服務

      Hadoop密鑰管理服務(Key Management Server,簡稱KMS),用作HDFS客戶端與密鑰庫之間的代理。KMS主要有以下幾個職責訪問加密區域密鑰(EZ Key)生成EDEK,EDEK存儲在NameNode上為HDFS客戶端解密EDEK

      5、配置透明加密

      5.1 關閉hdfs集群

      [hadoopdeploy@hadoop01 sh]$ stop-dfs.shStopping namenodes on [hadoop01]Stopping datanodesStopping secondary namenodes [hadoop03][hadoopdeploy@hadoop01 sh]$

      5.2 創建keystore

      密鑰庫的密碼為Hadoop@123

      [hadoopdeploy@hadoop01 ~]$ keytool -genkey -alias "keystore_hadoop"輸入密鑰庫口令:再次輸入新口令:您的名字與姓氏是什么?  [Unknown]:您的組織單位名稱是什么?  [Unknown]:您的組織名稱是什么?  [Unknown]:您所在的城市或區域名稱是什么?  [Unknown]:您所在的省/市/自治區名稱是什么?  [Unknown]:該單位的雙字母國家/地區代碼是什么?  [Unknown]:CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?  [否]:  y輸入  的密鑰口令 (如果和密鑰庫口令相同, 按回車):再次輸入新口令:Warning:JKS 密鑰庫使用專用格式。建議使用 "keytool -importkeystore -srckeystore /home/hadoopdeploy/.keystore -destkeystore /home/hadoopdeploy/.keystore -deststoretype pkcs12" 遷移到行業標準格式 PKCS12。[hadoopdeploy@hadoop01 ~]$ ll ~/.keystore-rw-rw-r--. 1 hadoopdeploy hadoopdeploy 1992 6月  15 22:20 /home/hadoopdeploy/.keystore[hadoopdeploy@hadoop01 ~]$

      生成keystore

      5.3 編輯 kms-site.xml文件

                                      hadoop.kms.key.provider.uri                jceks://file@/${user.home}/kms.jks                                        hadoop.security.keystore.java-keystore-provider.password-file                kms.keystore.password.txt                                hadoop.kms.http.port                16000                                         dfs.encryption.key.provider.uri                 kms://http@hadoop01:16000/kms                                        hadoop.kms.authentication.type                simple        

      需要創建kms.keystore.password.txt文件,并設置密鑰庫的密碼

      [hadoopdeploy@hadoop01 hadoop]$ cat /opt/bigdata/hadoop-3.3.4/etc/hadoop/kms.keystore.password.txtHadoop@123[hadoopdeploy@hadoop01 hadoop]$

      5.4 編輯 kms-env.sh

      export KMS_HOME=/opt/bigdata/hadoop-3.3.4export KMS_LOG=${KMS_HOME}/logs/kmsexport KMS_ADMIN_PORT=16001

      5.5 修改core-site.xml

          hadoop.security.key.provider.path    kms://http@hadoop01:16000/kms

      5.6 修改hdfs-site.xml

          dfs.encryption.key.provider.uri    kms://http@hadoop01:16000/kms

      5.7 同步配置到集群另外的機器上

      [hadoopdeploy@hadoop01 hadoop]$ scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml hadoop01:$PWD[hadoopdeploy@hadoop01 hadoop]$ scp kms-site.xml kms-env.sh core-site.xml hdfs-site.xml hadoop02:$PWD

      5.8 啟動hdfs集群

      [hadoopdeploy@hadoop01 hadoop]$ start-dfs.shStarting namenodes on [hadoop01]Starting datanodesStarting secondary namenodes [hadoop03][hadoopdeploy@hadoop01 hadoop]$ jps2080 NameNode2243 DataNode2471 Jps[hadoopdeploy@hadoop01 hadoop]$

      5.9 啟動kms服務

      [hadoopdeploy@hadoop01 hadoop]$ hadoop --daemon start kmsWARNING: KMS_LOG has been replaced by HADOOP_LOG_DIR. Using value of KMS_LOG.WARNING: /opt/bigdata/hadoop-3.3.4//temp does not exist. Creating.WARNING: /opt/bigdata/hadoop-3.3.4/logs/kms does not exist. Creating.[hadoopdeploy@hadoop01 hadoop]$ jps2080 NameNode2243 DataNode2870 KMSWebServer2904 Jps[hadoopdeploy@hadoop01 hadoop]$

      hadoop –daemon stop kms停止kms服務

      6、測試透明加密

      需求: 在hdfs上創建2個目錄logs和datas,只要是在datas目錄中上傳文件都需要透明加密,logs目錄不需要,同時往logs和datas目錄中上傳一個文件,然后查看對應文件在磁盤上的block塊,直接在操作系統上查看這個塊,看文件是否加密。

      6.1 準備數據

      [hadoopdeploy@hadoop01 hadoop]$ hadoop fs -mkdir /logs[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -mkdir /datas[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -ls /Found 2 itemsdrwxr-xr-x   - hadoopdeploy supergroup          0 2023-06-16 21:10 /datasdrwxr-xr-x   - hadoopdeploy supergroup          0 2023-06-16 21:10 /logs[hadoopdeploy@hadoop01 hadoop]$ echo 123456789 > 1.data[hadoopdeploy@hadoop01 hadoop]$ cat 1.data123456789[hadoopdeploy@hadoop01 hadoop]$

      在/目錄下創建2個文件夾logs和datas, 并創建一個文件1.data,內容為123456789,1.data先不傳遞到logs和datas目錄中。

      6.2 創建key

      # 創建一個key ,名字是 ezk_datas[hadoopdeploy@hadoop01 hadoop]$ hadoop key create ezk_datasezk_datas has been successfully created with options Options{cipher="AES/CTR/NoPadding", bitLength=128, description="null", attributes=null}.org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@3d5c822d has been updated.# 查看key 列表[hadoopdeploy@hadoop01 hadoop]$ hadoop key list -metadataListing keys for KeyProvider: org.apache.hadoop.crypto.key.kms.LoadBalancingKMSClientProvider@2f8dad04ezk_datas : cipher: AES/CTR/NoPadding, length: 128, description: null, created: Fri Jun 16 21:36:51 CST 2023, version: 1, attributes: [key.acl.name=ezk_datas][hadoopdeploy@hadoop01 hadoop]$

      6.3 創建加密區域

      [hadoopdeploy@hadoop01 hadoop]$ hdfs crypto -createZone -keyName ezk_datas -path /datasAdded encryption zone /datas[hadoopdeploy@hadoop01 hadoop]$

      ezk_datas: 為我們創建的ezk的名字/datas: hdfs上的一個目錄

      6.4 文件上傳

      # 往/datas目錄上傳一個文件[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -put 1.data /datas# 往/logs目錄上傳一個文件[hadoopdeploy@hadoop01 hadoop]$ hadoop fs -put 1.data /logs[hadoopdeploy@hadoop01 hadoop]$

      6.5 查看加密文件

      查看加密文件

      7、參考資料

      1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/TransparentEncryption.html

      關鍵詞:

      消費
      產業
      環球快看:被印度詐騙88億、又反被索賠21億?上海電氣聲明:嚴重歪曲事實 被印度詐騙88億、又反被索賠21億?上海電氣聲明:嚴重歪曲事實
      武侯區教育網藝術測評平臺 武侯區教育網藝術測評 1、武侯區教育網藝術測試平臺就是武侯區中小學藝術測試平臺。2、登錄方
      焦點觀察:正式官宣!淮師附屬實驗學校動工,明年秋季招生 1剛剛,淮安又一所重磅學校開工!根據淮安發布&幸福淮陰消息,正式官宣
      當前熱點-鳥杯_關于鳥杯簡述 小伙伴們,你們好,今天小夏來聊聊一篇關于鳥杯,關于鳥杯簡述的文章,
      基金
      亚洲精品人成网线在线播放va| 亚洲精品成人无限看| 亚洲AV无码久久精品色欲| 亚洲情侣偷拍精品| 日韩精品亚洲专区在线观看| 99亚洲精品卡2卡三卡4卡2卡| 亚洲日韩AV一区二区三区中文| 亚洲最大福利视频| 亚洲精品综合在线影院| 亚洲精品国产精品国自产网站| 亚洲香蕉在线观看| 中文字幕亚洲码在线| 亚洲中文字幕乱码AV波多JI| 国产成人精品亚洲2020| 亚洲熟伦熟女专区hd高清| 亚洲精品国产高清在线观看| 亚洲成av人片天堂网无码】| 爱爱帝国亚洲一区二区三区| 亚洲AⅤ无码一区二区三区在线| 亚洲а∨天堂久久精品| 亚洲日本韩国在线| 亚洲色成人网站WWW永久| 亚洲精品无码久久一线| 久久国产精品亚洲一区二区| 亚洲免费视频网站| 亚洲日本乱码一区二区在线二产线| 亚洲一区二区免费视频| 亚洲一久久久久久久久| 亚洲AV电影天堂男人的天堂| 国产偷国产偷亚洲高清人| 亚洲国产一区二区三区| 亚洲中文字幕无码日韩| 亚洲国产一区二区a毛片| 亚洲精品一卡2卡3卡三卡四卡| 亚洲国产成人精品无码一区二区| 中文字幕亚洲综合小综合在线| 亚洲a∨国产av综合av下载| 亚洲色图综合在线| 亚洲a在线视频视频| 亚洲男女一区二区三区| 国产亚洲精aa在线看|