从.Net应用程序(控制台)访问kerberos保护的webhdfs

由于Kerberos安全性,我无法从浏览器访问WebHDFS。 谁能帮我这个?

以下是浏览器中“http://****.****/webhdfs/v1/prod/snapshot_rpx/archive?op = LISTSTATUS&user.name = us”的错误

HTTP错误401

访问/ webhdfs / v1 / prod / snapshot_rpx / archive时出现问题。 原因:需要validation

用于向此URL发出请求的.Net代码

HttpWebRequest http = (HttpWebRequest)WebRequest.Create(requestUri); http.Timeout = timeout; http.ContentType = contentType; string responseData = string.Empty; using (WebResponse response = http.GetResponse()) { Stream stream = response.GetResponseStream(); StreamReader sr = new StreamReader(stream); responseData = sr.ReadToEnd(); } return responseData; 

[重要提示]此答案适用于使用Linux KDC(通常为MIT Kerberos)的普通Hadoop集群。 对于依赖Microsoft Active Directory KDC的Cloudera集群,任何.Net HTTP连接器都可以使用Microsoft SSPI协议实现SPNEGO(sooo无聊…)

~~~~

我知道从M​​icrosoft世界访问WebHDFS的唯一方法是一个丑陋而复杂的解决方法

  • 在将实际连接到HDFS的计算机上安装MIT Kerberos for Windows实用程序,以及相应的Kerberos5配置文件
  • 确保您的JVM安装了“无限强度加密”安全策略(单独下载,等等)
  • 开发一个小型Java实用程序,使用SPNEGOGSSAPI Kerberos票证连接到WebHDFS服务(在NameNode上)

选项1:通过GUI创建票证,并告诉Java在默认缓存中获取它

选项2:告诉Java使用keytab文件自动创建自己的票证(必须在Linux上使用ktutil创建;在Windows程序包中没有这样的实用程序),并忽略缓存

  • 使您的Java代码运行单个GET,为此会话检索HDFS委派令牌 ,然后将令牌转储到StdOut,然后退出
  • 使.Net代码运行Java实用程序,捕获StdOut并检索令牌
  • 在没有SPNEGO的情况下连接到WebHDFS(NameNode +最终重定向到DataNodes),但是在URL上插入令牌作为预认证的certificate

所以最后这是一个Java问题。 并且设置一个有效的Kerberos配置是非常棘手的(参见“疯狂超越门” ,关于Hadoop生态系统中Kerberos实现问题的当前参考站点)

回复较晚,抱歉。 Apache Knox实际上可能提供您正在寻找的解决方案。 它使REST客户端免受Hadoop集群本身安全性的详细信息的影响。 群集可以随心所欲地从安全转移到不安全,并且客户端将以相同的方式对Knox网关进行身份validation。

问题是您希望如何向Knox进行身份validation。 典型的方法是通过HTTP Basic Auth对抗LDAP(可能是AD)。 但是,还有其他身份validation/联合提供程序也允许其他机制。

基于Header的preauth SSO提供程序是一种适合Web应用程序类型用例的方法。 请参阅: http : //knox.apache.org/books/knox-0-7-0/user-guide.html#Preauthenticated+SSO+Provider

与应用程序和Apache Knox之间的SSL相互身份validation( http://knox.apache.org/books/knox-0-7-0/user-guide.html#Mutual+Authentication+with+SSL )相结合这是一个有效的利用Knox作为Hadoop的可信代理来联合应用程序中建立的身份的方法。

即将发布的v0.8.0版本也引入了更多的SSO机制。

Hadoop REST客户端不应该知道有关Hadoop集群的大量细节,当Hadoop的灵活性允许服务移动或安全性以不同方式启用时,所有客户端都会中断。 在每个浏览器上强制使用SPNEGO对许多人来说都是一个显示阻碍。 Apache Knox以REST API开发人员/消费者习惯于工作的方式解决了这些问题。