ClouderaManager の管理コンソールをとりあえず HTTPS 化する方法(EC2 を使うときは特に使おうね)
■環境
ClouderaManager 4.8.1 インストール済み(他のバージョンでもそんなに対して変わらないはず)
■何があったか
Hadoop Advent Calendar 2013でこんな記事書いたら、@shiumachiさんに
そのやり方だとブラウザと管理コンソール間が暗号化されてないから、AWSの鍵をアップロードする際に盗聴されちゃうじゃん。m9ぷぎゃー(かなり意訳
と、ご指摘を頂きました。
薄々気づいてたんだけど面倒かったので手を抜いた。今では反省している。
■もうちょっとkwsk
EC2でClouderaManagerを使うと、指定したインスタンスタイプと台数でHadoopクラスタを自動で作成してくれます。すげー便利。
この時ClouderaManagerはAWSのAPIを当然たたくんだけど、この際にはAWSの鍵が必要になります。
そして、この鍵はブラウザでClouderaManagerの管理コンソールからPostしてあげる必要があります。
この時、ClouderaManagerの管理コンソールはデフォだとhttpsに対応しておらず、httpでアクセスすることになるので、ブラウザとClouderaManagerが稼働するサーバ間の経路は暗号化されません。
よって、AWSの鍵が盗聴されちゃうだろ。m9ぷぎゃー。となりました。
■どうする?
ClouderaManagerの管理コンソールをhttps化する方法を書いときます。
今回のようなEC2を使う場面でなくても有用だと思います。たぶん。
設定方法は本家のココに書いてあるんだけど、英語がアレな人もいらっしゃると思いますので、意味があると信じている。
本家サイトにはいくつか方法が記載されていますが、今回はとりあえずhttps化ということで、一番手軽な方法(コレ)にしてます。
■手順
手順1 鍵作成&配置
まず鍵を作成します。(※注 この鍵はHTTPSで利用する鍵で、AWSの鍵ではありません)
この鍵の作成にはJavaのkeytoolを使います。
そのため、鍵を作成するマシンにはJavaがインストールされている必要がありますが、ClouderaManagerがインストールされていれば、自ずとJavaがインストールされています。
作成した鍵はいずれにせよClouderaManaerが動作するサーバに設置する必要があるので、ClouderaManagerがインストールされたサーバで鍵を作成するのが一番手っ取り早いです。
よって、今回はClouderaManagerが稼働するサーバ上で鍵を作成します。
以下のコマンドで作成します。名前やら組織はめんどいので入力してませんが、適宜入力しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
このままだとClouderaManagerのサーバプロセスがアクセスできないので、権限変えつつ、移動します。
1 2 3 |
|
mv先は上記ディレクトリでなくても、サーバプロセスの起動ユーザ(今回はcloudera-scm)がアクセスできれば問題ないと思います。今回は解りやすそうなところに置いてみました。
手順2 ClouderaManager設定
ClouderaManagerの新規インストール時の場合を例にとります。
クラスタ構築済みの場合でも設定箇所は変わらないので、適宜読み飛ばしてください。
まず、ブラウザからClouderaManagerにアクセスし、ログインします。(初期状態だとポートは7180、IDとパスワードはadmin/admin)
ログイン後、以下のように右上のadminからパスワード変更を選択
パスワード変更のフォームが出るが無視して、上部メニューの「管理」から「設定」を選択
左メニューからセキュリティを選択
以下を設定する
「管理コンソールで TLS 暗号化を使用する」にチェック
「TLS Keystore ファイルのパス」に鍵の配置先を指定。上記の例であれば/etc/cloudera-scm-server/cm.key
「Keystore パスワード」に作成時に指定したパスワードを入力
「変更の保存」ボタンを押す
手順3 ClouderaManager再起動
以下みたいな感じでClouderaManagerを再起動します。
1
|
|
httpsでアクセスして確認します。
httpsの場合のポートは7183です。
ただ再起動後すぐにアクセスしても多分無理。ちょっと待つ。
アクセスできればおk。
しらばく待ってもアクセスできなければ、iptablesとかEC2ならセキュリティグループの設定あたりを疑うのが吉かも。
■まとめ
・ClouderaManagerはデフォではhttpsが利用できない
・この状況だと何かとまずい(EC2の場合は特に)
・こんな手順でさくっといけるよ