在 Hadoop 中,如何验证我在 DFS 传输上是否具有数据加密?



我们在安全数据中心中没有多个用户的环境中运行Hadoop 3.2.1。我们更喜欢为节点之间的活动进行加密数据传输。我们已经确定我们不需要设置 Kerberos,所以我正在努力对块数据传输和 Web 服务进行加密。

由于hdfs-site.xml中的以下设置,我似乎启用了DFS加密:

<!-- SECURITY -->
<property>
<name>dfs.encrypt.data.transfer</name>
<value>true</value>
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>

我在启用了dfs.encrypt.data.transfer的数据节点上收到握手错误,直到我也设置了dfs.block.access.token.enable.

文件系统操作现在运行良好,但我仍然看到很多这样的事情:

2020-02-04 15:25:59,492 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false

我认为 SASL 是 Kerberos 的一项功能,我不应该期望看到报告为真实。听起来对吗?

有没有办法验证DFS是否正在加密节点之间的数据?(我可以拿出一个嗅探器...

回答我自己的问题:我从未找到一条日志消息说"是的,您已启用加密"。但是,我确实运行了一个简单的基准测试,并注意到与发生的加密一致的性能差异:

运行hadoop distcp所花费的时间:

  • 无加密货币:5 分钟
  • 3DES:70分钟
  • RC4:12 分钟
  • 3des+ AES,128 位:16 分钟
  • 3des + AES,256 位:18 分钟

这里有一个用于hdfs-site.xml的Jinja模板,它为3des,AES 256位,IFhadoop_dfs_encrypt=true配置dfs.encrypt :

<!-- SECURITY -->
<property>
<name>dfs.encrypt.data.transfer</name>
<value>{{ hadoop_dfs_encrypt | default(false) }}</value>
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>{{ hadoop_dfs_encrypt | default(false) }}</value>
</property>
<property>
<name>dfs.encrypt.data.transfer.cipher.suites</name> 
<value>AES/CTR/NoPadding</value>
</property>
<property>
<name>dfs.encrypt.data.transfer.cipher.key.bitlength</name>
<value>256</value> 
</property>

根据我所读到的内容,NN 和 DN 之间的 dfs.encrypt 密钥交换不受保护,除非您设置hadoop.rpc.protection=privacy。从各方面来看,这都需要 Kerberos,但我仍在研究我的选择。

相关内容

  • 没有找到相关文章

最新更新