3

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

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

HTTP 错误 401

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

用于向此 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;
4

2 回答 2

1

回复较晚,抱歉。Apache Knox 实际上可能会提供您正在寻找的解决方案。它使 REST 客户端免受 Hadoop 集群本身如何保护的细节的影响。集群可以随心所欲地从安全变为不安全,并且客户端将以相同的方式向 Knox 网关进行身份验证。

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

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

再加上应用程序和 Apache Knox 之间的 SSL 相互认证(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 开发人员/消费者习惯的工作方式解决了这些问题。

于 2016-02-02T12:37:59.897 回答
1

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

~~~~

我知道从 Microsoft 世界访问 WebHDFS 的唯一方法是一种丑陋而复杂的解决方法

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

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

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

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

所以最终这是一个Java问题。设置一个有效的 Kerberos 配置非常棘手(参见“Madness Beyond the Gate”,当前关于 Hadoop 生态系统中 Kerberos 实施问题的参考站点)

于 2015-11-24T11:48:06.833 回答