首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
技术百科首页 >Hadoop安全 >Hadoop安全如何实现跨集群的安全认证?

Hadoop安全如何实现跨集群的安全认证?

词条归属:Hadoop安全

在Hadoop生态中,​跨集群安全认证的核心目标是实现不同集群间用户与服务的身份互认,确保跨集群访问的安全性(如数据同步、作业调度、资源共享)。当前主流的实现方式是Kerberos跨域互信,辅以LDAP/AD集成​(统一用户管理)和Apache Knox SSO​(简化认证流程),形成“身份认证-授权-审计”的完整安全体系。


一、核心机制:Kerberos跨域互信

Kerberos是Hadoop生态的标准认证协议,通过“票据授予票据(TGT)+服务票据(ST)”的交换实现双向身份验证。跨集群场景下,需通过KDC(Key Distribution Center)互信,使一个集群的用户/服务能使用本地Kerberos票据访问另一个集群的资源。

1. 前提条件

  • 两个集群均启用Kerberos认证​:需先为每个集群配置Kerberos(如生成KDC、创建主体、分发Keytab等)。
  • 定义不同的Kerberos Realm​:为每个集群分配唯一的Realm(如CLUSTER-A.COM、CLUSTER-B.COM),用于区分不同集群的身份域。

2. 配置步骤

​(1)创建跨域信任Principal

在两个集群的KDC中创建相互信任的主体​(krbtgt主体),用于跨域票据授予。

  • 示例命令(Cluster A的KDC)​​: kadmin.local -q "addprinc -e \"aes128-cts:normal des3-hmac-sha1:normal\" krbtgt/CLUSTER-B.COM@CLUSTER-A.COM" 此命令创建CLUSTER-B.COM领域的票据授予票据,供CLUSTER-A.COM的用户访问CLUSTER-B.COM的服务。
  • 示例命令(Cluster B的KDC)​​: kadmin.local -q "addprinc -e \"aes128-cts:normal des3-hmac-sha1:normal\" krbtgt/CLUSTER-A.COM@CLUSTER-B.COM" 此命令创建CLUSTER-A.COM领域的票据授予票据,供CLUSTER-B.COM的用户访问CLUSTER-A.COM的服务。 ​注意​:两个krbtgt主体的加密类型(Encryption Types)​密钥版本号(KVNO)​必须一致,否则跨域认证会失败。
​(2)配置KDC信任关系

修改两个集群的krb5.conf文件(位于/etc/krb5.conf),添加对方的KDC信息,建立信任路径。

  • Cluster A的krb5.conf配置​: [libdefaults] default_realm = CLUSTER-A.COM dns_lookup_realm = false dns_lookup_kdc = true ticket_lifetime = 24h renew_lifetime = 7d [realms] CLUSTER-A.COM = { kdc = kdc-a.cluster-a.com admin_server = kdc-a.cluster-a.com } CLUSTER-B.COM = { kdc = kdc-b.cluster-b.com admin_server = kdc-b.cluster-b.com } [domain_realm] .cluster-a.com = CLUSTER-A.COM cluster-a.com = CLUSTER-A.COM .cluster-b.com = CLUSTER-B.COM cluster-b.com = CLUSTER-B.COM
  • Cluster B的krb5.conf配置​: 类似Cluster A,将CLUSTER-A.COM和CLUSTER-B.COM的信息互换。
​(3)配置Hadoop集群的Kerberos参数

修改Hadoop的核心配置文件(core-site.xml、hdfs-site.xml、yarn-site.xml),启用Kerberos认证并指定跨域主体。

  • core-site.xml配置​: <configuration> <property> <name>hadoop.security.authentication</name> <value>kerberos</value> <!-- 启用Kerberos认证 --> </property> <property> <name>hadoop.security.authorization</name> <value>true</value> <!-- 启用授权 --> </property> <property> <name>hadoop.security.auth_to_local</name> <value>RULE:[2:$1@$0]([ndj]n/.*@CLUSTER-B.COM)s/.*/hdfs/RULE:[2:$1@$0](hdfs/.*@CLUSTER-B.COM)s/.*/hdfs/RULE:[1:$1@$0]([^@]*@CLUSTER-B.COM)s/@.*//</value> <!-- 将跨域主体映射到本地用户(如hdfs) --> </property> </configuration> ​说明​:hadoop.security.auth_to_local规则用于将Kerberos主体(如hdfs/hadoop-b.cluster-b.com@CLUSTER-B.COM)转换为本地系统用户(如hdfs),确保跨集群服务能正确识别用户身份。
  • hdfs-site.xml配置​: <configuration> <property> <name>dfs.namenode.kerberos.principal</name> <value>hdfs/hadoop-a.cluster-a.com@CLUSTER-A.COM</value> <!-- NameNode主体 --> </property> <property> <name>dfs.datanode.kerberos.principal</name> <value>hdfs/hadoop-a.cluster-a.com@CLUSTER-A.COM</value> <!-- DataNode主体 --> </property> <property> <name>dfs.web.authentication.kerberos.principal</name> <value>HTTP/hadoop-a.cluster-a.com@CLUSTER-A.COM</value> <!-- Web UI主体 --> </property> </configuration> ​说明​:需为跨集群的服务(如NameNode、DataNode)指定正确的Kerberos主体,确保服务间能相互认证。
​(4)分发Keytab文件

将每个集群的Keytab文件(包含主体密钥)分发到其他集群的对应节点,用于自动认证(避免每次输入密码)。

  • 示例命令​: # 将Cluster A的NameNode Keytab复制到Cluster B scp /etc/security/keytabs/hdfs.headless.keytab user@hadoop-b.cluster-b.com:/etc/security/keytabs/ ​注意​:Keytab文件的权限需设置为400(仅所有者可读),避免泄露。
​(5)测试跨域认证

使用kinit命令获取票据,并测试跨集群访问:

  • 在Cluster A上获取票据​: kinit -kt /etc/security/keytabs/hdfs.headless.keytab hdfs/hadoop-a.cluster-a.com@CLUSTER-A.COM
  • 访问Cluster B的HDFS​: hdfs dfs -ls hdfs://hadoop-b.cluster-b.com:9000/ # 使用Cluster B的HDFS地址 若能成功列出目录,说明跨域认证配置成功。

二、补充机制:LDAP/AD集成

为了简化用户管理,企业通常会将LDAP(Lightweight Directory Access Protocol)​Active Directory(AD)​与Hadoop集成,实现统一用户身份存储。跨集群场景下,LDAP/AD可作为“权威用户源”,确保所有集群的用户账号一致。

1. 集成步骤

  • 配置Hadoop的LDAP/AD连接​:修改core-site.xml,指定LDAP/AD的服务器地址、 base DN(Distinguished Name)、用户搜索过滤器等参数。 示例配置: <configuration> <property> <name>hadoop.security.group.mapping</name> <value>org.apache.hadoop.security.LdapGroupsMapping</value> <!-- 使用LDAP进行组映射 --> </property> <property> <name>hadoop.security.group.mapping.ldap.url</name> <value>ldap://ldap-server:389</value> <!-- LDAP服务器地址 --> </property> <property> <name>hadoop.security.group.mapping.ldap.base.dn</name> <value>dc=example,dc=com</value> <!-- Base DN --> </property> <property> <name>hadoop.security.group.mapping.ldap.user.search.filter</name> <value>(&(objectClass=user)(sAMAccountName={0}))</value> <!-- 用户搜索过滤器 --> </property> </configuration>
  • 同步用户到Hadoop​:使用hadoop fs -chown或hadoop fs -chmod命令,将LDAP/AD中的用户同步到Hadoop集群,确保跨集群的用户权限一致。

三、优化机制:Apache Knox SSO

Apache Knox是Hadoop的API网关,可实现单点登录(SSO)​,简化跨集群的认证流程。通过Knox,用户只需登录一次,即可访问多个集群的服务(如HDFS、YARN、Hive)。

1. 集成步骤

  • 部署Knox网关​:在每个集群的前端部署Knox网关,作为所有REST API和UI的入口。
  • 配置Knox的SSO​:修改Knox的knoxsso.xml配置文件,指定LDAP/AD或Kerberos作为认证源,启用SSO功能。
  • 集成Hadoop集群​:将Hadoop集群的服务(如HDFS的NameNode UI)添加到Knox的代理列表,使Knox能代理所有集群的服务请求。
相关文章
初探 Hadoop 集群安全
最近因为某些原因学习接触到了开源的大数据框架:Hadoop,该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。它旨在从单个服务器扩展到数千台机器,每台机器都提供本地计算和存储,详细概念知识背景我这就不介绍了,各位自行学习。
信安之路
2020-04-21
2.1K0
Security安全认证 | Spring Boot如何集成Security实现安全认证
前面介绍了Spring Boot 使用JWT实现Token验证,其实Spring Boot 有完整的安全认证框架:Spring Security。接下来我们介绍如何集成Security 实现安全验证。
章为忠学架构
2023-03-23
1.4K0
Webman实战教程:使用JWT认证插件实现跨域安全认证
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
Tinywan
2023-10-22
1.6K1
Hadoop集群之浅析安全模式
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。 (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态[on/off]) (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式) (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式) (4)bin/hdfs dfsadmin -safemode wait (功能描述:输入写操作的命令,但不立即执行,而是放在缓存队列中,等待安全模式退出再依次执行)
孙晨c
2020-07-13
6300
WebService基于SoapHeader实现安全认证
      本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如果使用的是Viaual Studio 2008可以使用WCF,WCF里面提供了更多的服务认证方法。以下提供一种基于SoapHeader的自定义验证方式。
跟着阿笨一起玩NET
2018-09-18
1.5K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券