話題の記事

Amazon Elasticsearch Service の Kibana にログイン機能を追加できるようになりました

Amazon Elasticsearch Service の Kibana に Cognito を使って、ログイン機能を追加できるようになりました。しかも設定も非常に簡単。設定方法をご紹介します。
2018.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

すごく嬉しいアップデートが来ました!

概要

Amazon Elasticsearch Service は Elasticsearch、Kibana の AWSマネージドサービスです。クラスタ・ノードを AWS が運用・管理してくれ、数クリックで Elasticsearch、Kibana のクラスタをプロビジョニングでき、ノードで障害が発生すればユーザーは何もしなくても復旧します。

今まで Amazon Elasticsearch Service のアクセス制御は JSON 形式のアクセスポリシーで設定できました。IAM の AWS 署名による認証、送信元 IP アドレスなどにより制御できました。ただ IAM による個人のアクセス制御ができたのですが、Elasticsearch だけです。Kibana はブラウザから操作する都合上、IAM によるアクセス制御ができませんでした。

それが今回のアップデートにより Cognito を利用したログイン機能が追加されました。認証されていない状態で Kibana にアクセスすると下記のようなログイン画面を表示できるようになりました。

一応やろうと思えば、下記ブログエントリのようにプロキシを立てて AWS の署名を差し込んでアクセスすることもできました。ただし、IAM ユーザー作ったり、アクセスキー払い出したり運用・管理が煩雑になるのがネックでした。

[小ネタ]Amazon Elasticsearch Service/Kibanaにユーザ認証でアクセスしてみる

そういう煩わしさは不要で Cognito User Pool や ADFS、Web Federation でユーザー管理できます!嬉しい!それでは早速やってみましょう。

試してみた

作業手順をまとめます。

  • Cognito User Pool 作成・設定
  • ユーザー作成
  • ドメイン作成
  • Cognito Identity Pool 作成
  • Kibana へアクセスするためのポリシーを Cognito の認証済み IAM ロールへ追加
  • Elasticsearch ドメインの Kibana 認証の有効化設定

前提

  • Elasticsearch ドメインは作成済みであること
  • バージョン 5.1 以降であれば可(今回は最新の 6.2 を利用)

Cognito User Pool 作成

マネジメントコンソールから Amazon Cognito へアクセスします。まずは Cognito User Pool を作成します。今回は最低限の設定を実施します。「Manage your User Pools」を選択します。

「Create a user pool」を選択し、Cognito User Pool の作成を開始します。

適当な名前を設定します。「Review defaults」で設定は全てデフォルトとします。

「Create pool」をクリックし、作成します。

ユーザー作成

Kibana へログインするユーザーを作成します。「Usres and groups」から「Create User」を選択します。

ユーザー名、初期パスワードを設定し、作成します。初回ログイン時にパスワード設定画面へ遷移します。

Domain 作成

ログインに利用するドメインを作成します。

以上で Cognito User Pool は作成完了です。

Cognito Identity Pool 作成

続いて、Cognito Identity Pool を作成します。「Create new indentity pool」から Identity Pool を作成します。

「Identity pool name」は適当に入力し、「Enable access to unauthenticated identities」は有効にし、作成します。

Cognito Identity Pool で利用する IAM ロール作成画面に遷移するので「Allow」をクリックして作成します。未ログインユーザーが利用する IAM ロール、ログインユーザーが利用する IAM ロールが作成されます。

Kibana へアクセスするためのポリシーを IAM ロールへ追加

自動作成した IAM ロールは Amazon Elasticsearch Service のアクセスポリシーを持っていないため、追加します。

IAM ロールからインラインポリシーを追加します。

以上で、Cognito の準備は完了です。

Elasticsearch ドメインの Kibana 認証の有効化設定

Kibana の認証を有効化します。Elasticsearch ドメインの画面から「Configure Cluster」を選択します。

Kibana authentication が追加されていますので有効化します。

作成した Cognito User Pool、Cognito Identity Pool を選択します。

設定完了までしばし待ちます。

Kibana の認証の動作確認

それでは動作を確認してみましょう。Kibana の URL へアクセスします。

最初に紹介したログイン画面が表示されました!作成したユーザー名、パスワードでログインします。

初回ログインのためパスワード変更画面が表示されます。新しいパスワード、設定するメールアドレス(User Pool の設定からなくすこともできそう)を入力し、「Send」をクリックします。

Kibana の画面が表示されました!

設定簡単で嬉しいですね。

まとめ

いかがでしたでしょうか? センシティブな情報を Elasticsearch に入れているようなケースですと今までのように IP アドレスで制御できても、誰がアクセスしたのかトラッキングするようなことができず、Kibana の利用ができないケースもあったのではないでしょうか。Cognito と連携することでユーザー認証・認可によるセキュリティ対策だけでなく、アクセス者のトラッキングも行うことができるのではないでしょうか。利用のケースが広がる素晴らしいアップデートだと思います!