Hadoop 将SPNEGO凭据转发到安全群集

Hadoop 将SPNEGO凭据转发到安全群集,hadoop,kerberos,spnego,spring-security-kerberos,Hadoop,Kerberos,Spnego,Spring Security Kerberos,我有一个由Kerberos保护的集群,还有一个需要代表用户与集群交互的RESTAPI。我使用SPNEGO的Spring安全性对用户进行身份验证,但是当我尝试使用Hadoop SDK时,基于我的尝试,它由于各种原因而失败 当我尝试在用户登录后直接使用SDK时,它会告诉我未启用简单身份验证 我注意到会话的身份验证器是UserNamePasswordAuthenticationToken,这没有意义,因为我使用来自用户的凭据对Kerberos领域进行身份验证 我正试图用我自己的服务帐户和keytab使

我有一个由Kerberos保护的集群,还有一个需要代表用户与集群交互的RESTAPI。我使用SPNEGO的Spring安全性对用户进行身份验证,但是当我尝试使用Hadoop SDK时,基于我的尝试,它由于各种原因而失败

当我尝试在用户登录后直接使用SDK时,它会告诉我
未启用简单身份验证

我注意到会话的
身份验证器
UserNamePasswordAuthenticationToken
,这没有意义,因为我使用来自用户的凭据对Kerberos领域进行身份验证


我正试图用我自己的服务帐户和keytab使用这个开箱即用的项目:

首先,Spring Sec Kerberos扩展是一段糟糕的代码。我已经评估过一次,并放弃使用它。您需要对群集进行身份验证的客户端的凭据。这里基本上有两种选择:

  • 如果您使用的是Tomcat,您可以尝试SpringSecurity提供的JEE预授权包装器以及我的。If将从客户端接收委派凭据,该凭据将使您能够执行任务,前提是您的服务器帐户受信任进行委派
  • 如果以上不是一个选项,请使用带有Java 8的S4U2Proxy/S4U2Self,代表用户主体获取Kerberos票证,然后执行REST API调用
  • 一旦您有了
    GSSCredential
    ,流程就相同了


    免责声明:我不知道Hadoop,但GSS-API过程始终是一样的。

    为了实现它的价值,您可以利用Apache Knox()在安全集群中使用Hadoop REST API。诺克斯将为您处理SPNEGO与各种组件的谈判。您可以使用基于HTTP头的预授权SSO提供程序将最终用户的身份传播到Knox

    详情:

    但是,如果您使用的是您的服务提供商,则需要确保只有受信任的客户端才能调用您的服务

    或者,您可以使用默认的Shiro提供程序,使用用户名/密码通过LDAP对Knox进行身份验证


    以这种方式使用Knox的最大好处之一是,您的服务永远不需要知道集群是否经过kerberized。Knox从您那里抽象出来。

    当使用“Hadoop SDK”时,我猜您创建了一个Hadoop
    配置和一个Hadoop
    用户组信息。如何将配置属性隐式地(即,在本地目录中删除
    核心站点.xml
    等,并将目录添加到类路径)或显式地馈送到
    配置
    ?如果是隐式的,您是否检查了文件是否已被实际读取(否则Hadoop会以静默方式还原为硬编码默认值,例如身份验证简单,并且您的程序稍后会崩溃并烧掉,并显示无意义的异常消息)?如果不是这样,您可以提高一些调试标志,如中所述,即
    -Dsun.security.krb5.debug=true
    导出HADOOP\u JAAS\u debug=true
    我在显式添加配置文件,但我试图完全避免使用UGI,因为它都使用静态成员,并且我需要支持线程安全操作。我可能有一个基本的误解,那就是什么东西需要呈现才能在用户的原则下工作,但我希望它能像在
    主题中获取
    主题的引用和运行我的HDFS列表一样简单;它是由一个家伙写的,他想重写整个UGI的东西(ZK中的东西闻起来更糟),出于维护它的糟糕经验…“我不知道Hadoop,但GSS-API过程总是一样的”——你是一个乐观主义者。。。这本关于“Kerberos和Hadoop”的GitBook的副标题是“门外的疯狂”,里面到处都是H.P.Lovecraft的摘录(与之配套的ApacheCon演示文稿也有一些相关的艺术品)@SamsonScharfrichter也许事情做得不对。它是开源的,改进它吧,因为你比我更了解Hadoop。如果我真的要用Hadoop我会的HortonWorks的工作人员正在做这件事。。。而且他们比其他任何人都更有资格(而且也为此付出了代价)。与此同时,我们只能哀号哭泣。@SamsonScharfrichter如果他们愿意的话,就不会有这样的书名了。这本书是他们写的。他们还启动了[HADOOP-12649]、[ZOOKEEPER-2344]和[HADOOP-12897]等,并在上一版本中修复了SPARK中的几个bug。