首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于 IBM BigInsights 的 Hadoop Kerberos 实践-2

基于 IBM BigInsights 的 Hadoop Kerberos 实践-2

图 4. Kerberos                    配置向导需要提供有关在配置页面中的KDC和管理帐户信息。这里就是 Kerberos 配置文件 krb5.conf 里面的KDC 和 ADMIN_SERVER                的服务器信息,以及用 kadmin 工具添加管理员的账号信息。
图 5. KDC 和 Kadmin                    的信息Ambari 除了配置 Hadoop 基本组件,如 HDFS、、MapReduce2、YARN、Hive、HBase 以外,还配置 IBM                BigInsights 的增值组件,如 Big SQL、Text Analytics 等。一般使用缺省参数即可。
Hadoop 组件服务不是通过前面使用过的 kinit 工具显式地标识 Principal 进行验证,而是通过 keytab 密钥表文件,keytab                是包括一个或多个 Principal 和加密密钥的文件。keytab 适合 Hadoop 的组件服务这种非交互式的 Principal。
图 6. 配置 Hadoop                    组件的身份整个集群服务停止后,就开始进行 Kerberos 配置了。包括创建 Hadoop 组件服务的 Principal,生成和分发 keytab                密钥表文件,Hadoop 集群参数的修改等。
图 7. Kerberos                    整个集群配置结束后,Ambari 会重启整个集群并验证 Kerberos 启用后的集群状况。也可以手动重新启动                HDFS,MapReduce2,YARN,等启动成功后,然后重新启动其他服务。
使用 Kerberos 的 BigInsights 集群Kerberos 启用过程会修改Hadoop 组件的相关参数,以 BigSQL 组件为例,在 Ambari 的管理界面上可以看到                security.authentication.kerberos.enabled,security.authentication.kerberos.keytab_file                和 security.authentication.kerberos.principal 这几个参数已经被自动更改。
图 8. BigSQL 的                    Kerberos 参数Kerberos 启用过程会创建和分发 keytab 密钥表文件,缺省目录是 /etc/security/keytabs,这里可以看到 Hadoop                各服务的 keytab 文件。
清单 6. keytab                密钥表文件
1
2
3
4
5
6
7
8
[root@bi01 ~]$ ls /etc/security/keytabs
bigr.service.keytab    jhs.service.keytab         spark.headless.keytab
bigsql.service.keytab  nfs.service.keytab         spnego.service.keytab
dn.service.keytab      nm.service.keytab          tauser.service.keytab
hbase.headless.keytab  nn.service.keytab          yarn.service.keytab
hbase.service.keytab   oozie.service.keytab       zk.service.keytab
hdfs.headless.keytab   rm.service.keytab
hive.service.keytab    smokeuser.headless.keytab




Hadoop 集群中用户通过了 Kerberos 认证,便可访问 Hadoop 集群的资源。以 HDFS 服务为例,用户通过 Kerberos                认证访问访问 HDFS 服务的过程如下:
  • 用户请求 KDC 服务器的票证授予服务 TGS 的 HDFS 服务认证,并提交用户的票证 TGT。
  • 在 TGS 验证用户的票证 TGT,提供 HDFS 服务票证,用 HDFS 服务的密钥进行加密。
  • 用户提交 HDFS 服务票证到 NameNode,并通过HDFS 服务的密钥进行解密后验证。
IBM BigInsights 缺省的 HDFS 用户是 hdfs,在 IBM BigInsights 启用 Kerberos 服务的时候已经给用户                hdfs 生成了 principal 和 keytab。用户 hdfs 使用                /etc/security/keytabs/hdfs.headless.keytab 从而获得 TGT 而不需要输入密码。下面用用户 hdfs                可以通过 Kerberos 认证直接访问 HDFS 服务。
清单 7. 通过 Kerberos                    认证的用户正常访问                HDFS
1
2
3
4
5
6
7
8
9
10
11
12
[root@bi01 ~]# su - hdfs
[hdfs@bi01 ~]$ hadoop fs -ls /
Found 9 items
drwxrwxrwx   - yarn   hadoop          0 2016-06-18 00:26 /app-logs
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 18:03 /apps
drwxrwxr-x   - hdfs   hdfs            0 2015-12-03 12:36 /biginsights
drwxr-xr-x   - hdfs   hdfs            0 2015-12-03 22:56 /ibmpacks
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /iop
drwxr-xr-x   - mapred hdfs            0 2015-09-29 17:40 /mapred
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /mr-history
drwxrwxrwx   - hdfs   hdfs            0 2016-07-01 17:18 /tmp
drwxr-xr-x   - hdfs   hdfs            0 2016-06-17 23:49 /user




IBM BigInsights 新建用户 dev 虽然属于 hadoop 组,但是没有 principal 和 keytab,访问 HDFS 会收到                Kerberos 认证错误,无法访问 HDFS 服务。
清单 8. 没有通过 Kerberos                    认证的用户无法访问                HDFS
1
2
3
4
5
6
[root@bi01 ~]# su - dev
[dev@bi01 ~]$ hadoop fs -ls /
16/07/01 18:42:07 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "bi01.ibm.com"; destination host is: "bi01.ibm.com":8020;
[dev@bi01 ~]$ klist
klist: No credentials cache found (ticket cache FILE:/tmp/krb5cc_5001)




用户 dev 属于 hadoop 组,可以只读访问用户 hdfs 的 keytab 文件,因此可以使用 kinit 通过指定位置的密钥表文件和相应的                principal 获得 Kerberos 认证。用户 dev 获得认证后就可以成功访问 HDFS 服务了。
因此 keytab文件需要确保文件的权限,以保证只有预期的用户可以只读访问。在 /etc/security/keytabs/                目录下的文件大多数都设置为400权限。hdfs.headless.keytab 缺省是 440 权限,如果改成 400,则用户 dev                则无法用读取用户 hdfs 的 keytab 文件来获得 Kerberos 认证了,只能通过 Kerberos 管理员添加用户 dev 的                principal 和 keytab 文件,并分发到需要的 Hadoop 集群节点上去。
清单 9. 获得 Kerberos 认证后成功访问                    HDFS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[dev@bi01 ~]$ kinit -kt /etc/security/keytabs/hdfs.headless.keytab <a href="mailto:hdfs@IBM.COM"><code>hdfs@IBM.COM</code></a>
[dev@bi01~]$ klist
Ticket cache: FILE:/tmp/krb5cc_5001
Default principal: hdfs@IBM.COM

Valid starting     Expires            Service principal
07/01/16 18:52:42  07/02/16 18:52:42  krbtgt/IBM.COM@IBM.COM
    renew until 07/01/16 18:52:42
[dev@bi01~]$ hadoop fs -ls /
Found 9 items
drwxrwxrwx   - yarn   hadoop          0 2016-06-18 00:26 /app-logs
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 18:03 /apps
drwxrwxr-x   - hdfs   hdfs            0 2015-12-03 12:36 /biginsights
drwxr-xr-x   - hdfs   hdfs            0 2015-12-03 22:56 /ibmpacks
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /iop
drwxr-xr-x   - mapred hdfs            0 2015-09-29 17:40 /mapred
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /mr-history
drwxrwxrwx   - hdfs   hdfs            0 2016-07-01 17:18 /tmp
drwxr-xr-x   - hdfs   hdfs            0 2016-06-17 23:49 /user




正如前面在配置 Kerberos 服务器可以通过参数来控制认证的有效期,如果超过有效期,则也会出现认证失败的情况,这时候通过 kinit -r                的命令进行续签。比如用户 hdfs 的超过 Kerberos 认证有效期,增加 2                天的续签时间后才能正常访问服务。为了避免这个问题,可以根据需要延长 Kerberos 服务器设置的认证有效期和续签时间。
清单 10. Kerberos                    认证过期后的续签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@bi01 ~]# su - hdfs
[hdfs@bi01 ~]$ ls
[hdfs@bi01 ~]$ hadoop fs -ls /
16/07/04 16:57:52 WARN ipc.Client: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]
ls: Failed on local exception: java.io.IOException: javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)]; Host Details : local host is: "bi01.ibm.com"; destination host is: "bi01.ibm.com":8020;
[hdfs@bi01 ~]$ kinit -r 2d -k -t /etc/security/keytabs/hdfs.headless.keytab <a href="mailto:hdfs@IBM.COM"><code>hdfs@IBM.COM</code></a>
[hdfs@bi01 ~]$ hadoop fs -ls /
Found 9 items
drwxrwxrwx   - yarn   hadoop          0 2016-06-18 00:26 /app-logs
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 18:03 /apps
drwxrwxr-x   - hdfs   hdfs            0 2015-12-03 12:36 /biginsights
drwxr-xr-x   - hdfs   hdfs            0 2015-12-03 22:56 /ibmpacks
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /iop
drwxr-xr-x   - mapred hdfs            0 2015-09-29 17:40 /mapred
drwxr-xr-x   - hdfs   hdfs            0 2015-09-29 17:40 /mr-history
drwxrwxrwx   - hdfs   hdfs            0 2016-07-01 17:18 /tmp
drwxr-xr-x   - hdfs   hdfs            0 2016-06-17 23:49 /user




总结Hadoop 支持的两种认证机制:简单和 Kerberos。默认的简单认证机制使用客户端进程的 UID 来确定用户名,Hadoop                的服务器完全信任客户端。默认的简单认证机制比较适合验证功能或者实验室的 Hadoop 集群,主要依靠防火墙和限制用户登录可以访问 Hadoop                集群的客户端机器来控制安全。然而,生产系统和企业多租户的 Hadoop 集群很少接受简单认证机制,大多采用 Kerberos 认证机制。
IBM BigInsights 通过图形化配置向导和管理界面可以极其方便地来加强用户鉴权、组件和服务的访问安全,从而加固 Hadoop 集群的安全性。
返回列表