LoginSignup
5
0

More than 5 years have passed since last update.

Apache Zeppelinにチームで利用するためのセキュリティ設定

Last updated at Posted at 2016-12-11

Zeppelinにセキュリティを導入したい背景

Amazon EMR上 のZeppelinにガチャガチャとダッシュボードを作ったのでいざチームのみんなに見てもらえるようにしようと思ったのが背景。HDPのアドベントカレンダーなのにEMRでやっているのはご愛嬌。EMR久しぶりにさっているけど、コンフィグの管理と反映がやっぱり手間かかる。EMRだとConfiguring Applicationsみたいな機能を使って起動時にコンフィグをインジェクションしちゃうのがやっぱりよさげ。

いろいろ手元で試行錯誤するにはApache Ambariみたいなものが入っていると便利でいいね。

やったこと

  1. 認証の導入
    • 単一ユーザーでの認証。
    • ユーザーごとの権限管理は今回はやっていない。
  2. HTTPS化

認証

ZeppelinはApache Shiroを認証認可に利用している

ZeppelinのドキュメントのShiro authentication for Apache Zeppelinを参照して設定。手順は以下のとおり

1. shiro.ini: 認証有効可のために編集

shiro.iniはEMRだと/etc/zeppelin/conf/shiro.iniにある。これをドキュメントどおり

/** = anon
#/** = authc

から

#/** = anon
/** = authc

に変更。

2. zeppelin-site.xml: Zeppelin側で匿名ユーザーをアクセス拒否するようにする

/etc/zeppelin/conf/zeppelin-site.xml.templateというファイルがあるのでこれを/etc/zeppelin/conf/zeppelin-site.xmlにコピーしてzeppelin.anonymous.allowedfalseに変更する。

3. Zeppelinを再起動して設定を適用

$ sudo -u zeppelin /usr/lib/zeppelin/bin/zeppelin-daemon.sh restart

4. アクセスしてみる

shiro.iniを見ると以下の様なデフォルトユーザーが設定されているので、ZeppelinにアクセスしてLoginボタンからユーザー名とパスワードを入力してやればOK

admin = password1
user1 = password2
user2 = password3

 shiro.iniをちょっと覗いてみる

さっと覗いてみると、LDAPやActive Directory関連の設定項目が並んでいる。必要に応じて設定してやればバックエンドにLDAPなどを簡単に利用できそう。いまのところ不要なのでためしていない。

activeDirectoryRealm = org.apache.zeppelin.server.ActiveDirectoryGroupRealm
activeDirectoryRealm.systemUsername = userNameA
activeDirectoryRealm.systemPassword = passwordA
activeDirectoryRealm.searchBase = CN=Users,DC=SOME_GROUP,DC=COMPANY,DC=COM
activeDirectoryRealm.url = ldap://ldap.test.com:389
activeDirectoryRealm.groupRolesMap = "CN=aGroupName,OU=groups,DC=SOME_GROUP,DC=COMPANY,DC=COM":"group1"
activeDirectoryRealm.authorizationCachingEnabled = false

ldapRealm = org.apache.zeppelin.server.LdapGroupRealm
# search base for ldap groups (only relevant for LdapGroupRealm):
ldapRealm.contextFactory.environment[ldap.searchBase] = dc=COMPANY,dc=COM
ldapRealm.contextFactory.url = ldap://ldap.test.com:389
ldapRealm.userDnTemplate = uid={0},ou=Users,dc=COMPANY,dc=COM
ldapRealm.contextFactory.authenticationMechanism = SIMPLE

今回は小さな利用だしチーム内で権限をわける必要がないのでLDAP等は利用の検討対象外だったけれども、大きな組織の中で利用するような場合や、HDPを使っている場合などはLDAPやActive Directoryを使っていることも多いと思う。そういうときにサクッと設定できそうでよさげ。

HTTPS化

ユーザー認証ができたので、あとは通信を暗号化してやればまあOKかなということで、nginxでSSL Terminationをする。ZeppelinはWebSocketを利用するので、Reverse ProxyはConnection: Upgradeをサポートするように設定する必要があるのに注意。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0