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 は、探しているソリューションを実際に提供する場合があります。Hadoop クラスター自体がどのように保護されているかの詳細から REST クライアントを保護します。クラスターは気まぐれで保護された状態から保護されていない状態に移行でき、クライアントは同じ方法で Knox Gateway に対して認証されます。

問題は、Knox に対してどの程度正確に認証するかです。典型的な方法は、LDAP (AD の可能性がある) に対する HTTP 基本認証を使用することです。ただし、他のメカニズムを許可する他の認証/フェデレーション プロバイダーもあります。

ヘッダー ベースの事前認証 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 ) と組み合わせると、これは効果的です。 Hadoop の信頼できるプロキシとしての Knox の役割を活用して、アプリケーションで確立された ID をフェデレートする方法。

今後の 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に「無制限の強度の暗号化」 セキュリティポリシーがインストールされていることを確認してください(個別にダウンロードしてください)
  • SPNEGOGSSAPI Kerberos チケットを使用して (NameNode 上の) WebHDFS サービスに接続する小さな Java ユーティリティを開発する

オプション 1: GUI を介してチケットを作成し、Java にそれをデフォルトのキャッシュにフェッチするように指示します。

オプション 2: Java にkeytabファイルを使用して独自のチケットを自動的に作成するように指示し(Linux で作成する必要がありますktutil。Windows パッケージにはそのようなユーティリティはありません)、キャッシュを無視します。

  • Java コードで単一の GET を実行して、このセッションのHDFS 委任トークンを取得し、トークンを StdOut にダンプしてから終了します。
  • .Net コードで Java ユーティリティを実行し、StdOut をキャプチャして、トークンを取得します。
  • SPNEGO を使用せずに WebHDFS (NameNode + 最終的な DataNode へのリダイレクト) に接続しますが、事前認証の証明として URL にトークンを挿入します。

結局、それはJavaの問題です。また、機能する Kerberos 構成をセットアップするのは非常に難しい作業です ( Hadoop エコシステムにおける Kerberos 実装の問題に関する現在の参照サイト「Madness beyond the Gate」を参照)。

于 2015-11-24T11:48:06.833 に答える