会社の Google アカウントを使って Kibana にログイン
管理するアカウント増えると面倒なので、会社の Google アカウントでログインしたい。
Elastic Cloud で Kibana を運用しています。Elastic Cloud では、X-Pack が使用できるので、付属の Shield を使って Kibana のログインを管理できます。ただ、これでまた個人で管理するアカウントが増えてしまうんですよね。昨今色々なサービスを利用することが多いので、個人のアカウントだけでもかなりの数を管理しているかと思います。アカウントを1つ作成して共有するにしても、アカウントが増えることには変わりありません。。
できれば、個人で管理するアカウント増やしたくない!
ということで、今回紹介するのは、会社の Google アカウントで Kibana にログインする方法について紹介したいと思います。
(正しくはGoogle アカウントで許可されたユーザーだけ Kibana へアクセスする方法です。)
システム構成
ユーザーの認証を担うシステムは、Google Cloud Platform で構築します。Google Cloud ID-Aware Proxy で、認証されたユーザーを Elastic Cloud でホストしている Kibana へ Reverse Proxy する構成です。
Reverse Proxy は、Google App Engine の Flex 環境を使用して、Docker で作成した Nginx で構築しました。
Reverse Proxy の構築
Nginx ベースの Reverse Proxy は、Google App Engine の Flex 環境で稼働するため、nginx.conf と Dockerfile、app.yaml の3つのファイルを用意します。
Example nginx.conf:
events {
worker_connections 768;
}http {
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";server {
listen 8080;location / {
proxy_pass https://xxxxxxx.ap-southeast-1.aws.found.io;
proxy_set_header Authorization "Basic a2liYW5....hyYTp3ZzJ.....IaTNOZVRwYVE=";
}
}
}
今回は、認証されたユーザーは共通のアカウントで Kibana へアクセスするため、proxy_pass
に Kibana の URL を設置し、Authorization ヘッダーに、あらかじめ Kibana で作成したアカウントとパスワードを user:pass のフォーマットで Base64 エンコードしたものを Basic 認証のヘッダー情報として設定しています。
Example Dockerfile:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
作成した nginx.conf をコピーするだけの簡単なものです。
Example app.yaml:
runtime: custom
env: flex
最後に、これらをデプロイします。
gcloud app deploy
デプロイ手順の詳細は、https://cloud.google.com/appengine/docs/flexible/custom-runtimes/quickstart を参考にしてください。
Identity-Aware Proxy の設定
このままでは、デプロイした Reverse Proxy サーバーのURLにアクセスするとなんの認証もなく、Kibana にアクセスできてしまいます。
Identity-Aware Proxy の設定は、Google Cloud コンソールの「IAM と管理」- 「Identity-Aware Proxy」設定画面にて、IAP の箇所を有効にします。
また、画面右側の「Access」にアクセスを許可するメンバーを追加します。メンバーの追加は個別のアカウントを指定することもできますし、ドメイン名を指定することもできます。
IAP の設定詳細は、https://cloud.google.com/iap/docs/app-engine-quickstart?hl=ja を参照してください。
アクセスしてみる
デプロイした Reverse Proxy のURL へアクセスしましょう。Google の認証画面にリダイレクトされ、ログインが正しければ Kibana の画面が表示されます。
まとめ
今回紹介したシステムは全てフルマネージドサービスだけで構成しています。いわゆるサーバーレスってやつですね。
例えば、複数の Kibana のアクセスを構成する場合や、ユーザー固有の権限で、Kibana にアクセスしたい場合など、まだまだ、課題はありそうです。今回紹介した内容をヒントに、より実用的にな構成を考えてみてください。