云服务器内容精选
-
认证代码实例讲解 package com.huawei.bigdata.hdfs.examples; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.security.UserGroupInformation; public class KerberosTest { private static String PATH_TO_HDFS_SITE_XML = KerberosTest.class.getClassLoader().getResource("hdfs-site.xml") .getPath(); private static String PATH_TO_CORE_SITE_XML = KerberosTest.class.getClassLoader().getResource("core-site.xml") .getPath(); private static String PATH_TO_KEYTAB = KerberosTest.class.getClassLoader().getResource("user.keytab").getPath(); private static String PATH_TO_KRB5_CONF = KerberosTest.class.getClassLoader().getResource("krb5.conf").getPath(); private static String PRNCIPAL_NAME = "develop"; private FileSystem fs; private Configuration conf; /** * initialize Configuration */ private void initConf() { conf = new Configuration(); // add configuration files conf.addResource(new Path(PATH_TO_HDFS_SITE_XML)); conf.addResource(new Path(PATH_TO_CORE_SITE_XML)); } /** * login Kerberos to get TGT, if the cluster is in security mode * @throws IOException if login is failed */ private void login() throws IOException { // not security mode, just return if (! "kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { return; } //security mode System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(PRNCIPAL_NAME, PATH_TO_KEYTAB); } /** * initialize FileSystem, and get ST from Kerberos * @throws IOException */ private void initFileSystem() throws IOException { fs = FileSystem.get(conf); } /** * An example to access the HDFS * @throws IOException */ private void doSth() throws IOException { Path path = new Path("/tmp"); FileStatus fStatus = fs.getFileStatus(path); System.out.println("Status of " + path + " is " + fStatus); //other thing } public static void main(String[] args) throws Exception { KerberosTest test = new KerberosTest(); test.initConf(); test.login(); test.initFileSystem(); test.doSth(); } } Kerberos认证时需要配置Kerberos认证所需要的文件参数,主要包含keytab路径,Kerberos认证的用户名称,Kerberos认证所需要的客户端配置krb5.conf文件。 方法login()为调用hadoop的接口执行Kerberos认证,生成TGT票据。 方法doSth()调用hadoop的接口访问文件系统,此时底层RPC会自动携带TGT去Kerberos认证,生成ST票据。 以上代码可在安全模式下的HDFS二次开发样例工程中创建KerberosTest.java,运行并查看调测结果,具体操作过程请参考HDFS开发指南(安全模式)。
-
基本概念 以下为常见的基本概念,可以帮助用户减少学习Kerberos框架所花费的时间,有助于更好的理解Kerberos业务。以HDFS安全认证为例: TGT 票据授权票据(Ticket-Granting Ticket),由Kerberos服务生成,提供给应用程序与Kerberos服务器建立认证安全会话,该票据的默认有效期为24小时,24小时后该票据自动过期。 TGT申请方式(以HDFS为例): 通过HDFS提供的接口获取。 /** * login Kerberos to get TGT, if the cluster is in security mode * @throws IOException if login is failed */ private void login() throws IOException { // not security mode, just return if (! "kerberos".equalsIgnoreCase(conf.get("hadoop.security.authentication"))) { return; } //security mode System.setProperty("java.security.krb5.conf", PATH_TO_KRB5_CONF); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab(PRNCIPAL_NAME, PATH_TO_KEYTAB); } 通过客户端shell命令以kinit方式获取。 ST 服务票据(Server Ticket),由Kerberos服务生成,提供给应用程序与应用服务建立安全会话,该票据一次性有效。 ST的生成在 FusionInsight 产品中,基于hadoop-rpc通信,由rpc底层自动向Kerberos服务端提交请求,由Kerberos服务端生成。
-
结构 Kerberos的原理架构如图1所示,各模块的说明如表1所示。 图1 原理架构 表1 模块说明 模块 说明 Application Client 应用客户端,通常是需要提交任务(或者作业)的应用程序。 Application Server 应用服务端,通常是应用客户端需要访问的应用程序。 Kerberos 提供安全认证的服务。 KerberosAdmin 提供认证用户管理的进程。 KerberosServer 提供认证票据分发的进程。 步骤原理说明: 应用客户端(Application Client)可以是集群内某个服务,也可以是客户二次开发的一个应用程序,应用程序可以向应用服务提交任务或者作业。 应用程序在提交任务或者作业前,需要向Kerberos服务申请TGT(Ticket-Granting Ticket),用于建立和Kerberos服务器的安全会话。 Kerberos服务在收到TGT请求后,会解析其中的参数来生成对应的TGT,使用客户端指定的用户名的密钥进行加密响应消息。 应用客户端收到TGT响应消息后,解析获取TGT,此时,再由应用客户端(通常是rpc底层)向Kerberos服务获取应用服务端的ST(Server Ticket)。 Kerberos服务在收到ST请求后,校验其中的TGT合法后,生成对应的应用服务的ST,再使用应用服务密钥将响应消息进行加密处理。 应用客户端收到ST响应消息后,将ST打包到发给应用服务的消息里面传输给对应的应用服务端(Application Server)。 应用服务端收到请求后,使用本端应用服务对应的密钥解析其中的ST,并校验成功后,本次请求合法通过。
-
处理流程 出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查: 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。 确认各个配置文件是否被正确读取到,路径是否保存正确。 确认用户名和keytab文件是按操作指导得到的。 确认各类配置信息是否已经先设置好了,再发起认证。 确认没有在同一个进程中发起多次认证,即重复调用login()方法。 若还有问题,需联系技术支持人员做进一步分析。
-
认证失败样例 解决认证出现如下关键字:clock skew too great的问题 检查集群时间。 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。 解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。 检查Kerberos服务是否正常。 检查防火墙是否关闭。 解决客户端应用提交任务到hadoop集群报错,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。 //进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab(); 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。
-
认证失败样例 解决认证出现如下关键字:clock skew too great的问题 检查集群时间。 检查开发环境所在机器的时间,与集群时间的偏差应小于5分钟。 解决认证出现如下关键字:(Receive time out) can not connect to kdc server的问题 要检查“krb5.conf”文件内容是否正确,即是否与集群中的KerberoServer的业务IP配置相同。 检查Kerberos服务是否正常。 检查防火墙是否关闭。 解决客户端应用提交任务到hadoop集群抛异常,提示Failed to find any Kerberos tgt或者No valid credentials provided的问题 检查是否执行了kinit,若未执行,则先执行kinit认证操作,再提交任务。 多线程场景下,需要在进程的开始处调用hadoop提供的loginfromkeytab函数登录KDC,得到TGT,后续提交任务之前,调用reloginFromKeytab函数刷新该TGT。 //进程入口首次登录,登录成功设置userGroupInformation UserGroupInformation.loginUserFromKeytab(this.userPrincipal,this.keytabFile); //线程提交任务之前: UserGroupInformation.getLoginUser().reloginFromKeytab(); 多个脚本同时使用kinit命令认证同一个用户的场景下,需要在各个脚本中执行kinit命令之前,先执行export KRB5CCNAME=keytab_path命令,确保每个脚本进程中KRB5CCNAME指向的路径不一致。
-
处理流程 出现认证失败的原因很多,在不同场景中建议参考以下步骤来排查: 确认本应用所运行设备和集群网络上是否通畅,Kerberos认证所需的各类端口(TCP/UDP)是否可正常访问。 确认各个配置文件是否被正确读取到,路径是否保存正确。 确认用户名和keytab文件是按操作指导得到的。 确认各类配置信息是否已经先设置好了,再发起认证。 确认没有在同一个进程中发起多次认证,即重复调用login()方法。 若还有问题,需联系技术支持人员做进一步分析。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格