Elastic CloudのKibanaをリバースプロキシを通してアクセスする
概要
Elastic Cloudで運用しているKibanaの画面を、独自ドメインのURLで公開したいと思ったとき、
リバースプロキシを立てたくなると思うのですが、その設定方法の一例を備忘録がてら書いておきます。
2019年7月時点では、独自ドメインでの公開は本家の機能にありません。
nginxを使って公開する
結論から先にいうと、Let’s Encryptでも正式なのでも、オレオレ証明書でも良いのでSSLを使う前提で証明書を用意しましょう。
ssl_certificateとssl_certificate_keyの箇所です。
あとは、proxy_passのところにElastic CloudのkibanaエンドポイントのURLを書きます。
以下のファイルをserver.confとして作成しました。
server { listen 443 ssl; server_name localhost; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; ssl_certificate /etc/nginx/server.crt; # サーバー証明書のパス ssl_certificate_key /etc/nginx/server.key; # 秘密鍵のパス location / { proxy_pass https://**********************.us-east-1.aws.found.io:9243; } }
これで https://localhost/ とアクセスすると、ブラウザ --> nginx --> Elastic Cloud と処理がされ、あたかもlocalhostでkibanaが動いているかのように見えます。
起動例
docker run -d -it -v /hoge/server.conf:/etc/nginx/conf.d/default.conf \ -v /hoge/server.crt:/etc/nginx/server.crt \ -v /hoge/server.key:/etc/nginx/server.key \ --name nginx \ -p 80:80 \ -p 443:443 \ nginx:latest
Trap point1
httpでのアクセスでログイン画面を表示するとエラーになる。
もっともシンプルなnginxを使ったリバースプロキシの設定かと思いますが、これだとエラーになります。
server{ listen 80; server_name localhost; location / { proxy_pass https://**********************************.us-east-1.aws.found.io:9243; } }
A secure connection is required for log in
Contact your system administrator.
メッセージを見てもわかるように、ログイン画面をhttpでアクセスする画面でやるな、ということでしょう。
Trap point2
server{ listen 80; server_name localhost; location /kibana { proxy_pass https://**********************************.us-east-1.aws.found.io:9243; } }
http://localhost/kibana としてアクセスしたいと思い、上記のような設定にしたとします。
この場合は、ログイン画面への遷移が発生したときに、意図しないURLとなってしまうため、404エラーが発生します。
Elastic Cloud側の設定はSaaSであるため、変更できないと考えた方が良いと思います。したがって、locationとしては、 ”/” で指定しておくのがシンプルで良いかと考えます。