在hadoop中,如何验证dfs传输上是否有数据加密?

mlnl4t2r  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(932)

我们在一个安全的数据中心中没有多个用户的环境中运行hadoop3.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是否在节点之间加密数据(我可以找到一个嗅探器……)

5vf7fwbs

5vf7fwbs1#

回答我自己的问题:我从未发现一条日志消息说“是的,您启用了加密”。但是,我运行了一个简单的基准测试,并注意到与加密一致的性能差异:
运行一个 hadoop distcp :
无密码:5分钟
3des:70分钟
rc4:12分钟
3des+aes,128位:16分钟
3des+aes,256位:18分钟
这里有一个jinja模板 hdfs-site.xml ,它为3des、aes 256位配置dfs.encrypt,如果 hadoop_dfs_encrypt=true :

<!-- 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>

据我所知,除非您设置 hadoop.rpc.protection=privacy . 所有人都认为,这需要kerberos,但我仍在研究我在那里的选择。

相关问题