- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 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 ),这会使您的计划变得容易,但由于以下原因而决定放弃:
性能:
在您的情况下,您可以使用私有(private)分布式缓存并发送可转发的 TGT。我认为这没问题,但需要再考虑一下。显然,您需要确保您的实现是安全的,您的票证具有最低限度的必要生命周期,尽可能使用 IP channel 绑定(bind),并将票证的使用限制在授权进程中。
关于hadoop - 如何在 Hadoop mapReduce 中获取 Kerberos 而不是委托(delegate) token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656543/
我已经开始配置 kerberos。 谁能解释我们在 krb5.conf 文件中设置的票证生命周期和更新生命周期。 ticket_lifetime = 2d renew_lifetime = 7d 是
kerberos 只加密身份验证过程还是所有客户端通信? 我的印象是它就像 LAN 的 VPN。 以便所有 LAN 通信都被加密。就像所有互联网通信都通过 VPN 加密一样。 问候奥布里 最佳答案 K
我试图弄清楚kerberos身份验证是如何工作的,但我发现的信息总是缺少一些东西,就好像其中的一部分被认为是理所当然的。我大致了解该过程,但缺少一些细节。 获取 TGT: 首先,用户应从 KDC 获取
是否可以进行可选的 kerberos 身份验证? 我想要的是:如果客户端(浏览器)不在域中,它被重定向到用户名/密码网络登录。否则它会做 SPNEGO 做 Kerberos 认证。 有什么解决办法吗?
目前正在寻找使用 AD 的联合服务器。首先想到的是使用 ADFS 来管理跨域和领域的服务请求。也就是说,应用程序必须有权访问特定用例的 Kerberos 票证。 AD FS 是否在任何时候使用 Ker
我们想通过 Polybase 将我们的 SQL Server 2016 Enterprise 与我们的 Kerberized OnPrem Hadoop-Cluster 和 Cloudera 5.14
哪个性能测试工具支持带有 Kerberos 身份验证的网页? 仅仅回退到 NTLM 的工具是不够的。 最佳答案 我做了一些研究,可用工具列表是: Visual Studio 2010 Load tes
据我了解, SPN 是 Windows 服务的身份验证工具。 Kerberos 是一个用户认证服务 SPNEGO-GSSAPI 是第三方 API能够使用这些服务。 SSPI:是发送的中立层从 SPNE
我知道中央身份验证服务(CAS)和Kerberos都可以用于对建立 session 进行身份验证。这两种协议(protocol)至少涉及三方,并且将创建票证授予票证持续时间身份验证,那么CAS之间有哪
是否可以进行可选的 kerberos 身份验证? 我想要的是:如果客户端(浏览器)不在域上,它将被重定向到用户名/密码 Web 登录。否则它将执行 SPNEGO 执行 Kerberos 身份验证。 如
在我的 Kerberos 系统中: 运行 kinit test并输入 passwd ,成功。 通过 kadmin.local -q "xst -k test.keytab test" 生成 key 表
如何从 NIFI 连接到启用 Kerberos 的 Kudu? 我只看到一个处理器可以访问 Kudu - PutKUDU 并且它不支持 Kerberos。我没有在网上看到任何有关使用 Kerberos
我正在处理与数据库的 kerberized 连接。我想我了解kerberization的基础知识。用户请求KDC的“Authentication Server”部分获取TGT(Ticket Grant
情况如下: 我在 Windows 7 上使用 MIT Kerberos 客户端 kfw 4.0.1 执行此操作。我正在通过 OpenVPN 连接到使用 Kerberos 5 保护的 YARN 集群。这
我在我的机器上使用 MIT kerberos 5 对用户进行身份验证。这会将票证授予用户。我想将票的 maxlife 重置超过 24 小时。默认情况下,kerberos 票证的最长生命周期为 24 小
我最近提出了一个问题,涉及我在让 MIT Kerberos 与 Microsoft 的 LSA 凭据缓存良好配合时遇到的一些问题。 有人告诉我,设置注册表项 AllowTGTSessionKey 应该
我确实有一个具有 KERBEROS 安全性的 Hadoop 集群和另一个没有 KERBEROS 的 Hadoop 集群。 我可以将文件从 KERBEROS hadoop 集群复制到非 KERBEROS
这来自 Kerberos 示例应用程序,位于 https://github.com/spring-projects/spring-security-kerberos/tree/master/sprin
我正在尝试在启用 Kerberos 身份验证的安全模式下设置单节点 Hadoop 集群,使用 hadoop-2.4.0和 jdk1.7.0_25 . 为此,我按照文档中的描述创建了 key 表文件。在
最近使用 Kerberos 安装 samba 共享停止工作。在另一台服务器上具有相同挂载选项的相同共享有效。所以我假设我们的 DNS 设置和/或 Active Directory 设置没有任何问题。似
我是一名优秀的程序员,十分优秀!