Elasticsearch Authプラグインで
アクセスコントロール
第2回elasticsearch勉強会
自己紹介
名前: 菅谷信介
所属: N2SM, Inc.
オープンソース活動:
 Apache Portals (Jetspeed2など) コミッタ
 Seasarプロジェクトコミッタ(S2Container,
Teeda, SAStruts, DBFlute, S2Portlet,
S2Robot..)
 Fessプロジェクト運営
などなど・・・
 Blog: http://www.chazine.com/
 Twitter: https://twitter.com/shinsuke_sugaya/




第2回Elasticsearch勉強会
最近作っているもの


Elasticsearch Plugin Archetype
Mavenでブランクプロジェクトを簡単に生成



Quartz Plugin

指定時間に処理を実行



River Web Plugin
Webサイトをクロールして、スクレイピング



DataFormat Plugin

ElasticsearchからCSVなどでデータを取得



SolrAPI Plugin

ElasticsearchをSolrのインターフェースでアクセス



Auth Plugin

Elasticsearchにアクセス制御機能を提供
https://github.com/codelibs
第2回Elasticsearch勉強会
Authプラグインの背景





Elasticsearchを使っていて、アクセス制御
したいときはないですか?
インターネットに直接Elasticsearchをさら
すことはないと思うけど、クラスタの
_shutdownとか、特定ユーザーに許可した
いかも。
いや、Elasticsearchちょくでシステム作っ
てみたいかも。

第2回Elasticsearch勉強会
Authプラグインとは





ElasticsearchのREST APIをアクセス制御す
るプラグイン
 ユーザー管理
 REST APIのアクセス管理
 ログイン/ログアウト/トークン
デフォルトのユーザー管理はElasticsearch
のインデックスを利用(拡張可能な実装)
パス、HTTPメソッド、ロールの組み合わせ
(Content Constraint)でアクセスを制御す
る

第2回Elasticsearch勉強会
アクセス制御の概要
http://localhost:9200/aaa/bbb にGETでアクセスする場合
アクセス管理
パス:/aaa (前方一致で選択)
GET
User

Content Constraint

POST
Admin

DELETE

Admin

Admin

ユーザー管理
ロール: User
利用者1 利用者2

第2回Elasticsearch勉強会

ロール: Admin
利用者3 利用者4
インストール


Elasticsearchをインストールした後に
$ ./bin/plugin -install org.codelibs/elasticsearch-auth/1.0.0




インストール後に再起動、以上!
アクセス制御の設定を間違ったら、一旦アン
インストールして再設定すれば良い

第2回Elasticsearch勉強会
ユーザー管理






認証システム名、ユーザー名、パスワード、
属するロール群を扱う
標準実装はインデックスに保存
Authenticatorインターフェースを実装すれ
ば、LDAPなどの様々な認証システムと連携
REST APIでユーザーの追加・更新・削除

第2回Elasticsearch勉強会
ユーザー追加


PUTメソッドでtestuserを追加する
$ curl -XPUT 'localhost:9200/_auth/account' -d ‘{
"authenticator" : "index",
"username" : "testuser",
"password" : "test123",
"roles" : ["user", "admin"]
}’

第2回Elasticsearch勉強会
ユーザー更新


POSTメソッドでtestuserを更新する
$ curl -XPOST 'localhost:9200/_auth/account' -d ‘{
"authenticator" : "index",
"username" : "testuser",
"password" : "test321",
"roles" : ["user"]
}’

第2回Elasticsearch勉強会
ユーザー削除


DELETEメソッドでtestuserを削除する
$ curl -XDELETE 'localhost:9200/_auth/account' -d ‘{
"authenticator" : "index",
"username" : "testuser"
}’

第2回Elasticsearch勉強会
アクセス管理



パス、HTTPメソッド、ロール群でアクセス
されるパスをアクセス制御する
REST APIで設定

$ curl -XPOST 'localhost:9200/security/constraint/' -d ‘{
"authenticator" : "index",
次のバージョンで
"paths¥" : ["/aaa"],
authenticatorの指定は
不要になる予定
"methods¥" : ["get", "post"],
"roles¥" : ["admin"]
}’

第2回Elasticsearch勉強会
ログイン/ログアウト


ログイン/ログアウトのREST API
$ curl -XPOST 'localhost:9200/login' -d '{
"username" : "testuser",
"password" : "test123"
}‘




ログイン成功するとトークンが発行される
トークンをリクエストヘッダーまたはクッ
キーで渡すことでアクセスを許可する

$ curl -XGET http://localhost:9200/aaa/_search?q=*:*&token=...
$ curl --cookie "eaid=..." –XGET
http://localhost:9200/aaa/_search?q=*:*
第2回Elasticsearch勉強会
まとめ





Authプラグインを導入すればElasticsearch
のコンテンツをアクセス制御できます
pluginコマンドで簡単に導入できます
フィードバックをいただけると嬉しいです
公開しているプラグインたちは
https://github.com/codelibs
にあります

第2回Elasticsearch勉強会
以上

第2回Elasticsearch勉強会

Elasticsearch Authプラグインでアクセスコントロール