gpt4 book ai didi

hadoop - 如何在 Hadoop mapReduce 中获取 Kerberos 而不是委托(delegate) token ?

转载 作者:可可西里 更新时间:2023-11-01 14:27:09 28 4
gpt4 key购买 nike

我是 Java 用户,当向 Hadoop mapReduce 提交作业时,它使用 Kerberos 对 Hadoop 进行身份验证,成功后会创建委托(delegate) token 并将其与作业提交一起传递给 Hadoop,而不是 kerberos 票证(为了安全Hadoop 所述的原因)。现在作业以我的身份运行,但作业本身需要使用 Kerberos 向 Hadoop 之外的其他服务发送请求。现在我在 Hadoop 上没有 kerberos TGT,我无法获得服务票证。

无论如何我可以通过作业传递 Kerberos 票证吗? (我知道这可能很危险,因为我们不想传递 secret ),JobConf 可以将字符串到字符串对传递给 Hadoop,但我必须将 TGT 转换为 json 字符串并在作业运行期间恢复它?

或者是否可以使用委托(delegate)代币改造TGT?

我试着用谷歌搜索但信息不多,有人可以帮忙吗?谢谢。

**已编辑:**

看起来没有将 TGT 传递给 Hadoop 的简单方法,所以我将尝试以下方法,通过作业配置映射将 TGT 作为字符串传递给 Hadoop(仅限字符串),然后将字符串转换回当作业在 Hadoop 中运行时发送到 TGT 对象。问题是我将通过网络传递凭据,这不是最佳实践,也是 Hadoop 没有传递 Kerberos 以确保安全的原因之一。如果我可以重新使用传递给 Hadoop 的改革后的 TGT 来获取服务票据,我会尝试尽可能加密 TGT 字符串以避免安全问题。

所以在本地机器上开始工作之前,代码应该是这样的:

import sun.security.krb5.Credentials;  

Credentials tgt = Credentials.acquireTGTFromCache(null, null); // Make sure kinit is done before this

String tgtStr = tgt.convertToJsonString(); //Need to implement this

Job job = new Job("Test");
JobConf jobConf = job.getJobConf();
jobConf.set("tgtStr", tgtStr);
job.addTask(Test.class, "run", null);
job.submit();
job.waitForCompletion(true);

那么Hadoop运行的job中的函数是这样的:

Configuration conf = TaskContext.get().getConfiguration();
String tgtStr = conf.get("tgtStr");
Credentials tgt = reformTGTFromString(tgtStr);//Need to implement this
Credentials serviceTicket = Credentials.acquireServiceCreds(servicePrincipal, tgt); //This is to get any service ticket

所以我需要实现两个函数来将 TGT 对象 (Credentials.class) 流式传输到字符串,然后将其重新转换回对象。

有人知道更好的解决方案吗?谢谢。

最佳答案

请参阅 http://carfield.com.hk:8080/document/distributed/hadoop-security-design.pdf 的设计,如果您还没有这样做的话。

Or is it possible to use the delegation token reform TGT? No, the delegation tokens are issued by Hadoop name node and while it is based on the Kerberos authentication, it is independent and you can not derive the Kerberos TGT from it.

在最初的设计中,我们考虑只使用 Kerberos(没有任何额外的 token ),这会使您的计划变得容易,但由于以下原因而决定放弃:

性能:

  • 数以千计的 M/R 任务可能需要在同时
  • Kerberos 凭据需要在到期前更新 对于预定作业,这将是一个问题
  • 委托(delegate) token 不依赖于 Kerberos,可以与在边缘使用的非 Kerberos 身份验证机制(例如 SSL)结合使用。

在您的情况下,您可以使用私有(private)分布式缓存并发送可转发的 TGT。我认为这没问题,但需要再考虑一下。显然,您需要确保您的实现是安全的,您的票证具有最低限度的必要生命周期,尽可能使用 IP channel 绑定(bind),并将票证的使用限制在授权进程中。

关于hadoop - 如何在 Hadoop mapReduce 中获取 Kerberos 而不是委托(delegate) token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com