2016.06.21

最近触っていた Hadoop 周辺の話 – Ambari 2.2.1.0 + HDP 2.4.0 でのセキュアな Hadoopを、編


こんにちは。次世代システム研究室で Hadoop 周辺をよく触っている T.O. です。
Hadoop 周辺をよく触っているので、最近 Hadoop 周辺を触ってきて得た話などを書いていきます。

前回は 最近触っていた Hadoop 周辺の話 – Ambari 2.1.2.1 + HDP 2.3.2 編 を書きまして、大変まとまりのない感じでしたが、今回は少しまとまりを出していきたいと思います。

さて、今回はあれから少し時間も経ったので、少し新しいバージョンで、そして、いわゆるセキュアな Hadoop をやっていきます。

このあたりを試したタイミングの都合、現時点の最新バージョンではなく、 Ambari 2.2.1.0 + HDP 2.4.0 の組み合わせでやっていっており、提示するドキュメントの URL もそれらのバージョンのものです。とはいえ、今回の内容は、少なくともマイナーバージョンによりそうな話はほとんどないので、そのあたりは気にせずにお読みください。

そもそもセキュアな Hadoop とはどういうことか

セキュアな Hadoop の話は “hadoop security”, “hadoop secure” などで検索すればいろいろと情報が出てきますが、今回は HDP 2.4.0 でやっていくので、まずは HDP 2.4.0 のドキュメントを参照していきます。

HDP 2.4.0 のドキュメントは HDP Documentation Version 2.4 がインデックスになっており、 HDP 2.4.0 を使うからにはここにあるドキュメントを読んでいくことになります。基本的に、必要そうなやつを読んでいけば良いと思いますが、明らかに関係ないもの以外は全部読んでいくぐらいのつもりでいた方が良いですね。

今回は security とか secure とか、そういった話なので、 Hadoop Security Guide をまず読むことになります。これを読まないとはじまらないと思いましょう。

さて、早速読み進めていくと、 Chapter 1. HDP Security Overview に “five core security features” として以下を挙げています。
  • Administration
  • Authentication and perimeter security
  • Authorization
  • Audit
  • Data protection
ということで、今回は 5 つの領域についてざっと見ていきましょう。


Administration

Administration については 2.1. Administration で触れられています。

このページでは、 Ranger によって他 4 つの要素を管理している、という印象の がありますが、よく見ると、 Authentication については Ranger は関与していません。実際に触ってみてもそのようでした。認証のキモになるのは Kerberos ですが、それの管理については、ほぼ Ambari でやることになり、知る限り触ってみた限り Ranger 側では特に管理下においていません。後述しますが、 Hadoop クラスタの Kerberize は Ambari からの操作でやっていきます。将来的には Ranger でやっていきたい、ということでしょうか。

また、 Knox についても、 Ranger には認可の設定はあるようですが、 Knox そのものの設定などは Ambari でやるようです。


Authentication and perimeter security

Authentication は日本語では「認証」を指すわけですが、 Hadoop においての「認証」は、結局 Kerberos 認証の存在を避けてとおることはできないようです。このあたりはまずは、 Hadoop and Kerberos を読むとよいですが、 Kerberos 認証の仕組みの話と、 Kerberos 認証のために使うツールと、 Hadoop における Kerberos 認証の適用の仕方について理解する必要があるので、だるいですね。だるいですが、避けてとおれないのでやっていきましょう。

ということで、なにはともあれ Hadoop クラスタを Kerberize つまり Kerberos 認証対応させる必要があるわけですが、 Kerberize 自体は、 Ambari を使い 1. Enabling Kerberos Authentication Using Ambari 以降で示される手順のとおりに進めていけば、まず問題なく完遂できます。同様の内容が Ambari Security Guide の Chapter 2. Configuring Ambari and Hadoop for Kerberos にも載っています。いい世の中になりましたね。

なお、 Cloudera Manager でも同様に(ひょっとしたらそれ以上に楽に?) Kerberize できるそうです。ここで Cloudera 嶋内さんのお言葉を引用させていただきます。




ちなみに、手順の中で Kerberos 認証の基盤の具体的な実装に何を使うのか、という話が出てきまして、 MIT Kerberos KDC か Microsoft Active Directory か、という選択をすることになります。残念ながらまだ私はここで Active Directory を使ってみた試しはございませんので、 MIT Kerberos KDC をセットアップし、そして、 kinit, kadmin, kadmin.local, klist, kdestory などのコマンドの使い方を覚えたりなどをやっていきました。このあたりはそれぞれの man や MIT の Kerberos のページ を読むのが良いように思います。

Authentication の話はこのようなところですが、残る “perimeter security” というのはなにでしょうか? “perimeter” とは「境界」とか「防御線」とかそういった意味ですね。具体的な話になっていくと、 Apache Knox の話になります。 Knox は端的に言えば、 HTTP でアクセスしにくる Hadoop のコンポーネントのへのリバースプロキシで、それらの利用にあたっての認証を集中的にやってしまうためのツール、という感じですが、まだほとんど触っていないので、細かい話はまたの機会にします。

Authorization

「認可」とか「承認」などと表現される領域ですね。これは Apache Ranger が担います。 Ranger については、構造も含めた概要を理解するには、 Securing Hadoop with Apache Ranger を読むのが良いように思います。

Ranger の Authorization に関わる機能をおおまかに書くと「誰が、どのリソースに、どのようにアクセスできるか、を定義できる」ということになります。HDFS に関して言えば、オリジナルの Unix ライクな permission の設定に加え、 ACL もありますが、 Ranger を使えば、 HDFS も含め、他のコンポーネントについても Authorization の領域を集中的に管理できる、ということになり、便利になるようです。

インストールから設定までの手順については、引き続き Hortonworks の Hadoop Security Guide から Chapter 3. Configuring Authorization in Hadoop を読み進めながらやっていけば良いようです。

Ranger の構造ですが、前掲の Securing Hadoop with Apache Rangerスライド13 の図に書いてあるような感じです。 Authorization の処理や、後述する Audit のログの書き出しは、各コンポーネントに組み込むプラグインがやっています。 Authorization の設定自体は、この図にある Ranger Policy Admin Server で管理してはいるものの、それをプラグインが取得し、あとはプラグインだけでやってしまう、という感じです。もちろん、設定に更新があれば、取り直します。

なお、プラグインは「各コンポーネントに組み込む」と書きましたが、もちろんそのような作業も Ambari から自動的に行なえます。導入の障壁は極めて低いですね。

Audit

「監査」のことで、操作のログをとるのと、そのチェック、というような話です。これも Ranger が担います。 Hadoop Security Guide の Chapter 5. Auditing in Hadoop を読みましょう。

Authorization で書いたとおり、この操作のログを取る処理は Ranger プラグインがになっています。また、このログ、つまりいわゆる監査ログの書き出し先は、バージョン 0.5 では HDFS, RDB, Solr が選べますが、 RDB は deprecated のようです。 Solr にも慣れないといけなくなりますね。

こうしてとった監査ログのチェックですが、これは Ranger の WebUI から検索することができます。その際検索対象になるのは、 RDB か Solr に書きだしたもので、 HDFS は対象にはできないようです。

ちなみに、 HDFS への書き出しの挙動を見てみたところ、 HDFS 上のファイルを open しっぱなしで書き込み続け、指定したローテーションのタイミングで close する、というような感じなので、そもそも検索用に使うにも不適、という話もあったりするようです。

Data protection

Data protection の話は、おおざっぱに言えば通信経路の暗号化(Wire Encryption)と、 HDFS の暗号化(HDFS Encryption)の話の二本柱です。

通信経路の暗号化については、 Hadoop Security Guide の Chapter 4. Data Protection: Wire Encryption を、 HDFS の暗号化については、同じく Hadoop Security Guide の Chapter 6. Data Protection: HDFS Encryption を読みましょう。通信経路の暗号化は、ドキュメントを読んでもわかると思いますが、本当にあらゆる経路の暗号化ができるようです。いくつか試してみましたが、ドキュメントのとおりにやればできる、という感じでした。なお、 HDFS の暗号化にはまだ一秒も試しておりませんので、またの機会にします。

まとめ

Hortonworks のドキュメントに示されたセキュアな Hadoop をやっていく上での 5 つの領域について見てきました。さらっと書いてきたものの、やること・覚えることはそこそこにあります。特に Kerberos 認証については、私は今回、はじめて触れましたが、その仕組み、用語や扱いに慣れるには多少、時間がかかりました。 Kerberos 認証の構成が未体験の方には、まずそこが障壁になるかもしれません。その他にも、 Ranger のような新しいツールも登場するわけで、その役割や構造を把握し、慣れていくことも必要ですね。

やること・覚えることはそこそこにあるものの、セキュアな Hadoop をやっていくための仕組みを導入すること自体は、ドキュメントをよく読みつつ Ambari を操作していくと、実はまったく大変ではなく、とりあえず試すだけならば、軽い気持ちでやってみることをおすすめします。驚くほどかんたんに、あっけなく導入することができるでしょう。

しかしながらセキュリティの話は、設定と運用をよくよく考えないといけません。仕組みそのものが用意され、堅牢であっても、それを使うための設定がザルだったり、運用がグダグダならば、意味がありませんから。

前回よりもまとまった感じになりましたね!

最後に

次世代システム研究室では、グループ全体のインテグレーションを支援してくれるアーキテクトを募集しています。インフラ設計、構築経験者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。