kibanaで認証かけたいんだけど(nginxによるbasic認証)
背景
kibanaは認証もなくがら空きである。fluentで本番サーバのログをelasticsearchへ流してそれをkibanaでみる。本番のデータでいろいろ表に出ちゃいけない情報もあるので、社内であってもカジュアルすぎる感じで見られると嫌。 そういう訳でkibanaにnginx経由でアクセスを強制することでbasic認証を挟む。
やったこと
- nginxインストール
- nginx設定
- パスワードファイルの配置
- kibana設定
nginxインストール
詳しく書きません。tar ballからver 1.9のものをインストール。
nginx config
メインの設定は他のサーバと共通。なんでもいい。vhostに以下のような設定。ansibleで書いたやつ。
# basic authentification for kibana upstream kibana { server localhost:5601; } server { listen 80; {% if ENVIRONMENT == "production" %} server_name kibana.o-in.hoge.jp {% else %} server_name kibana.dev.o-in.hoge.jp {% endif %} charset utf-8; # allow ip include /usr/local/nginx/conf/common-ip.conf; deny all; error_log /var/log/nginx/nginx_kibana.error.log warn; access_log /var/log/nginx/nginx_kibana.access.log mylog; proxy_buffering off; # basic auth auth_basic "Enter your ID and password." ; auth_basic_user_file "/usr/local/nginx/.htpasswd" ; location / { proxy_pass http://kibana; } }
パスワードファイルの配置
nginx 設定ファイルで .htpasswdを読み込んでいる。 apache付属のhtpasswd コマンドを用いる。今構築中のサーバにapache居なくてもOK。他のサーバで作ってコピペしてくればいい。
$ /usr/local/apache2/bin/htpasswd -c ./kibana_pass myloginid New password: Re-type new password:
作成したファイルは nginxユーザの持ち物で0600にでもしておく。他のユーザによって書き換えられても嫌だし、ハッシュ化されているとはいえ見られても嫌。
kibana設定
localhostのnginxからのみアクセスできるようにする。 kibanaのhomeディレクトリの下にconfig/kibana.ymlとかがあるので、
server.host: localhost
みたいな記述を入れる。そうするとlocalhostからのみのアクセスを受け付ける。
忘れずに
nginx. kibanaのrestartをして設定を反映する。
コメント
basic認証を初めて使ったけどそんなに難しくない。認証の経路を作って、直接のアクセス経路を断つのを忘れないようにするのが重要だと思った。