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.

f:id:tsgkdt:20190731010104p:plain

メッセージを見てもわかるように、ログイン画面を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エラーが発生します。 f:id:tsgkdt:20190731010939p:plain

Elastic Cloud側の設定はSaaSであるため、変更できないと考えた方が良いと思います。したがって、locationとしては、 ”/” で指定しておくのがシンプルで良いかと考えます。