配置Hadoop数据传输加密
在大数据集群运行过程中,Hadoop各组件之间(如HDFS、Yarn、Spark、HBase等)通过RPC通道进行数据传输和指令交互。默认情况下,这些通信通道不加密,数据以明文方式在网络中传输。当集群部署在公网或非可信网络环境中时,未加密的数据可能被中间人截获,导致敏感信息泄露。那么,如何对Hadoop组件间的数据传输通道进行加密?MRS支持通过修改Hadoop组件配置参数,启用RPC通道和数据传输通道的加密协议,保障数据传输安全。同时支持配置Web服务的最大并发连接数限制,防止服务因过载而不可用。
设置Hadoop组件安全通道加密
安全加密通道是HDFS中RPC通信的一种加密协议,当用户调用RPC时,用户的login name会通过RPC头部传递给RPC,之后RPC使用Simple Authentication and Security Layer(SASL)确定一个权限协议(支持Kerberos和DIGEST-MD5两种),完成RPC授权。
默认情况下,大数据集群内组件间的通信是不加密的,为防止数据在公网或非可信网络中被截获,集群管理员可以调整Hadoop组件相关配置,使用加密协议对数据传输通道加密。
在HDFS组件的配置界面中设置相关参数的值,设置后全局生效,即Hadoop中各模块的RPC通道是否加密全部生效。
Hadoop中RPC通道包括:
- 客户端访问HDFS的RPC通道。
- HDFS中各模块间的RPC通道,如DataNode与NameNode间的RPC通道。
- 客户端访问Yarn的RPC通道。
- NodeManager和ResourceManager间的RPC通道。
- Spark访问Yarn、Spark访问HDFS的RPC通道。
- Mapreduce访问Yarn、Mapreduce访问HDFS的RPC通道。
- HBase访问HDFS的RPC通道。
以下操作步骤适用于在HDFS组件的配置界面中设置相关参数的值,设置后全局生效,即Hadoop中各模块的RPC通道是否加密全部生效。
- 进入HDFS服务配置页面,修改数据传输加密参数。
在集群Manager管理界面中,选择“集群 > 服务 > 服务名 > 配置”,展开“全部配置”页签,在搜索框中输入参数名称,修改配置参数后需要重启对应服务以使配置生效。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 根据业务安全需求,参考下表修改对应参数的值。
表1 参数说明 服务名称
配置参数
说明
缺省值
HDFS
hadoop.rpc.protection
设置Hadoop中各模块的RPC通道是否加密。
- 设置为“privacy”表示通道加密,认证、完整性和隐私性功能都全部开启。这种方式会降低性能。
- 设置为“integrity”表示不加密,只开启认证和完整性功能。 为保证数据安全,请谨慎使用这种方式。
- 设置为“authentication”表示不加密,仅要求认证报文,不要求完整性和隐私性。这种方式能保证性能但存在安全风险。
本参数设置后全局生效,即Hadoop中各模块的RPC通道的加密属性全部生效。
- 设置后需要重启服务生效,且不支持滚动重启。
- 设置后需要重新下载客户端配置,否则HDFS无法提供读写服务。
- 安全模式:privacy
- 普通模式:authentication
HDFS
dfs.encrypt.data.transfer
设置客户端访问HDFS的通道和HDFS数据传输通道是否加密,包括DataNode间的数据传输通道、客户端访问DataNode的DT(Data Transfer)通道。
仅当“hadoop.rpc.protection”设置为“privacy”时使用,业务数据传输量较大时,默认启用加密对性能影响严重,使用时请注意。
如果互信集群的一端集群配置了数据传输加密,则对端集群也需配置同样的数据传输加密。
- 设置为“true”表示加密。
- 设置为“false”表示不加密。
false
HDFS
dfs.encrypt.data.transfer.algorithm
设置客户端访问HDFS的通道和HDFS数据传输通道的加密算法。只有在“dfs.encrypt.data.transfer”配置项设置为“true”,此参数才会生效。
- 缺省值为“3des”,表示采用3DES算法进行加密。
- 设置为“rc4”,采用RC4加密算法进行加密,为避免出现安全隐患,不推荐设置为该值。
3des
HDFS
dfs.encrypt.data.transfer.cipher.suites
指定数据加密的密码套件。
可以设置为空或“AES/CTR/NoPadding”,如果不指定此参数,则使用“dfs.encrypt.data.transfer.algorithm”参数指定的加密算法进行数据加密。
AES/CTR/NoPadding
HBase
hbase.rpc.protection
设置HBase通道是否加密,包含HBase客户端访问HBase服务端的RPC(remote procedure call)通道,HMaster和RegionServer间的RPC通道。
- 设置为“privacy”表示通道加密,认证、完整性和隐私性功能都全部开启。
- 设置为“integrity”表示不加密,只开启认证和完整性功能。
- 设置为“authentication”表示不加密,仅要求认证报文,不要求完整性和隐私性。
privacy方式会对传输内容进行加密,包括用户Token等敏感信息,以确保传输信息的安全,但是该方式对性能影响很大,对比另外两种方式,会带来约60%的读写性能下降。
请根据企业安全要求修改配置,且客户端与服务端中该配置项需使用相同设置。
- 安全模式:privacy
- 普通模式:authentication
- 验证配置是否生效。
在集群Manager管理界面,选择“集群 > 服务 > HDFS > 概览”,查看HDFS服务状态是否为良好。
使用重新下载的客户端执行HDFS文件读写操作,确认数据传输加密已启用(可通过查看DataNode日志中是否出现加密握手记录确认)。
Web最大并发连接数限制
在配置数据传输加密的同时,集群管理员可能还需要保护Web服务器的可靠性。当大量用户同时访问Web服务时,可能导致服务过载甚至不可用。通过设置Web最大并发连接数限制,可对新增用户连接进行限制,防止服务因过载而不可用,同时避免DDOS攻击。
- 在集群Manager管理界面中,选择“集群 > 服务 > 服务名 > 配置”,展开“全部配置”页签,在搜索框中输入参数名称,修改配置参数后需要重启对应服务以使配置生效。
- 根据业务需求,参考下表修改对应参数的值。
表2 参数说明 服务名称
配置参数
说明
缺省值
HDFS/Yarn
hadoop.http.server.MaxRequests
该参数用于设置各组件Web的最大并发连接数限制。当并发连接数达到此值时,新增连接将被拒绝。建议根据集群规模和并发用户数调整,默认值2000适用于大多数场景。
2000
Spark/Spark2x
spark.connection.maxRequest
该参数用于设置JobHistory允许的最大请求连接数。当并发请求数达到此值时,新增请求将被拒绝。建议根据Spark作业并发量调整。
5000
- 验证配置是否生效。
重启对应服务后,在浏览器中访问对应Web页面,确认页面可正常加载。可通过模拟并发访问测试连接数限制是否生效。
相关文档
了解安全Hadoop RPC的更多技术细节,请参考以下文档:
- MRS 3.2.0之前版本:Hadoop SecureMode - Data Encryption on RPC
- MRS 3.2.0及之后版本:Hadoop SecureMode - Data Encryption on RPC
- 如需配置Kerberos认证,请参考MRS集群Kerberos认证介绍。
- 如需重新下载客户端配置,请参考服务端配置过期后更新MRS集群客户端。