文章目录
1.kerberos概念介绍
principal:认证的主体,如kafka/stream.dt.local@EXAMPLE.COM
,其中kafka
是主体的用户名,stream.dt.local
表示一个组,EXAMPLE.COM
表示一个命名空间;
realm: realm有点像编程语言中的namespace。在编程语言中,变量名只有在某个"namespace"里才有意义。同样的,一个principal只有在某个realm下才有意义;kafka配置kerberos(SASL)认证时,realm必须为当前kafka broker所在机器的hostname,如kafka/stream.dt.local@EXAMPLE.COM
;大家都约定成俗用大写来命名realm, 比如"EXAMPLE.COM";
password:某个用户的密码,即kerberos中的master_key。password可以存在一个keytab文件中。所以kerberos中需要使用密码的场景都可以用一个keytab作为输入;
2. kerberos认证过程
step1:用户通过kinit
命令登录KDC(key distribution center),其中的AS认证服务器到本地数据库中查询用户发送过来的principal是否存在,如果存在,则返回TGT给用户
Step2:kafka客户端无法直接连通开启kerberos认证的kafka broker,需要将缓存在用户端的TGT发送给KDC,其中的TGS票据授权服务器会验证TGT是否对应数据库中某个principal,如果验证通过,则返回server ticket给kafka客户端