日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDFS 透明加密使用、Keystore和Hadoop KMS、加密区域、透明加密关键概念和架构、KMS配置

發布時間:2023/12/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS 透明加密使用、Keystore和Hadoop KMS、加密区域、透明加密关键概念和架构、KMS配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HDFS 透明加密使用、Keystore和Hadoop KMS、加密區域

HDFS中的數據會以block的形式保存在各臺數據節點的本地磁盤中,但這些block都是明文的,如果在操作系統下,直接訪問block所在的目錄,通過Linux的cat命令是可以直接查看里面的內容的,而且是明文。

下面我們直接去DataNode本地存儲block的目錄,直接查看block內容:

/export/data/hadoop-3.1.4/dfs/data/current/BP-1748151750-192.168.227.1511608259905540/current/finalized/subdir0/subdir0/

1.2 背景和應用

1.2.1 常見的加密層級

  • ? 應用層加密

    這是最安全也是最靈活的方式。加密內容最終由應用程序來控制,并且可以精確的反映用戶的需求。但是,編寫應用程序來實現加密一般都比較困難。

  • ? 數據庫層加密

    類似于應用程序加密。大多數數據庫廠商都提供某種形式的加密,但是可能會有性能問題,另外比如說索引沒辦法加密。

  • ? 文件系統層加密

    這種方式對性能影響不大,而且對應用程序是透明的,一般也比較容易實施。但是應用程序細粒度的要求策略,可能無法完全滿足。

  • ? 磁盤層加密

    易于部署和高性能,但是相當不靈活,只能防止用戶從物理層面盜竊數據。

HDFS的透明加密屬于數據庫層和文件系統層的加密。擁有不錯的性能,且對于現有的應用程序是透明的。HDFS加密可以防止在文件系統或之下的攻擊,也叫操作系統級別的攻擊(OS-level attacks)。操作系統和磁盤只能與加密的數據進行交互,因為數據已經被HDFS加密了。

1.2.2 應用場景

數據加密對于全球許多政府,金融和監管機構都是強制性的,以滿足隱私和其他安全要求。例如,卡支付行業已采用“支付卡行業數據安全標準”(PCI DSS)來提高信息安全性。其他示例包括美國政府的《聯邦信息安全管理法案》(FISMA)和《健康保險可移植性和責任法案》(HIPAA)提出的要求。加密存儲在HDFS中的數據可以幫助您的組織遵守此類規定。

1.3 透明加密介紹

HDFS透明加密(Transparent Encryption)支持端到端的透明加密,啟用以后,對于一些需要加密的HDFS目錄里的文件可以實現透明的加密和解密,而不需要修改用戶的業務代碼。端到端是指加密和解密只能通過客戶端。對于加密區域里的文件,HDFS保存的即是加密后的文件,文件加密的秘鑰也是加密的。讓非法用戶即使從操作系統層面拷走文件,也是密文,沒法查看。

HDFS透明加密具有以下功能特點:

  • 只有HDFS客戶端可以加密或解密數據。

  • 密鑰管理在HDFS外部。HDFS無法訪問未加密的數據或加密密鑰。HDFS的管理和密鑰的管理是獨立的職責,由不同的用戶角色(HDFS管理員,密鑰管理員)承擔,從而確保沒有單個用戶可以不受限制地訪問數據和密鑰。

  • 操作系統和HDFS僅使用加密的HDFS數據進行交互,從而減輕了操作系統和文件系統級別的威脅。

  • HDFS使用高級加密標準計數器模式(AES-CTR)加密算法。AES-CTR支持128位加密密鑰(默認),或者在安裝Java Cryptography Extension(JCE)無限強度JCE時支持256位加密密鑰。

1.4 透明加密關鍵概念和架構

1.4.1 加密區域和密鑰

HDFS的透明加密有一個新的概念,加密區域(the encryption zone)。加密區域是一個特殊的目錄,寫入文件的時候會被透明加密,讀取文件的時候又會被透明解密。

當加密區域被創建時,都會有一個加密區域秘鑰EZ密鑰,encryption zone key)與之對應,EZ密鑰存儲在HDFS外部的備份密鑰庫中。加密區域里的每個文件都有其自己加密密鑰,叫做數據加密秘鑰DEK,data encryption key)。DEK會使用其各自的加密區域的EZ密鑰進行加密,以形成加密數據加密密鑰(EDEK)HDFS不會直接處理DEK,HDFS只會處理EDEK。客戶端會解密EDEK,然后用后續的DEK來讀取和寫入數據。

關于EZ密鑰、DEK、EDEK三者關系如下所示:

1.4.2 Keystore和Hadoop KMS

存儲密鑰(key)的叫做密鑰庫(keystore),將HDFS與外部企業級密鑰庫(keystore)集成是部署透明加密的第一步。這是因為密鑰(key)管理員和HDFS管理員之間的職責分離是此功能的非常重要的方面。但是,大多數密鑰庫都不是為Hadoop工作負載所見的加密/解密請求速率而設計的。

為此,Hadoop進行了一項新服務的開發,該服務稱為Hadoop密鑰管理服務器(Key Management Server,簡寫KMS),該服務用作HDFS客戶端與密鑰庫之間的代理。密鑰庫和Hadoop KMS相互之間以及與HDFS客戶端之間都必須使用Hadoop的KeyProvider API進行交互。

KMS主要有以下幾個職責:

1.提供訪問保存的加密區域秘鑰(EZ key) 2.生成EDEK,EDEK存儲在NameNode上 3.為HDFS客戶端解密EDEK

1.4.3 訪問加密區域內的文件

1.4.3.1 寫入加密文件過程

前提:創建HDFS加密區時會創建一個HDFS加密區(目錄),同時會在KMS服務里創建一個key及其EZ Key,及兩者之間的關聯。

1.Client向NN請求在HDFS某個加密區新建文件; 2.NN向KMS請求此文件的EDEK,KMS用對應的EZ key生成一個新的EDEK發送給NN; 3.這個EDEK會被NN寫入到文件的metadata中; 4.NN發送EDEK給Client; 5.Client發送EDEK給KMS請求解密,KMS用對應的EZ key將EDEK解密為DEK發送給Client; 6.Client用DEK加密文件內容發送給datanode進行存儲。

DEK是加解密一個文件的密匙,而KMS里存儲的EZ key是用來加解密所有文件的密匙(DEK)的密匙。**所以,EZ Key是更為重要的數據,只在KMS內部使用(DEK的加解密只在KMS內存進行),不會被傳遞到外面使用,而HDFS服務端只能接觸到EDEK,所以HDFS服務端也不能解密加密區文件。

1.4.3.2 讀取解密文件過程

讀流程與寫流程類型,區別就是NN直接讀取加密文件元數據里的EDEK返回給客戶端,客戶端一樣把EDEK發送給KMS獲取DEK。再對加密內容解密讀取。

EDEK的加密和解密完全在KMS上進行。更重要的是,請求創建或解密EDEK的客戶端永遠不會處理EZ密鑰。僅KMS可以根據要求使用EZ密鑰創建和解密EDEK。

1.5 KMS配置

1.5.1 關閉HDFS集群

在node1上執行stop-dfs.sh。

1.5.2 key密鑰生成

[root@node1 ~]# keytool -genkey -alias 'yida' Enter keystore password: Re-enter new password: What is your first and last name?[Unknown]: What is the name of your organizational unit?[Unknown]: What is the name of your organization?[Unknown]: What is the name of your City or Locality?[Unknown]: What is the name of your State or Province?[Unknown]: What is the two-letter country code for this unit?[Unknown]: Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?[no]: yes Enter key password for <yida>(RETURN if same as keystore password): Re-enter new password:

1.5.3 配置kms-site.xml

配置文件路徑:/export/server/hadoop-3.1.4/etc/hadoop/kms-site.xml

<configuration><property><name>hadoop.kms.key.provider.uri</name><value>jceks://file@/${user.home}/kms.jks</value></property><property><name>hadoop.security.keystore.java-keystore-provider.password-file</name><value>kms.keystore.password</value></property><property><name>dfs.encryption.key.provider.uri</name><value>kms://http@node1:16000/kms</value></property><property><name>hadoop.kms.authentication.type</name><value>simple</value></property> </configuration>

密碼文件通過類路徑在Hadoop的配置目錄中查找。

1.5.4 kms-env.sh

export KMS_HOME=/export/server/hadoop-3.1.4 export KMS_LOG=${KMS_HOME}/logs/kms export KMS_HTTP_PORT=16000 export KMS_ADMIN_PORT=16001

1.5.5 修改core|hdfs-site.xml

core-site.xml

<property><name>hadoop.security.key.provider.path</name><value>kms://http@node1:16000/kms</value> </property>

hdfs-site.xml

<property><name>dfs.encryption.key.provider.uri</name><value>kms://http@node1:16000/kms</value> </property>

同步配置文件到其他節點

1.5.5.1 KMS服務啟動

hadoop --daemon start kms

1.5.5.2 HDFS集群啟動

start-dfs.sh

1.6 透明加密使用

1.6.1 創建key

切換成普通用戶allenwoon操作

# su allenwoon # hadoop key create yida # hadoop key list -metadata

1.6.2 創建加密區

使用root超級用戶操作

#作為超級用戶,創建一個新的空目錄,并將其設置為加密區域 hadoop fs -mkdir /zone hdfs crypto -createZone -keyName itcast -path /zone #將其chown給普通用戶 hadoop fs -chown allenwoon:allenwoon /zone

1.6.3 測試加密效果

以普通用戶操作

#以普通用戶的身份放入文件,然后讀出來 echo helloitcast >> helloWorld hadoop fs -put helloWorld /zone hadoop fs -cat /zone /helloWorld #作為普通用戶,從文件獲取加密信息 hdfs crypto -getFileEncryptionInfo -path /zone/helloWorld

`

1.6.3 測試加密效果

以普通用戶操作

#以普通用戶的身份放入文件,然后讀出來 echo helloitcast >> helloWorld hadoop fs -put helloWorld /zone hadoop fs -cat /zone /helloWorld #作為普通用戶,從文件獲取加密信息 hdfs crypto -getFileEncryptionInfo -path /zone/helloWorld

直接下載文件的block 發現是無法讀取數據的。

總結

以上是生活随笔為你收集整理的HDFS 透明加密使用、Keystore和Hadoop KMS、加密区域、透明加密关键概念和架构、KMS配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。