配置信息初始化
功能简介
安全认证配置信息初始化是安全认证的前置条件,由各个组件在自身应用开发工程中添加,用于定义安全认证的用户名、认证凭据文件(keytab文件和krb5配置文件),并触发安全认证。
背景信息
安全认证实际为Kerberos用户认证,认证需要的配置信息:用户名、用户密码或keytab文件,以及krb5配置文件等。认证凭据文件需要与组件业务配置文件保存在相同目录。
代码样例
代码在不同开发工程中可能会根据组件实际情况进行更改,但原理与流程是不变的。
配置信息初始化:
private static void init() throws IOException{
// Default load from conf directory
CONF = new Configuration();
String userdir = System.getProperty("user.dir") + File.separator
+ "conf" + File.separator;
CONF.addResource(new Path(userdir + "core-site.xml"));
CONF.addResource(new Path(userdir + "hdfs-site.xml"));
CONF.addResource(new Path(userdir + "hbase-site.xml"));
CONF.addResource(new Path(userdir + "hdfs-site.xml"));
USER_NAME = "tester1";
USER_KEYTAB_FILE = userdir + "user.keytab";
KRB5_FILE = userdir + "krb5.conf";
/*
* if need to connect zk, please provide jaas info about zk.
* of course, you can do it as below:
* System.setProperty("java.security.auth.login.config", confDirPath + "jaas.conf");
* but the demo can help you more :
* Note: if this process will connect more than one zk cluster, the demo may be not proper. you can contact us for more help
*/
LoginUtil.setJaasConf(ZOOKEEPER_DEFAULT_LOGIN_CONTEXT_NAME, USER_NAME, USER_KEYTAB_FILE);
LoginUtil.setZookeeperServerPrincipal(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL);
}
解释:
- 初始化一个Configuration对象,并在该对象中定义应用开发工程所需要的配置文件。此对象为应用开发中的关键对象,其包含核心配置信息,同时用于安全认证以及组件业务执行。华为大数据支持多种方法创建Configuration对象,样例工程中提供了封装的、简易通用的方法。
- 用户名、keytab文件和krb5配置文件是Kerberos认证的关键信息。在仅进程、代码交互的场景中,认证用户应使用“机机” 用户,可自动认证。如果使用“人机”用户,则存在手动输入用户密码的问题。
- 若应用程序需要访问其他组件,例如ZooKeeper,Configuration对象中还需要初始化ZooKeeper的关键配置信息,此时需要修改“Jaas.conf”配置文件并加载此配置。为了提高认证接口的易用性,在配置信息初始化时将自动根据用户名和keytab信息生成“Jaas.conf”配置文件。
说明:
- 在同一个应用程序中,如果需要访问多个集群或者多个集群中不同的组件,需规划不同的安全认证信息与组件业务配置信息,该场景不在样例中涉及,请联系华为技术工程师。
- 本样例工程适用于Oracle JAVA 平台和IBM JAVA 平台。