Let me code again...

Welcome to ijokarumawak's blog :)

NiFiでKerberizeされたKafka、HDFSに接続する

KerberizeされたKafkaにNiFiからアクセスするのに苦労している時、同僚が「KafkaをKerberizeすると非常にセキュア、セキュリティ頑丈過ぎて自分でも入れないw」なんてジョークを飛ばしてました。 それぐらい難しいんだなー、と少し安心しつつ、やっぱり結構苦労しました。久々にまとまった量の情報になったので残しておきます。

If you’re looking for English, it’s available here.

NiFiからKafkaやHDFSに接続する記事は色々あるのですが、Kerberosが絡むと、Zookeeper、Kafka、HDFS、Ambari、Ranger、NiFiと色々設定が広範囲に渡り、ちらばったドキュメントを参照しないといけないので、まず全体像を把握するのがとても難しかったです。

以下の手順はHDP SandboxをKerberizeしてNiFiから接続するラフな手順をまとめたもので、不必要なものも、不足もあるかもしれませんが、全体的にはこんな感じの手順になります:

  • HDPのSandboxに最新のHDFをダウンロードしてインストール
  • Kafkaデフォルトでは起動していないので、Ambariから起動、メンテナンスモード解除
  • 影響のあるサービスをリスタートする
  • MIT KDCをインストールして設定する 参考
  • AmbariからKerberosを有効にする
  • AmbariのKerberosウィザードにしたがって進める
  • Check Pigのテストが失敗するが、Completeボタンで前に進む
  • いくつかのサービスが起動してない状態になったので、Ambariから起動
  • Kerberos関連のKafka設定を行う 参考
  • Kafka listenersの設定をPLAINTEXT://localhost:6667からPLAINTEXTSASL://localhost:6667にAmbariから変更
  • AmbariのRanger設定からKafka ranger plugin, Kafkaの設定からEnable Ranger for KAFKAをそれぞれ有効にする 参考
  • RangerでKafkaのACLを設定する 参考
  • 後から別ユーザで接続しようと思っても、すでに他のKerberosユーザでConsumer Group接続している場合は、同一のGroup idで他のKerberosユーザからは接続できないので注意
  • KerberizedされたKafkaにNiFiが接続できるようにNiFiを設定 参考 サンプルコード貼り付けるときにダブルクォーテーションに注意
  • /etc/krb5.confをnifi.propertiesのnifi.kerberos.krb5.fileに設定
  • HDFSのアクセス制御はRangerのみで管理することが推奨されている 参考
  • PutKafka, GetKafka, PutHDFSなどを使ってNiFiのフローを作成する

GistにはサンプルのNiFi templateとかも置いてあります。何かのお役に立てばこれ幸い。