eXcale開発チームの平栗です。
今回は、fluentd + Elasticsearch + Kibanaで始めるログ解析 (セットアップ編)で構築した環境に、ベーシック認証を通してアクセスする方法についてご紹介します。
前回の記事では、fluentdでログをElasticsearchに転送し、Elasticsearchで保存したログをKibanaで可視化できる環境を構築しました。
しかし、この環境ではKibanaへのアクセスに対して制限をかけていないので、誰でもKibanaを通してログのデータを見ることができるようになっています。
特に、インターネット経由でKibanaにアクセスできるようにしている場合は、公開したくない情報を誰かに見られてしまう危険性が高くなります。
今回は、この危険性を下げるためにKibanaへのアクセスにベーシック認証をかけるようにします。
合わせて、Nginxにリバースプロキシの設定を入れて、Elasticsearch-Kibanaの通信に使うポートを9200番から80番に変更し、直接Elasticsearchにアクセスできないようにします。
それでは設定していきます。
ベーシック認証用のパスワードファイルを作成する
htpasswdコマンドを使って、ベーシック認証で使うユーザとパスワードを設定します。
|
1 2 3 4 |
# htpasswd -cb <パスワードファイルのパス> <ユーザ名> <パスワード> コマンド例 # htpasswd -cb /usr/local/nginx/conf/htpasswdflie hiroki password |
htpasswdコマンドを実行すると、ユーザとパスワードが保存されたパスワードファイルが作成されます。
コマンド例では、/usr/local/nginx/conf以下にhtpasswdfileというパスワードファイルが作成されます。
Nginxの設定を変更する
次に、Nginxでベーシック認証とリバースプロキシの設定を入れます。
/usr/local/nginx/conf/nginx.confを下記のように変更します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
location / { root /opt/kibana/; index index.html index.htm; #ベーシック認証の設定 auth_basic "Restricted"; auth_basic_user_file htpasswdfile; #htpasswdのパスワードファイルのパス } #ここから下は全てリバースプロキシの設定 location ~ ^/_aliases$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } location ~ ^/.*/_aliases$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } location ~ ^/_nodes$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } location ~ ^/.*/_search$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } location ~ ^/.*/_mapping$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; } # Password protected end points location ~ ^/kibana-int/dashboard/.*$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; limit_except GET { proxy_pass http://127.0.0.1:9200; auth_basic "Restricted"; auth_basic_user_file htpasswdflie; } } location ~ ^/kibana-int/temp.*$ { proxy_pass http://127.0.0.1:9200; proxy_read_timeout 90; limit_except GET { proxy_pass http://127.0.0.1:9200; auth_basic "Restricted"; auth_basic_user_file htpasswdflie; } } |
この設定により、Kibanaへアクセスする際にユーザとパスワードを聞かれるようになります。
また、NginxがKibanaから80番ポートで送られてきたデータ取得のリクエストをElasticsearchに対して転送するようになります。
今回はNginxの設定を紹介していますが、KibanaのgithubにApacheなどの設定例がありますので参考にしてください。
Kibanaの設定を変更する
KibanaはElasticsearchからデータを取得する際に、80番ポートを使うように設定します。
kibana/config.jsを下記のように変更します。
|
1 2 |
#config.jsの24行目あたり elasticsearch: "http://<ElasticsearchのIPなど>:80", #9200番から80番にポート変更 |
“:80″は記述しなくても問題ありませんが、今回は分かりやすくするために記述しています。
ファイアウォールを変更する
KibanaからElasticsearchへのアクセスが9200番ポートではなくなったので、9200番ポートに対してインターネットからのアクセスを許可している場合は、拒否するようにしましょう。
ログの転送元と通信できるように設定がされていれば問題ありません。
以上で、設定は終了です。
Kibanaにアクセスしてみる
Nginxを起動してKibanaにアクセスすると、ユーザとパスワードを聞かれるので、
htpasswdコマンドで設定したユーザとパスワードを入力してください。
認証をパスすると、Kibanaの画面が表示されるので前回同様、Sample Dashboardを表示してみます。
Sample Dashboardでエラーメッセージが出力されずに、ログのデータが表示されたら作業は終了です。