java - Java中的Kerberos kinit缓存与keytab访问安全的HBase
问题描述
我正在编写一个java程序来访问kerberized集群上的安全HBase。我的理解是我可以通过两种方式做到这一点:
使用主体名称和密码登录以在缓存中创建 TGT 并使用它来访问 hbase。
使用 keytab 文件访问 hbase。
在决定我应该采用哪种方法之前,我想了解这两种选择的优缺点。我做了谷歌,发现这篇文章解释了这两个选项是如何工作的。这篇文章还指出,keytab 中的 TGT 可以通过调用来更新,checkTGTAndReloginFromKeytab
但它没有谈到更新 kinit 缓存的 TGT 的更新过程,但我认为可以使用renewTGT
jaas config 中的属性来完成(如果我错了,请纠正我)。这篇文章的另一点是 kinit 缓存仅适用于短期运行的应用程序,因为我们无法更新超过 7 天的 TGT。
我倾向于缓存方法,因为我可以将用户名和密码安全地保存在 keyvault 中,而不必担心保护 keytab。但是这种方法的限制如前所述,TGT 的最大长度(7 天),我不能将它用于长时间运行的作业,至少这是我理解的(纠正我)。
如果您可以解释两者之间的区别,或者将我指向一篇详细解释这两种方法的好文章,那将非常有帮助。
我已经编写了下面的程序来使用用户名和密码获取 TGT。
public static LoginContext kinit() throws LoginException {
return new LoginContext("Client", callbacks -> {
for(Callback c : callbacks){
if(c instanceof NameCallback)
((NameCallback) c).setName(username);
if(c instanceof PasswordCallback)
((PasswordCallback) c).setPassword(password);
}
});
}
public static void connectToKerberizedHBase(Configuration conf) throws LoginException, IOException {
UserGroupInformation.setConfiguration(conf);
LoginContext lc = kinit();
lc.login();
UserGroupInformation.loginUserFromSubject(lc.getSubject());
}
如下使用它
somemethod(){
Configuration config = HBaseConfiguration.create();
loadHBaseConfigsFromProperties(config);//to load zookeeper quorum, port etc...
connectToKerberizedHBase(config);
}
JAAS 配置文件:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
renewTGT=true
useTicketCache=true;
};
上面提到的文章还谈到了使用我不理解的 keytab 的代表,所以请帮助我了解这是否是为长期运行的作业创建连接的权利?
解决方案
推荐阅读
- php - HTML 评论框电子邮件通知
- java - 内存监控包含 RabbitMQ 侦听器的应用程序的 Java 堆大小使用情况
- javascript - 如何使用 JavaScript (AJAX/jQuery) 判断 PHP $_SESSION cookie 是否存在?
- amazon-web-services - AWS - 码头工人和詹金斯
- unity3d - 检测到多个目标时播放声音。UNITY Vuforia
- c - 关于 C 语言中的指针
- java - 代码中有错误,我不知道如何更正
- c# - .NET Core 3.0 中的 WPF 依赖注入
- python - 如何确定文件所在的路径?
- javascript - Javascript将countDown计时器更改为countUp时间