Cloudera Manager5.15.0 集成Kerberos
Cloudera提供了非常简便的Kerberos集成方式,基本做到了自动化部署。
系统:CentOS 7.2
操作用户:admin
Kerberos安装
以下是官网建议
Packages Required
- openldap-clients on the Cloudera Manager Server host
- krb5-workstation, krb5-libs on ALL hosts
在master 执行以下命令
yum install krb5-workstation -y
yum install krb5-server -y
yum install openldap-clients -y
yum install krb5-libs -y
在slave1和slave2上执行以下命令
yum install krb5-workstation
在安装完上述的软件之后,会在KDC主机上生成配置文件/etc/krb5.conf和/var/kerberos/krb5kdc/kdc.conf,它们分别反映了realm name 以及 domain-to-realm mappings。
修改配置
配置krb5.conf
/etc/krb5.conf: 包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。
请替换DOMAIN.COM为自定义域名:
includedir /etc/krb5.conf.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = for_cdh
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
for_cdh = {
kdc = master:88
admin_server = master:749
}
[domain_realm]
master = for_cdh
说明:
- [logging]:表示server端的日志的打印位置
- [libdefaults]:每种连接的默认配置,需要注意以下几个关键的小配置
- default_realm = EXAMPLE.COM 默认的realm,必须跟要配置的realm的名称一致。
- udp_preference_limit = 1 禁止使用udp可以防止一个Hadoop中的错误
- ticket_lifetime表明凭证生效的时限,一般为24小时。
- renew_lifetime表明凭证最长可以被延期的时限,一般为一个礼拜。当凭证过期之后,
对安全认证的服务的后续访问则会失败。
- [realms]:列举使用的realm。
- kdc:代表要kdc的位置。格式是 机器:端口
- admin_server:代表admin的位置。格式是机器:端口
- default_domain:代表默认的域名
- [appdefaults]:可以设定一些针对特定应用的配置,覆盖默认配置
配置完之后将该配置文件复制到其他所有节点覆盖原配置文件
配置kdc.conf
默认放在 /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
for_cdh = {
master_key_type = aes256-cts
max_renewable_life = 7d 0h 0m 0s
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
default_principal_flags = +renewable, +forwardable
}
说明:
- BOCLOUD.COM:是设定的realms。名字随意。Kerberos可以支持多个realms,会增加复杂度。本文不探讨。大小写敏感,一般为了识别使用全部大写。这个realms跟机器的host没有大关系。
- max_renewable_life = 8d 涉及到是否能进行ticket的renwe必须配置。
- master_key_type:和supported_enctypes默认使用aes256-cts。由于,JAVA使用aes256-cts验证方式需要安装额外的jar包,推荐不使用。
- acl_file:标注了admin的用户权限。文件格式是
Kerberos_principal permissions [target_principal] [restrictions]支持通配符等。 - admin_keytab:KDC进行校验的keytab。后文会提及如何创建。
- supported_enctypes:支持的校验方式。注意把aes256-cts去掉。
配置kadm5.acl
*/admin@for_cdh *
cloudera-scm@for_cdh * flume/*@for_cdh
cloudera-scm@for_cdh * hbase/*@for_cdh
cloudera-scm@for_cdh * hdfs/*@for_cdh
cloudera-scm@for_cdh * hive/*@for_cdh
cloudera-scm@for_cdh * httpfs/*@for_cdh
cloudera-scm@for_cdh * HTTP/*@for_cdh
cloudera-scm@for_cdh * hue/*@for_cdh
cloudera-scm@for_cdh * impala/*@for_cdh
cloudera-scm@for_cdh * mapred/*@for_cdh
cloudera-scm@for_cdh * oozie/*@for_cdh
cloudera-scm@for_cdh * solr/*@for_cdh
cloudera-scm@for_cdh * sqoop/*@for_cdh
cloudera-scm@for_cdh * yarn/*@for_cdh
cloudera-scm@for_cdh * zookeeper/*@for_cdh
创建Kerberos数据库
kdb5_util create -r for_cdh -s
说明:
- [-s] 表示生成 stash file ,并在其中存储master server key(krb5kdc)
- [-r] 来指定一个realm name , 当krb5.conf中定义了多个realm时使用
- 当 Kerberos database创建好之后,在 /var/kerberos/ 中可以看到生成的 principal相关文件
启动Kerberos服务
# 启动服务命令
systemctl start krb5kdc
systemctl start kadmin
# 加入开机启动项
systemctl enable krb5kdc
systemctl enable kadmin
创建Kerberos管理员principal
# 需要设置两次密码
kadmin.local -q "addprinc root/admin"
//使用cloudera-scm/admin作为CM创建其它principals的超级用户
kadmin.local -q "addprinc cloudera-scm/admin"
Cloudera Manager 添加 Kerberos
在此之前,请确保以下前序工作完成:
- KDC已经安装好并且正在运行
-
将KDC配置为允许renewable tickets with non-zerolifetime,我们在之前修改kdc.conf文件的时候已经添加了max_life和max_renewable_life这个2个属性,前者表示服务端允许的Service ticket最大生命周期,后者表示服务端允许的Service ticket更新周期。这2个属性必须分别大于等于客户端对应的配置ticket_lifetime和renew_lifetime。我们假设,不这样进行配置:ticket_lifetime = 8d, max_life = 7d, renew_lifetime = 25h, max_renew_life = 24h,那么可能造成的结果就是当service持有的票据超过24小时没有去更新,在第24.5小时的时候去进行更新,请求会遭到拒绝,报错:Ticket expired while renewing credentials,永远无法进行正常更新。对于Cloudera来说,因为更新机制被透明(Cloudera有renew进程会去定期更新),即使我们手动使用`modprinc -maxrenewlife 1week krbtgt/[email protected] 进行更新,也无济于事。
-
在Cloudera Manager Server上安装openldap-clients
- 为Cloudera Manager创建了超级管理员principal,使其能够有权限在KDC中创建其他的principals,如上面创建的cloudera-scm;
再次确认完毕后进入如下步骤:
1.启用Kerberos
2.确认完成启用Kerberos前的准备
3.KDC信息
要注意的是:这里的 Kerberos Encryption Types 必须跟KDC实际支持的加密类型匹配(即kdc.conf中的值)
4.KDB5信息
5.KDC Account Manager
6.导入KDC Account Manager 凭据
7.Kerberos Principals
8.Set HDFS Port
9.重启服务