Kafka 认证三:Kerberos 认证中心部署
Posted 毕小宝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka 认证三:Kerberos 认证中心部署相关的知识,希望对你有一定的参考价值。
背景
Kafka 支持 Kerberos的前提是部署 Kerberos 服务端,然后在 Kafka 所在的主机安装 Kerberos 客户端。
Kerberos 是神话中具有三个头的保卫神犬,在没有部署 Kerberos 认证中心之前,曾看来两天这个协议的理论,但是很快就忘记了。
本周为了测试 Kafka 的 Kerberos 认证,玩了一下 Kerberos 认证中心的部署,看着 kdc 的日志文件,操作几遍 kadmin.local
命令后,突然就理解了 Kerberos 认证流程了。
Kerberos 服务端部署
第一步,安装 KDC 所需的软件 krb5-server 和 krb5-workstation 。
yum install krb5-libs krb5-server krb5-workstation
第二步,修改 Kerberos 配置文件 /etc/krb5.conf 。Kerberos 官方文档第一章就告诉我们需要先确定好我们的 Kerberos 服务需要配置的东西:
服务 Realm、服务 Realm 对应的主机名、KDC 和 kadmin 服务域名。
添加一个我们测试的 Realm 名称为 MY_KDC.COM
:
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt
default_realm = MY_KDC.COM
# default_ccache_name = KEYRING:persistent:%uid
[realms]
MY_KDC.COM =
kdc = oracle
admin_server = oracle
[domain_realm]
.oracle = MY_KDC.COM
oracle = MY_KDC.COM
关键配置:
default_ccache_name
这一项注释掉,不明原因。default_realm
设置默认的 Realm,多 Realm 时不知道怎么配置。realms
配置,kdc 和 admin_server 后面的值是/etc/hosts
中的目标主机 IP 的主机名称。domain_realm
是固定语法,即请求目标主机 oracle 的 Realm 值,这个配置令人费解,这里指定主机对应的 Realm,而前面又是 Realm 对应的主机。难道不会出现死循环吗?
第三步,设置本机主机名 oracle 。 因为 Krb5.conf 中 Realm 中的 kdc 和 admin_server 的值是一个域名,这里设置为当前 Kerberos 服务器主机的域名。
第四步,修改 kdc 配置文件 /var/kerveros/krb5kdc/kdc.conf
文件 ,其中的 Realm 与上一步 krb5.conf 一致。
第五步,为我们的 Realm 创建 Kerberos 数据库。
kdb5_util create -r MY_KDC.COM -s
第五步,创建管理员并设置密码。
kadmin.local -q "addprinc admin/admin"
第六步,给数据库管理员添加ACL权限。 *
代表全部权限。
vi /var/kerberos/krb5kdc/kadm5.acl
添加我们的 Realm 的权限:* /admin@MY_KDC.COM *
到这里,Kerberos 服务端就部署完成了。
添加开机服务
Kerberos 服务端包含两个服务 krb5kdc
和 kadmin
,服务端必须启动这两个服务。
systemctl enable kadmin
systemctl enable krb5kdc
systemctl start kadmin
systemctl start krb5kdc
启动成功后,可以用管理员帐号登录:
Kerberos 客户端安装
客户端安装 yum install krb5-libs krb5-workstation
,这是客户端的软件,然后 krb5.conf 文件从 Kerberos 服务端拷贝一份即可。
我们在 Kafka 服务器上安装 Kerberos 客户端,就可以为 Kafka 添加 Kerberos 认证了。
KDC 数据库操作命令
(一)基础操作,数据库初始化命令:/usr/sbin/kdb5_util create -s
。
(二)数据库创建后,使用本地登录 kadmin.local
后,可以执行下列操作:
- 注册帐号:
addprinc username/hostname
- 修改帐号:
modprinc -maxrenewlife 90day username/hostname@Realm
,时间参数 90 day 可按需调整。 - 删除帐号:
delprinc username/hostname@Realm
。 - 查看帐号列表:
list_principals
。
(三)命令行方式,生成 keytab 文件:kadmin.local -q "xst -norandkey -k /root/kafka-client.keytab username/host@Realm"
感觉这几个命令就够用了,部署 Kafka Kerberos 认证时,就用了增、删、查、导出 keytab 文件这几个命令。
遗留问题
网上没找到多 Realm 实践的案例,就我自己测试的来看,在 Kerberos 客户端配置多个 realms 后,默认只会走 deault_realm 这一个 Realm ,认证流程错乱了。
理论上 Kerberos 肯定是支持多 Realm 的,我们的需求是一个主机需要连接不同的 Kafka 集群,它们可能归属不同的 KDC 认证中心。
参考文献
- 《由浅入深理解Kerberos协议》
- 《Kerberos 部署参考》 (虽然页面有劫持广告,但是流程还是很完整的。)
- 《Kerberos 部署准备工作》
- 《Kerberos 协议官方文档》
- 《Krb5.conf 官方配置说明》
以上是关于Kafka 认证三:Kerberos 认证中心部署的主要内容,如果未能解决你的问题,请参考以下文章