我正在编写一个java程序来访问kerberized集群上的seured hbase。我的理解是我可以用两种方式来做:
使用主体名称和密码登录以在缓存中创建tgt并使用它访问hbase。
使用keytab文件访问hbase。
在我决定应该采取哪种方法之前,我想了解这两种方法的利弊。我在google上找到了这篇文章,解释了这两个选项是如何工作的。这篇文章还指出,可以通过调用 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,我不理解,所以请帮助我理解这是否是为长时间运行的作业创建连接的正确方法?
暂无答案!
目前还没有任何答案,快来回答吧!