リモートワークの IP 固定用に Fargate + OneLogin でプロキシを作った話
Kyash Advent Calendar 2020 2日目の記事です。
今回は、リモートワーク用に構築したフォワードプロキシサーバについて紹介します。
ECS (Fargate) 上で Squid コンテナを動かし、OneLogin を使ってユーザ認証を行う構成です。
リモートワークにおける課題
Kyash では2020年3月よりリモートワーク体制となりましたが、業務を進めるにあたりいくつかの課題が出てきました。主に IP アドレスに関する問題です。
自社システムはゼロトラストを念頭に構築されており IP アドレスを限定する必要はないのですが、一部の外部サービスでは接続元のアドレスが制限されています。
従来はオフィスの IP アドレスを登録することで問題なく運用できていたものの、各自が自宅から業務を行うリモートワークではそうもいきません。
自宅の IP アドレスが頻繁に変わるメンバがいたり、登録できる IP アドレス数の上限が決まっていたりするため、フォワードプロキシサーバを構築することとしました。
フォワードプロキシの構築
構築するプロキシに求められる要件は次の通りです。
- 外に出る IP アドレスを固定できること
- ユーザ認証の機能を持つこと
- なるべく簡単に使えること
- 必要最小限のシステム構成とすること
業務で利用するシステムのためユーザ認証は欠かせませんが、作業効率を落とすような面倒な仕組みは避けたいところです。また、運用負荷を下げるためにも最小限のシステム構成を目指しました。
試行錯誤した結果、以下の構成となりました。
システム構成
全て AWS で構築し、NLB で各メンバからの接続を受けます。HTTPS で受けるために TLS の終端も NLB で行い、証明書には ACM を活用しました。
Fargate 上で Squid コンテナが起動しており、NLB 経由の接続を受け付けています。
Squid からの外部通信は NAT ゲートウェイを通るため、常に同じ NAT ゲートウェイの IP アドレスでインターネットアクセスが可能となる仕組みです。
また、Kyash 本体とトラフィックを分離する目的で、専用の VPC や NAT ゲートウェイを新たに用意して構築しました。
OneLogin によるユーザ認証
プロキシのユーザ認証には OneLogin の Radius 機能を用いています。
Kyash では認証基盤として OneLogin が導入されているため、既存の仕組みに乗ることでユーザ管理を行わずに済みました。入退社に伴うアカウント管理やパスワード再発行も OneLogin 側が面倒を見てくれます。 ※参考記事
ロールによる権限管理が行えるので、職務上必要な人にのみプロキシを開放しています。
利用者視点では、新たなパスワードを覚える必要がないのもメリットの一つです。
監視について
構成図には明記していませんが、コンテナメトリクスの取得用に Datadog agent も起動しています。
Squid のログは、AWS FireLens (fluentbit) 経由で Datadog Logs へ転送されます。
転送したログについては、Datadog 内の Pipeline Library に用意されている Squid 用のテンプレートを用いることで、手間なくパースすることが可能です。
プロキシを導入した結果
プロキシを使うことで、外部システムへ登録する IP アドレスが1つで済むようになりました。
一部の社内システムでも手動による IP 制限運用が残っていましたが、そこでもプロキシを活用することでリストの更新作業が不要となっています。
また、マネージドサービスのみで構築できたため運用管理の面でも手間が掛かっていません。今後仮に利用者が増えた場合でも、Fargate のタスク数を増やすだけで対応可能です。
まとめ
- リモートワークで IP を固定するためのプロキシを建てました
- Squid を Fargate で動かして OneLogin と繋げました
- マネージドサービスで完結したので運用の手間がなくて最高です
Kyash Advent Calendar 2020 の他の記事もぜひ読んでみてください!