使用Sasl Kerberos认证
操作场景
在安全集群环境下,各个组件之间不能够简单地相互通信,而需要在通信之前进行相互认证,以确保通信的安全性。Kafka应用开发需要进行Kafka、ZooKeeper、Kerberos的安全认证,这些安全认证只需要生成一个jaas文件并设置相关环境变量即可。LoginUtil相关接口可以完成这些配置。
代码样例
此代码片段在com.huawei.bigdata.kafka.example.security包的LoginUtil类中。
/**
* 用户自己申请的机机账号keytab文件名称
*/
private static final String USER_KEYTAB_FILE = "用户自己申请的机机账号keytab文件名称,例如user.keytab";
/**
* 用户自己申请的机机账号名称
*/
private static final String USER_PRINCIPAL = "用户自己申请的机机账号名称";
public static void securityPrepare() throws IOException
{
String filePath = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator;
String krbFile = filePath + "krb5.conf";
String userKeyTableFile = filePath + USER_KEYTAB_FILE;
//windows路径下分隔符替换
userKeyTableFile = userKeyTableFile.replace("\\", "\\\\");
krbFile = krbFile.replace("\\", "\\\\");
LoginUtil.setKrb5Config(krbFile);
LoginUtil.setZookeeperServerPrincipal("zookeeper/hadoop.<系统域名>");
LoginUtil.setJaasFile(USER_PRINCIPAL, userKeyTableFile);
}
用户可登录FusionInsight Manager,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。