Grafana on EC2 で Let’s Encrypt 使ってSSL

AWSでGrafana用のEC2インスタンスをたてている。AWSならば、ELB経由にすると、ELBにACMで発行した証明書を割り当てられて楽なのだが、今回は漢のEC21本立ちなので、Let’s Encrypt を使って発行することにした。

grafana-serverでcertbotコマンドがうまくいかなかったので、nginxのリバースプロキシ機能を使い、nginx経由にしている。

スポンサーリンク

環境

  • AWS, EC2, Ubuntu 18.0.4, t2.micro
  • Grafana 6.7.2
  • nginx 1.14.0(ubuntu)
  • certbot 0.31.0

やること

GrafanaのWeb UIにhttpsで入れるようにする。特にELBなど使わないので、証明書の発行はLet’s Encryptを使う。

(User) -> nginx -> grafana-server

というように、nginxのリバースプロキシ経由にする。なんでそんな面倒なことをするかというと、certbotでうまいこと証明書が発行できなかったからだ。

手順自体は、port=80をあけて「Setup Grafana on Ubuntu 18.04 with LetsEncrypt – Hack‧zen‧werk」に則ってやればよさそうなのだが、うまくいかない。certbotを実行すると以下のようなエラーが出る。

Problem binding to port 80: Could not bind to IPv4 or IPv6.

調べてみると下記のようになぜかgrafana-serverがIPv6になっている模様。

$ sudo lsof -i:80
COMMAND     PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
grafana-s 14168 grafana    6u  IPv6 1972314      0t0  TCP *:http (LISTEN)

軽く調べるとなんだか非常にややこしそうだったので、それなら慣れたnginxを使ったほうがいいや、と。

ちなみに余談だが、root権限以外で1024以下のportを開けるときにはそのように明示してやる必要があるようで、「Configuration | Grafana Labs」によると以下のコマンドがいる。

$ sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/grafana-server

手順

手順については「How To Install and Secure Grafana on Ubuntu 18.04 | DigitalOcean」を参考にさせていただきました。

Grafanaについてはインストールしていて、DNSの設定も完了しているものとする。また、EC2のSGは80と443のTCPを開けておく。

nginxのインストール

$ sudo apt update
$ sudo apt install nginx
$ sudo systemctl enable nginx.service
$ systemctl status nginx.service
-> enabledになっていることを確認

ブラウザからドメインにアクセスして、nginxのデフォルト画面が表示されることを確認する。1サイトしか使わないので、これ以上の設定はここではしない。

証明書の発行

Certbot – Ubuntubionic Nginx」に基づいて、certbotを導入してドメイン証明書を発行する。

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo certbot --nginx
ここから対話式
-> Emailアドレスの入力
-> A (規約にAgree)
-> Y/N (メール飛ばしていいか)
-> 2 (httpきたらRedirectする)

ブラウザからhttpsでドメインにアクセスできるか確認する。httpにしたらhttpsに飛ばされるかも確認。

証明書の有効期限は90日と割と短いので、はcronなどで自動的に更新してやるとよい。なお更新コマンド。

$ sudo certbot renew

リバースプロキシの設定

grafana-serverに飛ばす設定をする。

/etc/nginx/sites-avalable/default (ドメイン毎に設定ファイル作っているならそれ)より、SSLの時の server ブロックにある location ブロックを以下のように編集。try_filesをコメントアウトして、proxy_passを追加する。

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                #try_files $uri $uri/ =404;
                proxy_pass http://localhost:3000;
        }

編集したら、文法チェックしてOKならreload。

$ sudo nginx -t
$ sudo systemctl reload nginx.service

ブラウザからドメインに飛んで、Grafanaのダッシュボードに飛べたらOK。

以上。

関連コンテンツ

関連記事

スポンサーリンク

カテゴリーaws

コメントを残す

メールアドレスが公開されることはありません。