集群工作節點之間的加密流量

預覽

這個特性是在公共預覽

重要的

init腳本示例本文引用其加密共享秘密的散列密鑰存儲庫存儲在DBFS。如果你旋轉的秘密在DBFS通過更新密鑰存儲庫文件,所有正在運行的集群必須重新啟動。否則,引發工人可能無法驗證的火花司機由於不一致的共享密鑰,導致工作慢下來。此外,由於共享密鑰存儲在DBFS,任何用戶提供DBFS訪問可以檢索使用筆記本的秘密。為進一步指導,聯係你的代表。

作為一種替代方法,您可以使用以下AWS實例類型之一,工人之間自動加密數據的節點無需額外配置要求:ca5,C5ad,C5n,C6i,C6id,C6in,D3,D3en,G4dn,G5,I3en,I4i,M5dn,M5n,M5zn,M6i,M6id,M6idn,M6in,P3dn,R-fleet,R5dn,R5n,R6i,R6id,R6idn,R6in和磚艦隊實例的類型M-fleet,MD-fleet,RD-fleet。。

需求

這個特性要求企業計劃。聯係你的磚賬戶代表更多的信息。

init腳本是如何運作的嗎

重要的

init腳本示例本文引用其加密共享秘密的散列密鑰存儲庫存儲在DBFS。如果你旋轉的秘密在DBFS通過更新密鑰存儲庫文件,所有正在運行的集群必須重新啟動。否則,引發工人可能無法驗證的火花司機由於不一致的共享密鑰,導致工作慢下來。此外,由於共享密鑰存儲在DBFS,任何用戶提供DBFS訪問可以檢索使用筆記本的秘密。為進一步指導,聯係你的代表。

用戶查詢和轉換通常發送到您的集群通過一個加密的通道。默認情況下,然而,工人之間交換的數據集群中的節點是不加密的。如果您的環境要求的數據進行加密,在休息還是在運輸途中,你可以創建一個init腳本配置集群加密交通工作者節點之間,使用AES 128位加密TLS 1.2連接。

請注意

盡管AES允許加密程序利用硬件加速,有性能損失相比未加密流量。這個點球可以導致查詢長時間在一個加密的集群,這取決於數量的節點之間的數據打亂。

啟用加密的交通工作者節點之間需要設置火花配置參數通過一個init腳本。您可以使用一個集群級init腳本一個集群或全球init腳本如果您想讓您的工作區中所有集群使用worker-to-worker加密。

有一次,在DBFS密鑰存儲庫文件複製到一個目錄。然後創建應用的init腳本加密設置。

init腳本必須執行以下任務:

  1. 得到JKS keystore文件和密碼。

  2. 設置火花執行人配置。

  3. 設置火花驅動程序配置。

請注意

JKS keystore文件存儲用於啟用SSL / HTTPS是動態生成的每個工作區。JKS keystore文件的密碼是硬編碼的,而不是以保護保密的密鑰存儲庫。

下麵是一個示例init腳本實現這三個集群任務生成加密配置。

init腳本示例

# ! / bin / bash-euo pipefailkeystore_dbfs_file=“/ dbfs / < keystore-directory > / jetty_ssl_driver_keystore.jks”# #等到密鑰存儲庫文件可以通過保險絲max_attempts=30.(!- f$ {keystore_dbfs_file}];如果(max_attempts美元= =0];然後回聲錯誤:無法找到文件:keystore_dbfs_file美元fail腳本。”退出1fi睡眠2 s((max_attempts——))完成# #獲得共享節間加密散列的秘密密鑰存儲庫文件sasl_secret=$ (sha256sumkeystore_dbfs_file美元|切- d' 'f1)如果(- z$ {sasl_secret}];然後回聲錯誤:無法推導出秘密。腳本失敗。”退出1fi# JKS keystore文件存儲用於啟用SSL / HTTPSlocal_keystore_file=DB_HOME美元/鍵/ jetty_ssl_driver_keystore.jks”# JKS密鑰存儲庫文件的密碼。這jks密碼是硬編碼的,而不是為了保護機密性#的密鑰存儲庫。不承擔保護keystore文件本身。local_keystore_password=“gb1gQqZ9ZIHS”# #更新spark-branch。conf隻是所需的驅動程序如果[[DB_IS_DRIVER美元=“真正的”]];然後driver_conf=$ {DB_HOME}/ conf / spark-branch.conf /驅動程序回聲“配置驅動程序配置driver_conf美元如果(!- edriver_conf美元];然後觸摸driver_conf美元fi< < EOF > > driver_conf美元(司機){/ /配置節點間身份驗證“火花。驗證”= true“spark.authenticate。秘密”=“sasl_secret美元”/ /配置AES加密“spark.network.crypto.enabled”= true“spark.network.crypto.saslFallback”= false/ /配置SSL“spark.ssl。啟用“= true“spark.ssl。keyPassword " = " $ local_keystore_password "“spark.ssl。密鑰存儲庫”=“local_keystore_file美元”“spark.ssl。keyStorePassword " = " $ local_keystore_password "“spark.ssl。協議”=“TLSv1.3”“spark.ssl.standalone。啟用“= true“spark.ssl.ui。啟用“= true}EOF回聲“成功配置驅動程序設計driver_conf美元fi#設置在spark-defaults配置。conf火花大師和工人spark_defaults_conf=DB_HOME美元/ / conf / spark-defaults.conf火花”回聲“配置引發違約相依spark_defaults_conf美元如果(!- espark_defaults_conf美元];然後觸摸spark_defaults_conf美元fi< < EOF > > spark_defaults_conf美元火花。驗證正確spark.authenticate。秘密sasl_secret美元spark.network.crypto.enabled真實spark.network.crypto.saslFallback假spark.ssl。使真正的spark.ssl。keyPassword local_keystore_password美元spark.ssl。keyStore local_keystore_file美元spark.ssl。keyStorePassword local_keystore_password美元spark.ssl。協議TLSv1.3spark.ssl.standalone。使真正的spark.ssl.ui。使真正的EOF回聲“成功配置引發違約相依spark_defaults_conf美元

一旦司機和工人節點的初始化完成,這些節點之間的所有流量使用密鑰存儲庫文件是加密的。

筆記本的例子:安裝一個加密init腳本

這個筆記本後複製keystore文件並生成DBFS中的init腳本。您可以使用init腳本創建新集群啟用加密。

安裝一個加密init腳本筆記本

禁用加密工作節點之間

禁用加密工作節點之間,把init腳本從集群配置,然後重新啟動集群。