【WIP】TLS終端サーバーを冗長化するために考えること
2019-04-08 08:00:47 +0900
TLS終端サーバーのロードバランシングについて
すいません。完全に知識不足でDNSラウンドロビン以外で、冗長化できないとおもっていました。 普通にL4ロードバランサで冗長化できましたね。はい。
説明する前にロードバランサについておさらい
- 詳しい説明がここに載っている。
-
L7ロードバランサとL4ロードバランサ - Qiita
- パケットの流れとかよくわからん人にとってはわからんところだと思うけど、流れは概ね理解できると思います。
-
L7ロードバランサとL4ロードバランサ - Qiita
解決策
はい、これだけですね。 よくよく考えれば当たり前のことだと思いました。
もちろん当たり前なのですが、SSL証明書をTLS終端サーバー群に対してインストールしておくことが必須になります。
完全に勘違いしていたこと
冗長化したTLS終端サーバーの証明書関連の課題
- とにかく難しいと思っている。(ここから本題感ある。)
- TLS終端サーバーがすべてのアクセスの起点になっているので、TLS終端サーバーで粗相があるとすべてのアクセスに対して問題が発生してしまうから難しい。
証明書の読み込み
冗長化するし、設定したSSL証明書をどうやってサーバー間で共有するかも課題。 アプリケーションサーバーなんかよりも考えることも多くて大変。
これはいくつか対応策はあるけど、できればインフラ専任エンジニアがいないので、なるべく普遍的な技術スタックでやりたい。。。
シンプルに証明書部分だけをNFSでマウント
ngx_mrubyで証明書を動的読み込み
- 動的に読み込めばOKというもの。
- 証明書自体は普段はMySQLに置いておいて、証明書をRedisにキャッシュしてやるなどすればいいと思う。
-
これについてはペパボやはてなが事例公開しているので、同様なことで悩んでいる場合は目を通しておくといいかもしれない。
-
ただまぁ、例えばキャッシュをRedisに、マスターデータをMySQLに格納するとなった場合、mrubyからちゃんとデータ取得時に「タイムアウト」だったり「コネクションエラー」をWebアプリケーション以上に適切にハンドリングを行なったり、X秒経過で強制タイムアウトにするかみたいな設定はシビアにしないと行けないと思っています。
TLS終端サーバーを自前運用しない
- AWSだとALB、AzureだとApplication Gateway使えってやつですね。
- 本当に特別な事情がない限りこれが安心安全。
- ただし弊社案件では、独自ドメインの証明書を使いたいのと、設定する証明書に上限は設けられないので使えない。
- 使えるなら絶対に使っている。
- ALBやApplication Gatewayは1つにつき証明書が20〜25だったと思う。
- 足らんわっ・・・ まるで・・・
Let’s Encryptでの証明書の取得・更新について
弊社では独自ドメインの証明書をLet’s Encryptを使って取得しているのでそっちの都合で「証明書の取得や更新」について色々考えてみました。
これもさっきのはてなとペパボの記事でLet’s Encryptでの証明書を取得する事例について紹介されているので、 それを見て自分でどう思ったかを簡単にまとめておく。
- speakerdeck.com
- speakerdeck.com
-
独自ドメインのSSL証明書をLet’s Encryptでやる場合、TLS終端サーバーとは疎結合な仕組みにしておくと幸せになれると思った。