hadoop中的token认证

周更快变成月更了,但还是要坚持,本文来聊聊hadoop中的token,涉及到的点如下图所示。

5dc4ce39313cdfb4ae0ecbe997114aca.png


【Hadoop为什么需要Token】


hadoop最初的实现中并没有认证机制,这意味着存储在hadoop中的数据很容易泄露。后来,基于kerberos认证的安全特性被加入到hadoop中,但是基于kerberos的认证在使用过程中,会存在以下问题:

  • 过程比较复杂,认证过程中还需要涉及到第三方的服务

  • kdc服务存在单点问题(不管是可靠性,还是性能瓶颈),尤其是当有大量用户请求需要通过kdc来获取tgt票据时。

因此Token认证被引入充当kerberos的补充,在兼顾安全认证的同时,性能没有较大的损耗。

在hadoop中,token主要包括DelegationToken,以及其他一些token,例如之前文件介绍过的BlockToken,以及yarn中一系列的token。

【Token是什么】


所谓token,本质上就是服务端生成的一串加密字符串,以作为客户端请求的一个“令牌”。  通常而言,用户第一次通过使用账号密码成功登录后,服务端会生成一个token及token的有效时间返回给客户端,此后,客户端只需要在有效时间内带上这个token发送请求即可。而不需要再次带上用户名和密码。

token具有以下优点:

  • 随机性,不可预测性,时效性,无状态,跨域等特点

  • 完全有应用管理,可以避开同源策略

  • 可以避免CSRF攻击

  • 可以在多个服务间共享

【SASL是什么】


token认证通常是在SASL中进行的,接下来就简单介绍下SASL。

简单认证与安全层(Simple Authentication And Security Layer)是一个在网络协议中用来认证和数据加密的框架。它把认证机制从程序中分离开,理论上使用SASL的程序协议都可以使用SAS

Hadoop RPC 中增加认证机制,可以通过以下步骤实现: 1. **修改服务端代码以支持认证逻辑** 在 Hadoop 的 Thrift 服务器初始化过程中,可以插入认证检查逻辑。例如,在 `ImpalaServer::HandleRpcs()` 方法中调用 `AuthenticateUser()` 函数来验证用户身份[^1]: ```cpp void ImpalaServer::HandleRpcs() { ... rpc::ThriftServer* processor = new rpc::ThriftServer(this, server_address_, num_acceptors_, port_); processor->setProtocolFactory(protocol_factory_); // Start listening for incoming requests processor->serve(); Shutdown(); VLOG(1) << "RPC server started"; AuthenticateUser("admin", ""); // TODO: Remove hardcoding admin account once Authn enabled. } ``` 这种方式适用于简单的硬编码认证逻辑,实际应用中应结合 Kerberos 或 LDAP 等更安全的认证机制。 2. **使用 Kerberos 实现安全认证** Hadoop 原生支持基于 Kerberos 的安全认证机制。启用 Kerberos 需要在配置文件中设置相关属性,如 `hadoop.security.authentication` 设置为 `kerberos`。此外,需要生成和分发密钥表(keytab)文件,并在服务启动时指定 principal 和 keytab 路径。 3. **自定义认证协议与 Token 机制** 可以通过扩展 Thrift 协议或使用 SASL(Simple Authentication and Security Layer)协议来实现自定义认证机制。SASL 提供了多种认证机制,包括 DIGEST-MD5、PLAIN、GSSAPI 等,适合用于 RPC 通信中的身份验证。 4. **集成外部认证系统(如 LDAP、OAuth)** 如果已有企业级认证系统,可将其集成到 Hadoop RPC 中。例如,通过编写自定义的 `LoginModule` 来实现 LDAP 认证,或者在客户端请求时携带 OAuth Token 并由服务端验证其有效性。 ### 示例:Kerberos 认证配置 ```xml <!-- core-site.xml --> <property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> </property> ``` ```bash # 启动服务时指定 Kerberos principal 和 keytab 文件 hadoop-daemon.sh start namenode --config /etc/hadoop/conf \ -Djava.security.auth.login.config=/etc/hadoop/conf/hdfs_jaas.conf ``` 其中 `hdfs_jaas.conf` 内容如下: ```conf Server { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/etc/security/keytabs/hdfs.keytab" principal="hdfs/_HOST@REALM"; }; ``` ### 总结 Hadoop RPC 支持多种认证机制,从基本的身份验证到 Kerberos 安全模型均可实现。开发者可以根据具体需求选择合适的方式进行集成和部署。
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值