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

15
Elasticsearch Authプラグインで アクセスコントロール 第2回elasticsearch勉強会

description

Elasticsearchにアクセス制御する機能を追加するAuthプラグインを紹介します。

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

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

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

第2回elasticsearch勉強会

Page 2: 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/

自己紹介

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

第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

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

第2回Elasticsearch勉強会

Elasticsearchを使っていて、アクセス制御したいときはないですか?

インターネットに直接Elasticsearchをさらすことはないと思うけど、クラスタの_shutdownとか、特定ユーザーに許可したいかも。

いや、Elasticsearchちょくでシステム作ってみたいかも。

Authプラグインの背景

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

第2回Elasticsearch勉強会

ElasticsearchのREST APIをアクセス制御するプラグイン ユーザー管理 REST APIのアクセス管理 ログイン/ログアウト/トークン

デフォルトのユーザー管理はElasticsearchのインデックスを利用(拡張可能な実装)

パス、HTTPメソッド、ロールの組み合わせ(Content Constraint)でアクセスを制御する

Authプラグインとは

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

第2回Elasticsearch勉強会

アクセス制御の概要

利用者1

http://localhost:9200/aaa/bbb にGETでアクセスする場合

パス:/aaa (前方一致で選択)

GET POST DELETE

User Admin Admin Admin

アクセス管理

ユーザー管理

ロール: User

利用者2 利用者3

ロール: Admin

利用者4

Content Constraint

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

第2回Elasticsearch勉強会

Elasticsearchをインストールした後に

$ ./bin/plugin -install org.codelibs/elasticsearch-auth/1.0.0

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

インストール

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

第2回Elasticsearch勉強会

認証システム名、ユーザー名、パスワード、属するロール群を扱う

標準実装はインデックスに保存 Authenticatorインターフェースを実装すれば、LDAPなどの様々な認証システムと連携

REST APIでユーザーの追加・更新・削除

ユーザー管理

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

第2回Elasticsearch勉強会

PUTメソッドでtestuserを追加する

$ curl -XPUT 'localhost:9200/_auth/account' -d ‘{ "authenticator" : "index", "username" : "testuser", "password" : "test123", "roles" : ["user", "admin"] }’

ユーザー追加

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

第2回Elasticsearch勉強会

POSTメソッドでtestuserを更新する

$ curl -XPOST 'localhost:9200/_auth/account' -d ‘{ "authenticator" : "index", "username" : "testuser", "password" : "test321", "roles" : ["user"] }’

ユーザー更新

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

第2回Elasticsearch勉強会

DELETEメソッドでtestuserを削除する

$ curl -XDELETE 'localhost:9200/_auth/account' -d ‘{ "authenticator" : "index", "username" : "testuser" }’

ユーザー削除

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

第2回Elasticsearch勉強会

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

REST APIで設定 $ curl -XPOST 'localhost:9200/security/constraint/' -d ‘{ "authenticator" : "index", "paths¥" : ["/aaa"], "methods¥" : ["get", "post"], "roles¥" : ["admin"] }’

アクセス管理

次のバージョンでauthenticatorの指定は

不要になる予定

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

第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=*:*

ログイン/ログアウト

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

第2回Elasticsearch勉強会

Authプラグインを導入すればElasticsearchのコンテンツをアクセス制御できます

pluginコマンドで簡単に導入できます フィードバックをいただけると嬉しいです

公開しているプラグインたちは https://github.com/codelibs

にあります

まとめ

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

第2回Elasticsearch勉強会

以上