Apache Zeppelin 与 Apache Knox 的 OAuth 集成 -- 知识铺
[
](https://.com/@saravsars?source=post_page—–dea2362e3dda——————————–)[
](https://.com/data-collective?source=post_page—–dea2362e3dda——————————–)
Pache Zeppelin 是一个基于 Web 的笔记本平台,可通过交互式数据可视化和笔记本共享实现交互式数据分析。
Zeppelin 原生支持使用 Apache Shiro 的基于 LDAP/PAM 的身份验证和用户角色映射。OAuth 集成本身不可用,但在最新版本中添加了 KnoxSSO 支持。使用 KnoxSSO,我们可以将 Zeppelin 与任何 OAuth 提供商集成。
阿帕奇诺克斯
Apache Knox 是一个应用程序网关,用于与 Apache Hadoop 部署的 REST API 和 UI 进行交互。Knox 支持使用 KnoxSSO 服务对 hadoop 应用程序进行 OAuth 身份验证。
KnoxSSO 服务是一种集成服务,它提供规范化的 SSO 令牌来表示经过身份验证的用户。
Knox 用户指南是关于如何安装和配置它的最佳资源。如果您打算使用 Google OAuth,由于 cookie 大小问题,您可能需要从源代码构建 Knox。
生成 OAuth 凭据
使用以下配置在任何 OAuth 提供程序中为 Web 应用程序创建客户端 ID 和客户端密码
<span id="0d37" data-selectable-paragraph="">Authorized JavaScript origins<em>:</em> https://KNOX_DOMAIN:KNOX_PORT<br>Authorized redirect URIs<em>:</em> https://KNOX_DOMAIN:KNOX_PORT/gateway/knoxsso/api/v1/websso?pac4jCallback=true&client_name=OidcClient</span>
KnoxSSO 配置
在 KNOX_PATH/conf/topologies/knoxsso.xml 中为 KnoxSSO 创建新拓扑
对于 OAuth 支持,Pac4j 可用作联合提供程序。
<span id="377d" data-selectable-paragraph=""><?xml version="1.0" encoding="utf-8"?><br><topology><br> <gateway><br> <provider><br> <role>federation</role><br> <name>pac4j</name><br> <enabled>true</enabled><br> <param><br> <name>pac4j.callbackUrl</name><br> <value><a href="https://.com/data-collective/apache-zeppelin-oauth-integration-using-apache-knox-dea2362e3ddahttps://KNOX_DOMAIN:KNOX_PORT/gateway/knoxsso/api/v1/websso" rel="noopener ugc nofollow" target="_blank">https://KNOX_DOMAIN:KNOX_PORT/gateway/knoxsso/api/v1/websso</a></value><br> </param><br> <param><br> <name>clientName</name><br> <value>OidcClient</value><br> </param><br> <param><br> <name>oidc.id</name><br> <value>CLIENT_ID</value><br> </param><br> <param><br> <name>oidc.secret</name><br> <value>CLIENT_SECRET/value><br> </param><br> <param><br> <name>oidc.preferredJwsAlgorithm</name><br> <value>RS256</value><br> </param><br> <param><br> <name>pac4j.id_attribute</name><br> <value>email</value><br> </param><br> <param><br> <name>oidc.discoveryUri</name><br> <value>OPENID_CONFIGURATION_URL</value><br> </param><br> <param><br> <name>pac4j.cookie.domain.suffix</name><br> <value>KNOX_DOMAIN_SUFFIX</value><br> </param><br> </provider><br></gateway><br></topology></span>
身份断言
标识断言提供程序在传达要使用的标识主体方面起着关键作用。在上面的配置中,电子邮件是在pac4j.id_attribute中配置的,该电子邮件作为用户名传递给Zeppelin。在某些情况下,我们需要转换此属性以匹配我们在内部使用的格式。例如,我们需要将 firstname.lastname@example.com 转换为firstname_lastname。标识断言提供程序可用于这些转换。识别断言支持静态主体映射、concat、switch case 和正则表达式。要将电子邮件转换为名称格式,我们可以使用正则表达式。
<span id="d237" data-selectable-paragraph=""><provider><br> <role>identity-assertion</role><br> <name>Regex</name><br> <enabled>true</enabled><br> <param><br> <name>input</name><br> <value>(.*)\.(.*)@example\.com</value><br> </param><br> <param><br> <name>output</name><br> <value>{1}_{2}</value><br> </param><br> </provider></span>
组映射
为了支持 Zeppelin 中基于角色的访问,例如对 Interpreter 设置的管理员访问,我们需要将用户映射到组。身份断言提供了 HadoopGroupProvider,它支持多种方法,如 unix 组、LDAP 查找等。
如果实例已配置了 Active directory,则可以使用 ShellBasedUnixGroupsMapping。
<span id="7da6" data-selectable-paragraph=""><provider><br> <role>identity-assertion</role><br> <name>HadoopGroupProvider</name><br> <enabled>true</enabled><br> <param><br> <name>hadoop.security.group.mapping</name> <value>org.apache.hadoop.security.ShellBasedUnixGroupsMapping</value><br> </param><br> </provider></span>
KnoxSSO 服务
将 KnoxSSO 服务添加到拓扑
<span id="710e" data-selectable-paragraph=""><service><br> <role>KNOXSSO</role><br> <param><br> <name>knoxsso.cookie.secure.only</name><br> <value>true</value><br> </param><br> <param><br> <name>knoxsso.token.ttl</name><br> <value>3600000</value><br> </param><br> <param><br> <name>knoxsso.redirect.whitelist.regex</name><br> <value>^/.*$;^https?://KNOX_DOMAIN:\d{0,9}/.*$$</value><br> </param><br></service></span>
Knoxssout 拓扑
在 KNOX_PATH/conf/topologies/knoxsso.xml 中创建新的拓扑 Knoxssout 以及用于注销的以下拓扑
<span id="0414" data-selectable-paragraph=""><topology><br> <gateway><br> <provider><br> <role>webappsec</role><br> <name>WebAppSec</name><br> <enabled>true</enabled><br> <param><br> <name>cors.enabled</name><br> <value>true</value><br> </param><br> </provider><br></gateway><br><service><br> <role>KNOXSSO</role><br></service><br></topology></span>
我们需要 knox 服务器的公钥进行签名验证。导出证书并将其复制到 conf 文件夹。
<span id="5258" data-selectable-paragraph=""><em>KNOX_PATH/bin/</em>knoxcli.sh export-cert<br>cp KNOX_PATH/data/security/keystores/gateway-identity.pem /etc/knox/conf/knoxsso.pem</span>
Zeppelin 配置
在 shiro.ini 中配置 KnoxSSO 身份验证
<span id="a07e" data-selectable-paragraph="">[main]<br>knoxJwtRealm = org.apache.zeppelin.realm.jwt.KnoxJwtRealm<br>knoxJwtRealm.providerUrl = <a href="https://.com/data-collective/apache-zeppelin-oauth-integration-using-apache-knox-dea2362e3ddahttps://KNOX_DOMAIN:KNOX_PORT/" rel="noopener ugc nofollow" target="_blank">https://KNOX_DOMAIN:KNOX_PORT/</a><br>knoxJwtRealm.login = gateway/knoxsso/api/v1/websso<br>knoxJwtRealm.logout = gateway/knoxssout/api/v1/webssout<br>knoxJwtRealm.logoutAPI = true<br>knoxJwtRealm.redirectParam = originalUrl<br>knoxJwtRealm.cookieName = hadoop-jwt<br>knoxJwtRealm.publicKeyPath = /etc/knox/conf/knoxsso.pem<br>knoxJwtRealm.groupPrincipalMapping = group.principal.mapping<br>knoxJwtRealm.principalMapping = principal.mapping<br>authc = org.apache.zeppelin.realm.jwt.KnoxAuthenticationFilter</span>
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek001/post/20240430/Apache-Zeppelin-%E4%B8%8E-Apache-Knox-%E7%9A%84-OAuth-%E9%9B%86%E6%88%90--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com