Kerberos与各大组件的集成
1. 概述
Kerberos可以与CDH集成,CDH里面可以管理与hdfs、yarn、hbase、yarn、kafka等相关组件的kerberos凭证。但当我们不使用CDH的时候,也需要了解hdfs、yarn、hbase和kafka是如何配置关联kerberos的。
该文是建立在Kerberos基本原理、安装部署及用法博客的前提上的,需要首先了解Kerberos的基本原理、安装用法,才能阅读下文。
集群机器信息为:
ip | hostname |
192.168.1.150 | cdh1 |
192.168.1.151 | cdh2 |
192.168.1.152 | cdh3 |
2. Cloudera Manager添加Kerberos
注:这里的Cloudera Manager版本为5.6。
2.1. 创建Kerberos管理员principal
# 需要设置两次密码 //使用cloudera-scm/admin作为CM创建其它principals的超级用户 kadmin.local -q "addprinc cloudera-scm/admin"
principal的名字的第二部分是admin,是根据Kerberos安装部署文章里面提到的配置acl文件,该principal就拥有administrative privileges,这个账号将会被CDH用来生成其他用户/服务的principal。
注意:需要先kinit保证已经有principal缓存。
[root@master ~]# kinit cloudera-scm/admin Password for cloudera-scm/admin@EXAMPLE.COM: [root@master ~]# klist Ticket cache: KEYRING:persistent:0:0 Default principal: cloudera-scm/admin@EXAMPLE.COM Valid starting Expires Service principal 07/01/2020 11:51:17 07/02/2020 11:51:16 krbtgt/BOCLOUD.COM@EXAMPLE.COM renew until 07/08/2020 11:51:16
2.2. 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 1 week krbtgt/DOMAIN.COM@DOMAIN.COM进行更新,也无济于事。
- 在Clouder Manager Server上安装openldap-clients
- 为Cloudera Manager 创建了超级管理员principal,使其能够有权限在KDC中创建其他的principals,如上面创建的cloudera-scm;
再次确认完毕后进入如下步骤:
2.2.1. 启动Kerberos
2.2.2. 确认完成后启用Kerbero前的准备
2.2.3. KDC信息
要注意的是:这里的Kerberos Encryption Types必须跟KDC实际支持的加密类型匹配(即kdc.conf中的值)
2.2.4.KDB5信息
2.2.5. KDC Account Manager
2.2.6. 导入KDC Account Manager凭据
2.2.7. Kerberos Principals
如下为,CDH为各个组件自动生成的principals:
2.2.8. Set HDFS Port
2.2.9. 重启服务
之后Cloudera Manager会自动重启集群服务,启动之后会提示Kerberos已启用。在Cloudera Manager上启用Kerberos的过程中,会自动做以下的事情:
- 集群中有多少个节点,每个账号就会生成对应个数的principal;
- 为每个对应的principal创建keytab;
- 部署keytab文件到指定的节点中;
- 在每个服务的配置文件中加入有关kerberos的配置;
启用之后访问集群的所有资源都需要使用相应的账号来访问,否则会无法通过Kerberos的authentication。对于HDFS,Yarn,需要开启Web Console的认证,以防未认证用户访问资源界面。
2.2.10. 开启HTTP Web认证
HDFS开启HTTP Web:
Yarn开启HTTP Web
HBase 开启REST认证
2.3. Cloudera Manager禁用Kerberos
2.3.1. 停止整个hadoop集群
在CDH界面停止整个集群
2.3.2. 修改相关组件参数
- Zookeeper:
- 取消勾选enableSecurity和quorum.auth.enableSasl
- HDFS:
-
- hadoop.security.authentication设置为:Simple
- hadoop.security.authorization取消勾选(FALSE)
-
- dfs.datanode.address from 1004(for Kerberos)修改为50010(default)
- dfs.datanode.http.address from 1006(for Kerberos)修改为50075(default)
-
- Data Directory Permissions from 700 修改为755
- HBase:
- hbase.security.authentication设置为:Simple
- hbase.security.authorization取消勾选(FALSE)
- Hue:
- Kerberos Ticket Renewer删除或停止role
2.3.3. 删除相应的ZNode目录
当CDH部署Kerberos后,zookeeper里面的节点目录hbase、kafka、hdfs会带有权限;而当CDH去掉Kerberos后,这些目录仍然有权限,需要先删除再重新创建。
1. 在CDH界面打开zookeeper的配置,搜索java关键字:
2. 添加-Dzookeeper.skipACL=yes配置,关闭zookeeper的权限检查配置项:
3. 重启zookeeper服务
4. 登录zookeeper shell:zkCli.sh -server ip:port
5. 删除HBase znode:rmr /hbase
6. 删除RM znode:rmr /rmstore/ZKRMStateRoot
7. 删除zkfc znode:rmr /hadoop-ha/nameservice-test1
8. 删除kafka znode:rmr /kafka
9. 删除-Dzookeeper.skipACL=yes配置项
10. 重启zookeeper及相应服务
3. Hadoop集成Kerberos
上面2节点是CDH集成hadoop,会自动配置hadoop相关的kerberos配置,如果不依赖CDH的话,我们也需要了解HDFS与Kerberos方面的相关配置。
注:hadoop版本为2.7.3.
3.1. 创建kerberos用户和keytab
在kerberos数据库中增加hadoop、HTTP两个用户。各个hadoop组件都使用这两个用户访问kerberos。
kadmin.local -q "addprinc -randkey hadoop/cdh1@EXAMPLE.COM" kadmin.local -q "addprinc -randkey hadoop/cdh2@EXAMPLE.COM" kadmin.local -q "addprinc -randkey hadoop/cdh3@EXAMPLE.COM" kadmin.local -q "addprinc -randkey hadoop@EXAMPLE.COM" kadmin.local -q "addprinc -randkey HTTP/cdh1@EXAMPLE.COM" kadmin.local -q "addprinc -randkey HTTP/cdh2@EXAMPLE.COM" kadmin.local -q "addprinc -randkey HTTP/cdh3@EXAMPLE.COM"
为hdfs和HTTP两个用户创建keytab,这里HTTP只能大写,不能小写:
cd /opt/hadoop/etc/ kadmin.local -q "xst -k hadoop.keytab hadoop/cdh1@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab hadoop/cdh2@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab hadoop/cdh3@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab hadoop@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab HTTP/cdh1@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab HTTP/cdh2@EXAMPLE.COM" kadmin.local -q "xst -k hadoop.keytab HTTP/cdh3@EXAMPLE.COM"
测试keytab是否可用:
kinit -kt /opt/hadoop/etc/hadoop.keytab hadoop/cdh1
klist
3.2. 各个节点安装jce
在hadoop集群所有节点安装jce,下载地址为:
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
解压jce_policy-8.zip,把解压后文件夹里面的jar包copy到$JAVA_HOME/jre/lib/security目录下。
不安装的话后面启动会有下面异常:
3.3. 为HADOOP添加Kerberos配置认证
core-site.xml添加的配置内容为:
<property> <name>hadoop.security.authorization</name> <value>true</value> </property> <property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property>
hdfs-site.xml添加的配置内容为:
<!--NameNode Kerberos Config--> <property> <name>dfs.block.access.token.enable</name> <value>true</value> </property> <property> <name>dfs.namenode.kerberos.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>dfs.namenode.keytab.file</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <property> <name>dfs.namenode.kerberos.internal.spnego.principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <!-- DataNode Kerberos Config --> <property> <name>dfs.datanode.kerberos.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>dfs.datanode.keytab.file</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <!-- 配置WebHDFS安全 --> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.web.authentication.kerberos.principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <property> <name>dfs.web.authentication.kerberos.keytab</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property>
hadoop为HA模式,则需要添加journalnode相关的kerberos配置:
<!-- Journalnode Kerberos Config -->
<property>
<name>dfs.journalnode.kerberos.principal</name>
<value>hadoop/_HOST@EXAMPLE.COM</value>
</property>
<property>
<name>dfs.journalnode.keytab.file</name>
<value>/opt/hadoop/etc/hadoop.keytab</value>
</property>
<property>
<name>dfs.journalnode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@EXAMPLE.COM</value>
</property>
hadoop为非HA模式,且带有secondarynamenode,则配置相关kerberos:
<!-- Secondnode Kerberos Config -->
<property>
<name>dfs.secondary.namenode.kerberos.principal</name>
<value>hadoop/_HOST@HADOOP.COM</value>
</property>
<property>
<name>dfs.secondary.namenode.keytab.file</name>
<value>/home/redpeak/hadoop.keytab</value>
</property>
<property>
<name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
<value>HTTP/_HOST@HADOOP.COM</value>
</property>
Yarn支持两种容器实现方式,一种是yarn容器,一种是Linux容器,Linux容器比较Yarn容器具有更好的扩展性和隔离性。本文将讲述Linux容器的配置。yarn-site.xml添加的配置内容为:
<!--配置resourcemanager kerberos config--> <property> <name>yarn.resourcemanager.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>yarn.resourcemanager.keytab</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <!--配置nodemanager kerberos config--> <property> <name>yarn.nodemanager.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>yarn.nodemanager.keytab</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <property> <name>yarn.resourcemanager.webapp.spnego-principal</name> <value>HTTP/_HOST@EXAMPLE.COM</value> </property> <property> <name>yarn.nodemanager.container-executor.class</name> <value>org.apache.hadoop.yarn.server.nodemanager.LinuxContainerExecutor</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.group</name> <value>hadoop</value> </property> <property> <name>yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-users</name> <value>false</value> <description>Whether all applications should be run as the NodeManager process' owner.When false, applications are launched instead
as the application owner</description> </property>
注:分别设置容器类为LinuxContainerExecutor;允许使用的用户组为:hadoop;第三个为可选项,配置是否限制NodeManager用户作为应用用户。
container-executor.cfg修改配置内容:
#configured value of yarn.nodemanager.linux-container-executor.group 确保容器运行组是hadoop
yarn.nodemanager.linux-container-executor.group=hadoop
#comma separated list of users who can not run applications 禁用用户
banned.users=hdfs,yarn,mapred,bin
#Prevent other super-users 禁用其他系统用户
min.user.id=1000
##comma separated list of system users who CAN run applications 谁可以运行该应用
allowed.system.users=root,hadoop
feature.tc.enabled=false
# 创建两个目录
yarn.nodemanager.local-dirs=$HADOOP_HOME/logs/yarn/local
yarn.nodemanager.log-dirs=$HADOOP_HOME/logs/yarn/log
HADOOP_HOME/etc/hadoop/container-executor.cfg配置文件的权限,和他上层目录的user(所属者)必须是root。这个container-executor.cfg配置文件的所有上层目录都变成root,就是说/opt,/opt/app,/opt/app/hadoop3.1.4,etc,hadoop这几个目录都要变成root:root。如:
chown root:root /opt/app/ chown root:root /opt/app/hadoop-3.1.4/ chown root:root /opt/app/hadoop-3.1.4/etc chown root:root /opt/app/hadoop-3.1.4/etc/hadoop chown root:root /opt/app/hadoop-3.1.4/etc/hadoop/container-executor.cfg
另外还需要修改HADOOP_HOME/bin下面的container-executor的权限,root:hadoop的hadoop是上面配置的“yarn.nodemanager.linux-container-executor.group=hadoop”
chown root:hadoop /opt/app/hadoop-3.1.4/bin/container-executor chmod 6050 /opt/app/hadoop-3.1.4/bin/container-executor
mapred-site.xml添加的配置内容为:
<property> <name>mapreduce.jobhistory.keytab</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <property> <name>mapreduce.jobhistory.principal</name> <value>hdfs/_HOST@EXAMPLE.COM</value> </property>
当开启Kerberos认证时,core-site.xml还需要添加各个组件的代理用户,不然所有用户都没权限访问,配置内容为:
<!--hadoop user--> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> <!--root user--> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <!--HTTP user--> <property> <name>hadoop.proxyuser.HTTP.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.HTTP.groups</name> <value>*</value> </property>
3.4. datanode的配置方式
因为DataNode数据传输协议不使用Hadoop RPC框架,DataNode必须使用由dfs.datanode.address和dfs.datanode.http.address指定的特权端口进行身份验证。此身份验证基于以下假设:攻击者将无法在DataNode主机上获得root权限。
以root用户身份执行hdfs datanode命令时,服务器进程首先绑定特权端口,然后删除特权并以HADOOP_SECURE_DN_USER指定的用户账号运行。此启动过程使用安装到JSVC_HOME的jsvc程序。你必须在启动时(在hadoop-env.sh中)指定HADOOP_SECURE_DN_USER和JSVC_HOME作为环境变量。
从版本2.6.0起,SASL可用于验证数据传输协议。在此配置中,安全集群不再需要使用jsvc以root身份启动DataNode并绑定到特权端口。要启用SASL数据传输协议,请在hdfs-site.xml中设置dfs.data.transfer.protection,为dfs.datanode.address设置非特权端口,将dfs.http.policy设置为HTTPS_ONLY,并确保HADOOP_SECURE_DN_USER环境变量未定义。请注意,如果dfs.datanode.address设置为特权端口,则不能在数据传输协议上使用SASL。出于向后兼容性的原因,这是必需的。
datanode启动有两种方式,一:在2.6版本之前,可以使用配置jsvc方式启动datanode,二:在2.6版本之后,新增可以使用配置sasl方式启动datanode。这里我主要使用sasl方式。
3.4.1. 配置sasl方式启动datanode
sasl方式需要设置dfs.http.policy为HTTPS_ONLY。https要求集群中有一个CA,它会生成ca_key和ca_cert,想要加入这个集群的节点,需要拿到这2个文件,然后经过一连串的动作生成keystore,并在hadoop的ssl-server.xml和ssl-client.xml中指定这个keystore的路径和密码,这样各个节点间就可以使用https进行通信了。
3.4.1.1 CA服务器的证书和密码
在cdh1节点上创建目录
mkdir -p /home/hadoop/CA/private openssl req -new -x509 -keyout /home/hadoop/CA/private/hadoop_ca_key -out /home/hadoop/CA/private/hadoop_ca_cert -days 9999 -subj '/C=CN/ST=guangdong/L=shenzhen/O=hongshan/OU=security/CN=hadoop.com'
输入hadoop_ca_key的密码:hadoop
-new:表示生成一个新的证书签署请求; -x509:专用于生成CA自签证书; -keyout 指定生成密匙文件路径 -out :指定生成的证书的保存路径; -days:指定证书的有效期限,单位为day,默认是365天; -subj :证书的描述,也可以不写,生成证书的时候填写 C => Country ST => stateOrProvinceName L => Locality (eg, city) O => Organization OU => Organizational Unit CN => Common Name
通过 ll 在/home/hadoop/CA/private目录查看生成的密码和证书
scp到hadoop集群的每个节点
scp -r CA hadoop@cdh2:/home/hadoop/ scp -r CA hadoop@cdh3:/home/hadoop/
3.4.1.2 在hadoop集群的各个节点上执行
每个节点只需修改CN的hostname,在每个节点把下面所有命令全部执行。注意下面输入的keystore和trustkeystore的密码,后面配置ssl-client.xml、ssl-server.xml会用上。注意这里的keystore和trustkeystore的密码可以保持一致,方便记忆,这里默认密码为hadoop,这里包括上面步骤的hadoop_ca_key的密码也是一致。
进入到/home/hadoop/CA/private目录。
a) 生成密钥和证书,创建keystore密码和key passwd:hadoop
keytool -keystore keystore -alias localhost -validity 9999 -genkey -keyalg RSA -keysize 2048 -dname "CN=cdh1, OU=test, O=test, L=shenzhen, ST=guangdong, C=cn";
b) 创建trustkeystore密码:hadoop
keytool -keystore truststore -alias CARoot -import -file hadoop_ca_cert;
c) 执行下面的命令,
keytool -certreq -alias localhost -keystore keystore -file cert;
d) 输入hadoop_ca_key的密码:hadoop
openssl x509 -req -CA hadoop_ca_cert -CAkey hadoop_ca_key -in cert -out cert_signed -days 9999 -CAcreateserial
e) 输入keystore密码:hadoop
keytool -keystore keystore -alias CARoot -import -file hadoop_ca_cert
f) 再次输入keystore密码:hadoop
keytool -keystore keystore -alias localhost -import -file cert_signed
g) 查看生成文件,并检查客户端证书
ll /home/hadoop/CA/private
keytool -list -v -keystore keystore -storepass hadoop
3.4.1.3 修改hdfs-site.xml
https模式默认的web端口不是50070,这里配置成一样的。
<property> <name>dfs.datanode.address</name> <value>0.0.0.0:61004</value> </property> <property> <name>dfs.datanode.http.address</name> <value>0.0.0.0:61006</value> </property> <property> <name>dfs.http.policy</name> <value>HTTPS_ONLY</value> </property> <property> <name>dfs.data.transfer.protection</name> <value>integrity</value> </property> <property> <name>dfs.namenode.https-address</name> <value>bridge1:50070</value> </property>
注:这里的dfs.datanode.address和dfs.datanode.http.address配置成非特权端口,分别为61004和61006,均大于1024端口。
如果hadoop集群为非HA模式,带有secondarynamenode,还需要配置
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>bridge1:50072</value>
</property>
3.4.1.4 修改ssl-client.xml
ssl-client.xml主要修改为上面生成的keystore和truststore的路径,填写keystore密码,key passwd,truststore密码
<configuration> <property> <name>ssl.client.truststore.location</name> <value>/home/hadoop/CA/private/truststore</value> <description>Truststore to be used by clients like distcp. Must be specified. </description> </property> <property> <name>ssl.client.truststore.password</name> <value>hadoop</value> <description>Optional. Default value is "". </description> </property> <property> <name>ssl.client.truststore.type</name> <value>jks</value> <description>Optional. The keystore file format, default value is "jks". </description> </property> <property> <name>ssl.client.truststore.reload.interval</name> <value>10000</value> <description>Truststore reload check interval, in milliseconds. Default value is 10000 (10 seconds). </description> </property> <property> <name>ssl.client.keystore.location</name> <value>/home/hadoop/CA/private/keystore</value> <description>Keystore to be used by clients like distcp. Must be specified. </description> </property> <property> <name>ssl.client.keystore.password</name> <value>hadoop</value> <description>Optional. Default value is "". </description> </property> <property> <name>ssl.client.keystore.keypassword</name> <value>hadoop</value> <description>Optional. Default value is "". </description> </property> <property> <name>ssl.client.keystore.type</name> <value>jks</value> <description>Optional. The keystore file format, default value is "jks". </description> </property> </configuration>
3.4.1.4 修改ssl-server.xml
<configuration> <property> <name>ssl.server.truststore.location</name> <value>/home/hadoop/CA/private/truststore</value> <description>Truststore to be used by NN and DN. Must be specified. </description> </property> <property> <name>ssl.server.truststore.password</name> <value>hadoop</value> <description>Optional. Default value is "". </description> </property> <property> <name>ssl.server.truststore.type</name> <value>jks</value> <description>Optional. The keystore file format, default value is "jks". </description> </property> <property> <name>ssl.server.truststore.reload.interval</name> <value>10000</value> <description>Truststore reload check interval, in milliseconds. Default value is 10000 (10 seconds). </description> </property> <property> <name>ssl.server.keystore.location</name> <value>/home/hadoop/CA/private/keystore</value> <description>Keystore to be used by NN and DN. Must be specified. </description> </property> <property> <name>ssl.server.keystore.password</name> <value>hadoop</value> <description>Must be specified. </description> </property> <property> <name>ssl.server.keystore.keypassword</name> <value>hadoop</value> <description>Must be specified. </description> </property> <property> <name>ssl.server.keystore.type</name> <value>jks</value> <description>Optional. The keystore file format, default value is "jks". </description> </property> <property> <name>ssl.server.exclude.cipher.list</name> <value>TLS_ECDHE_RSA_WITH_RC4_128_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_WITH_RC4_128_MD5</value> <description>Optional. The weak security cipher suites that you want excluded from SSL communication.</description> </property> </configuration>
3.4.1.5 重启hadoop
# 启动namenode的两种方式 hadoop-daemon.sh start namenode hdfs --daemon start namenode # 非HA模式,带有secondarynamenode,启动secondarynamenode的两种方式 hadoop-daemon.sh start secondarynamenode hdfs --daemon start secondarynamenode # 启动datanode start-secure-dns.sh
3.5. 测试
- 首先,使用hadoop用户kinit进行kerberos登录
kinit -kt /opt/hadoop/etc/hadoop.keytab hadoop@EXAMPLE.COM
klist
- 然后,使用hadoop fs -ls /命令或者yarn application -list命令等
hadoop fs -ls / yarn application -list
4. Hive集成Kerberos
4.1. 为HIVE添加认证
hive-site.xml添加的配置内容为:
<property> <name>hive.server2.authentication</name> <value>KERBEROS</value> </property> <property> <name>hive.server2.authentication.kerberos.principal</name> <value>hadoop/_HOST@CHEYO.NET</value> </property> <property> <name>hive.server2.authentication.kerberos.keytab</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <property> <name>hive.metastore.kerberos.principal</name> <value>hadoop/_HOST@CHEYO.NET</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>/opt/hadoop/etc/hadoop.keytab</value> <description>The path to the Kerberos Keytab file containing the metastore thrift server's service principal.</description> </property>
core-site.xml还需要添加hive组件的代理用户,配置内容为:
<!-- hive user --> <property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.groups</name> <value>*</value> </property>
4.2. HIVE的beeline连接
启动hiveserver2后,使用beeline客户端连接
- 首先,使用hadoop用户kinit进行kerberos登录
kinit -kt /opt/hadoop/etc/hadoop.keytab hadoop@EXAMPLE.COM
klist
- 然后,beeline使用如下方式连接,注意:-u 后面的参数需加双引号,hadoop/cdh1为hiveserver2所在的节点
beeline -u "jdbc:hive2://cdh1:10000/default;principal=hadoop/cdh1@EXAMPLE.COM"
或者
beeline > !connect jdbc:hive2://cdh1:10000/default;principal=hadoop/cdh1@EXAMPLE.COM 用户名密码不输入,直接回车
5. HBase集成Kerberos
5.1. 为HBase添加认证
hbase-site.xml添加的配置内容为:
<property> <name>hbase.security.authentication</name> <value>kerberos</value> </property> <!--master--> <property> <name>hbase.master.kerberos.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>hbase.master.keytab.file</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <!--regionserver--> <property> <name>hbase.regionserver.kerberos.principal</name> <value>hadoop/_HOST@EXAMPLE.COM</value> </property> <property> <name>hbase.regionserver.keytab.file</name> <value>/opt/hadoop/etc/hadoop.keytab</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.hadoop.hbase.security.access.AccessController</value> </property> <property> <name>hbase.coprocessor.region.classes</name> <value>org.apache.hadoop.hbase.security.token.TokenProvider, org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint, org.apache.hadoop.hbase.security.access.AccessController</value> </property>
core-site.xml还需要添加hbase组件的代理用户hadoop,配置内容为:
<!--hadoop user--> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property>
【参考资料】
https://blog.csdn.net/u011026329/article/details/79167884 Cloudera Manager5.11.1 集成Kerberos
https://www.jianshu.com/p/dd7b04b49c18 CDH禁用Kerberos
http://blog.cheyo.net/222.html Hadoop配置Kerberos认证(2.7.1)
https://www.cnblogs.com/yjt1993/p/11769515.html hdfs、yarn集成kerberos