写点什么

Apache Knox SSO 及在移动云 EMR 中的实践

  • 2022 年 5 月 17 日
  • 本文字数:2948 字

    阅读完需:约 10 分钟

本文作者为中国移动云能力中心大数据团队软件开发工程师单滢滢,文章主要介绍了 Apache KNOX、KNOX SSO 的基本原理以及在移动云弹性 MapReduce 产品中的应用实践。

KNOX SSO

一、KNOX 简介

Apache Knox 网关是一个应用程序网关,用于与 Apache Hadoop 部署的 REST API 和 UI 进行交互。Knox Gateway 为与 Apache Hadoop 集群的所有 REST 和 HTTP 交互提供单一的访问点。

Knox 提供三组面向用户的服务:

1. 代理服务(Proxying Services):Apache Knox 项目的主要目标是通过代理 HTTP 资源提供对 Apache Hadoop 的访问。

2. 认证服务(Authentication Services):对 REST API 访问以及 UIs 的 WebSSO 流进行身份验证。LDAP/AD,基于头的 PreAuth,Kerberos,SAML,OAuth 都是可用的选项。

3. 客户端服务(Client Services):可以通过 DSL 编写脚本或直接将 Knox Shell 类作为 SDK 来完成客户端开发。



Apache Knox 代理网关用于保护 Hadoop 生态体系安全,为 Hadoop 集群提供唯一的代理入口。Knox 以类似反向代理的形式挡在集群前面,通过内置的过滤器链来处理 URL 请求,支持使用 LADP 进行用户身份认证,隐匿部署细节(例如端口号和机器名等),接管所有用户的 HTTP 请求(例如 WEB UI 控制台访问和 RESTful 服务调用),以此来保护集群安全。不仅如此,Knox 还能担任认证网关的角色。

Hadoop 大数据平台生态圈中主要用 Knox 来保护组件 UI,例如 HDFS UI、YARN UI、Spark UI、HBase UI 等。



典型的 Knox 请求服务资源过程如下:



1.HDFS 中进行 Knox proxy 代理配置,即 Knox 用户代理所有客户端用户;

2.客户端发出 Rest 请求;

3.客户端单点登录输入用户名、密码;

4.LDAP/AD 进行用户认证;

5.使用 Knox keytab 对客户端用户代理、认证;

6.使用 Knox keytab 进行 Hadoop 资源请求。

二、KNOX SSO 简介

Knox Single Sign-on(SSO)提供使用单个用户名和密码访问控制多个 Web UIs 功能。

带有默认 Knox SSO IDP 的 Apache Knox 允许使用基于表单的身份验证作为 SSO 的一种解决方案来访问和开发 Knox SSO 支持的应用程序,包括 Ambari、Ranger、Hadoop UIs 和通过 Knox 使用 REST APIs 定制的应用程序。

目前,有两种配置 Knox SSO 的方法:

1.LDAP/AD:使用 Shiro 安全框架,默认方法。2.SAML:使用 pac4j+Okta 安全框架。

三、KNOX SSO 处理 HTTP 请求流程

以下是通过 Knox SSO 集成 SAML 认证的通用时序图:

流程说明:

1.SSOCookieProvider 检查 hadoop-jwt cookie,如果 cookie 中不存在 hadoop-jwt,会重定向请求至 sso.authentication.provider.url(将匹配到 knoxsso-topology 中的 Knox SSO 服务端点)2.Knox SSO 配置的 IdP 向用户发起验证(LDAP/AD,SAML_IdP 等)3.Knox SSO 配置的 IdP 验证用户提供的凭据/token(例如 Basic Auth 的 username/password)4.认证通过,WebSSO 服务在 cookie 中生成 hadoop-jwt5.WebSSO 服务将请求重定向至最初请求的地址,此时 cookie 中已经存在 hadoop-jwt,此后所有操作不再需要认证,直到过期为止

Knox SSO 为集成许多身份验证系统和 SSO 解决方案提供了一种抽象方法,使参与集成的 web 应用程序能够更容易地扩展到这种方法中。如果没有 Knox SSO 提供的 token 认证功能,每个组件 UI 都需要单独与各自的解决方案集成。

类似的,使用 LDAP/AD 作为 IdP,Basic Auth 和 Form 类型的验证时序图分别如下:

 

KNOX SSO 在移动云 EMR 中的实践

一、移动云 EMR 简介

移动云弹性 MapReduce(简称 EMR)是构建于云端的大数据 PaaS 服务,包含 Hadoop(HDFS/YARN/MapReduce)、Spark、Hive 等开源技术。支持用户快速创建集群,进行海量数据存储与计算。

产品功能主要包括:

1. 集群管理

集群生命周期:支持集群订购、退订、删除等。•集群实例管理:支持集群资源管理、集群服务管理、集群用户管理等。•集群运营管理:支持集群配额管理、容量管理、权限管理等。•集群运维管理:支持集群监控告警、故障管理、参数配置管理等。

2. 集群服务

Hadoop(HDFS/YARN/MapReduce):作为大数据存储与计算平台。•Spark:基于内存的新一代分布式计算引擎,主要用来构建大型的、低延迟的数据分析应用程序。•Hive:基于 Hadoop 的离线分析型数据仓库,专门查询和分析大型数据集、表和存储管理服务。

移动云 EMR 还具有操作简单易用、环境安全可靠、成本经济可控、生态完善开放等产品优势,适用于离线数据分析和离线存储与计算等应用场景。

移动云 EMR 中将 Hadoop 生态原生 UI 映射成单点 Knox 形式的 UI,如下图所示:

此外,移动云 EMR 还通过 Knox 统一纳管了包括 Spark,LogSearch 和 Ranger 等非 Hadoop 生态圈组件的 UI。

二、KNOX SSO 在移动云 EMR 中的实践

移动云 EMR 产品中集成 Knox 用于代理集群中各个服务 UI,特别的,通过 Knox SSO 技术,EMR 实现了对集群监控管理平台 Ambari 的代理,提供完整的开箱即用集群统一 UI 访问能力。

移动云 EMR 集群的每个节点,均为一台弹性云服务器,使用云镜像提供启动云服务器实例所需的所有信息。通俗地说,镜像就是云服务器的“装机盘”。云镜像是一种用于业务连续性,灾难恢复和备份的技术,将软件以及环境集成到云主机当中,通过镜像服务生成副本文件。

使用云镜像可以灵活便捷地创建出与镜像系统环境或软件一致的云主机,从而避免复杂的服务器配置问题,实现即开即用。

实现 Ambari SSO 关键步骤

移动云 EMR 中使用 HAProxy 实现 Knox 高可用,为实现开箱即用的高可用 Knox 能力,需要保证高可用集群下的 Knox 证书一致,因此预先准备 Knox 证书并固化到镜像中,用于 Knox 安全认证,参考命令如下(其中<cert.pem>为文件存储位置)。

$JAVA_HOME/bin/keytool -export -alias gateway-identity -rfc -file <cert.pem> -keystore {jkspath}
复制代码

LDAP 启动时初始化,完成 LDAP 和 Ambari 用户同步,参考命令如下。

默认情况下,Ambari使用内部数据库作为身份验证和授权的用户存储。可以将Ambari配置为对存储在LDAP、activedirectory(AD)或FreeIPA数据存储中的外部用户进行身份验证尝试通过Web UI访问Ambari,确认已重定向到Knox登录页面。
ambari-server setup-ldap
复制代码

设置 LDAP 集成后,必须使用 ambari-server 将 LDAP 用户和组与 Ambari 数据库中的用户同步。

ambari-server sync-ldap --all
复制代码

KNOX 启动时初始化,完成 ambari-server 的 Knox SSO 配置,参考命令如下。

ambari-server setup-sso
复制代码

效果展示

输入 Ambari 的 Knox 代理 URL,提示不安全,选择继续前往。

跳转到 Knox SSO 表单验证页面请求验证,并带有 originalUrl 参数。

输入配置的 LDAP 中保存的用户名和密码,验证通过,生成 hadoop-jwt 存入 cookie,重定向到 originalUrl,通过正确的 hadoop-jwt 登陆 Ambari。

总结与思考

Knox SSO 为移动云 EMR 中实现单点登录访问控制多个大数据组件 Web UIs 提供了能力。

为 Ambari 配置 Knox SSO 需要注意以下几点:

•配置 Ambari 可使用外部用户存储系统(如 LDAP)进行身份验证和授权,否则无法通过 Knox 登录验证页面完成对 Ambari 的认证

•保持 Ambari 与 LDAP 的用户和组同步,否则会提示单点登录重定向错误

•Ambari 需要开启 SSO,并设置相关配置,否则无法通过 Knox 代理 Ambari UI

使用 Knox 中遇到的一些问题,供大家参考:

•由于 HBase 版本限制,Knox 对一些低版本的 HBase UIs 的代理还不够完善

•如果 Knox 进程没有单独配置内存,进程会自动根据系统内存大小按照比例划分可用内存。当频繁触发 Knox 的访问,会导致 Knox 进程占用内存高,严重的会直接导致 UIs 不可访问。因此使用 Knox 作为代理,建议为 Knox 单独配置内存

•使用 keytool 生成的证书有默认的有效期,因此需要及时关注证书是否在有效期内

用户头像

移动云,5G时代你身边的智慧云 2019.02.13 加入

移动云大数据产品团队,在移动云上提供云原生大数据分析LakeHouse,消息队列Kafka/Pulsar,云数据库HBase,弹性MapReduce,数据集成与治理等PaaS服务。 微信公众号:人人都学大数据

评论

发布
暂无评论
Apache Knox SSO 及在移动云 EMR 中的实践_MapReduce服务_移动云大数据_InfoQ写作社区