Quantcast
Channel: パークのソフトウエア開発者ブログ|ICT技術(Java・Android・iPhone・C・Ruby)なら株式会社パークにお任せください
Viewing all articles
Browse latest Browse all 138

Kibana 4.3 に Basic 認証機能をつけるプラグインをつくってみた。

$
0
0

どうも、ちかです
最近めっちゃ忙しい。。

Kibana ってこんなの

Elasticsearch のデータを可視化するツールです。

こういうブログ記事では
まず導入として
Kibana ってこんなの」っていう話をするものですが
すでに知ってる人向けの記事ということで。

Kibana プラグイン

Kibana 4.2 からプラグインで機能を追加できるようになりました。

サーバー側は Node.js のフレームワーク hapi ベースで
クライアント側は AngularJS ベースで
とりあえずなんでもできます。

特に Elasticsearch へのアクセスは
サーバーから手軽にできるようになっています。
サーバー側でプロキシを作ればクライアントからも簡単にアクセスできます。

# Elasticsearch への GET メソッドのクチはデフォルトで開いてます。
# elasticsearch.js の API を
# サーバーでは server.plugins.elasticsearch.client として使えます。
# クライアントでは es という名前で依存性注入できます。

Kibana プラグインの作り方

Qiita に
Kibanaプラットフォームでアプリケーションをつくってみよう
という濃いぃ記事があるのでご参考に。

ミニマム構成では index.js と package.json があれば OK。

認証プラグイン


Kibana を使ってみて気になったのが
認証機能がないこと。

Shield という Elasticsearch プラグインがあるらしいのですが
有償らしいので (セキュリティ向けプラグインShieldのリリース(日本語訳))
とりあえずあきらめて

Authentication という Issue ページも立っているのですが
4.2 ⇒ 4.3 ⇒ 4.4 と先延ばし先延ばしにされているので
とりあえずあきらめて

作ってみました。

  • index.js
const Boom = require('boom');var users = {  chica: {    password: 'secret'  }};module.exports = kibana => new kibana.Plugin({  init(server, options) {    server.auth.scheme('basic', basic);    server.auth.strategy('default', 'basic');    server.auth.default('default');  }});function basic(server, options) {  return {    authenticate(request, reply) {      const authorization = request.raw.req.headers.authorization;      if (!authorization) {        return reply(Boom.unauthorized('Authentication required', 'Basic'));      }      const parts = authorization.split(/\s+/);      if (parts.length !== 2 || parts[0].toLowerCase() !== 'basic') {        return reply(Boom.unauthorized('Authentication failed.', 'Basic'));      }      const credentials = new Buffer(parts[1], 'base64').toString().split(':', 2);      const user = users[credentials[0]];      if (!user || user.password !== credentials[1]) {        return reply(Boom.unauthorized('Authentication failed.', 'Basic'));      }      return reply.continue({ credentials: { user: user } });    }  };}
  • package.json
{  "name": "basic-authentication",  "version": "0.0.1"}

index.js と package.json を tar.gz に固めて

kibana/bin/kibana plugin -i basic-authentication -u file://path/to/plugin.tar.gz

こんなので
一応ちゃんと認証が求められるようになります。

まぁでも
これを洗練するより
4.4 が出るのを待つかな。(本末転倒)

今回はこんなところで。


Viewing all articles
Browse latest Browse all 138

Trending Articles