更新时间:2024-10-23 GMT+08:00

使用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,选择“系统 > 权限 > 域和互信”,查看“本端域”参数,即为当前系统域名。