开始
用户指南
管理指南
参考指南
资源
2023年1月6日更新
给我们反馈
预览
此功能已在公共预览.
重要的
的初始化脚本示例从存储在DBFS中的密钥库的散列派生其共享加密秘密。如果通过更新DBFS中的密钥存储库文件来轮换密钥,则必须重新启动所有正在运行的集群。否则,由于共享密钥不一致,可能导致Spark worker无法通过Spark driver进行身份验证,导致作业速度变慢。此外,由于共享秘密存储在DBFS中,任何具有DBFS访问权限的用户都可以使用笔记本检索秘密。如需进一步指导,请联系您的代表。
作为替代方案,您可以使用以下AWS实例类型之一,这些实例类型自动加密工作节点之间的数据,无需额外配置:ca5,C5ad,C5n,C6gn,D3,D3en,G4ad,G4dn,i3en,i4i,M5dn,M5n,M5zn,P3dn,P4d,R5dn,R5n.
ca5
C5ad
C5n
C6gn
D3
D3en
G4ad
G4dn
i3en
i4i
M5dn
M5n
M5zn
P3dn
P4d
R5dn
R5n
此功能需要企业计划.有关更多信息,请联系您的Databricks帐户代表。
用户查询和转换通常通过加密通道发送到您的集群。但是,默认情况下,集群中工作节点之间交换的数据是不加密的。如果您的环境要求在任何时候都对数据进行加密,无论是处于静止状态还是传输过程中,您可以创建一个init脚本,将集群配置为通过TLS 1.2连接使用AES 128位加密来加密工作节点之间的流量。
请注意
尽管AES使加密例程能够利用硬件加速,但与未加密的流量相比,它具有性能损失。这种惩罚可能导致加密集群上的查询花费更长的时间,这取决于节点之间打乱的数据量。
启用工作节点之间的流量加密需要通过init脚本设置Spark配置参数。你可以使用集群范围的初始化脚本对于单个集群或全局初始化脚本如果您希望工作区中的所有集群都使用工作者对工作者加密。
一次,将密钥存储库文件复制到DBFS中的一个目录。然后创建应用加密设置的init脚本。
init脚本必须执行以下任务:
获取JKS密钥存储库文件和密码。
设置Spark执行器配置。
配置Spark驱动。
为每个工作空间动态生成用于启用SSL/HTTPS的JKS keystore文件。JKS密钥存储库文件的密码是硬编码的,不打算保护密钥存储库的机密性。
下面是一个示例init脚本,它实现了这三个任务以生成集群加密配置。
# !/bin/bash集-euo pipefailkeystore_dbfs_file=“dbfs / < keystore_directory > / jetty_ssl_driver_keystore.jks”##等待keystore文件通过Fuse可用max_attempts=30.而[!- f$ {keystore_dbfs_file}];做如果["max_attempts美元"= =0];然后回声"错误:无法找到文件:keystore_dbfs_file美元.剧本不及格。”退出1fi睡眠2 s((max_attempts——))完成从密钥库文件的散列中导出共享的节点间加密秘密sasl_secret=$ (sha256sumkeystore_dbfs_file美元|切- d' 'f1)如果[- z"$ {sasl_secret}"];然后回声"错误:无法获得秘密。剧本不及格。”退出1fi#用于启用SSL/HTTPS的JKS密钥库文件local_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.crypt .enabled" = true"spark.network.crypto.saslFallback" = false//配置SSL“spark.ssl。Enabled " = true“spark.ssl。keyPassword" = "$local_keystore_password"“spark.ssl。keyStore" = "$local_keystore_file"“spark.ssl。keyStorePassword" = "$local_keystore_password"“spark.ssl。协议”=“TLSv1.3”“spark.ssl.standalone。Enabled " = true“spark.ssl.ui。Enabled " = true}EOF回声"已成功配置驱动程序conf at .driver_conf美元"fi#在spark-defaults.conf中设置spark master和worker的配置spark_defaults_conf="DB_HOME美元/ / conf / spark-defaults.conf火花”回声“配置spark默认配置spark_defaults_conf美元"如果[!- espark_defaults_conf美元];然后触摸spark_defaults_conf美元fi猫<< EOF >> $spark_defaults_conf火花。验证正确spark.authenticate.secret sasl_secret美元spark.network.crypto.enabled真实spark.network.crypto.saslFallback假spark.ssl.enabled真实spark.ssl.keyPassword local_keystore_password美元spark.ssl.keyStore local_keystore_file美元spark.ssl.keyStorePassword local_keystore_password美元spark.ssl.protocol TLSv1.3spark.ssl.standalone.enabled真实spark.ssl.ui.enabled真实EOF回声"已成功配置spark defaults conf at .spark_defaults_conf美元"
一旦驱动程序和工作节点的初始化完成,这些节点之间的所有流量都会使用密钥存储文件进行加密。
下面的笔记本复制密钥库文件并在DBFS中生成初始化脚本。您可以使用init脚本创建启用加密的新集群。
在新标签页打开笔记本
要禁用工作节点之间的加密,请从集群配置中删除init脚本,然后重新启动集群。