課題:海外からの不正アクセスに対する不安
L社は、5年目くらいの企業顧客向けWebサービスのスタートアップ企業。代表のT氏は、海外からの不正アクセスのニュースを見聞きし不安を感じています。また、今後、無料プランや低価格プランを準備してライトユーザを増やす計画があります。
要件と課題
- 海外からの不正アクセスが不安
- 今後のビジネス拡大に向けてセキュリティの不安を取り除きたい
- 不正アクセスによって貴重なサーバーリソースを利用されていないか?
- データの盗難にあっていないか?
- 国内をメインの市場としているので、しばらく不要な海外からのアクセスはブロックしたい
対策の提案:トラフィックのロギングと可視化
システムの構成をヒアリングし、チェックしたところシステムの大部分はパブリッククラウドである Google Cloud で動作していて、その中のサービス群が個別にインターネットにアクセスしたりHTTP(S)のAPIで通信し合う仕組みになっていた。
ネットワークの課題
- 出入り口が多い
- Webサービス、APIの公開、社外サービスからのデータ取得処理など、サービス毎にインターネットにアクセスし、インターネット経由でリクエストを受ける
- 何か問題が発生していても知る手だてがない
- 問題に気付いても打つ手がない(準備されていない)
"どんなトラフィックがインターネットから来ているのか"が分かるロギング&可視化と、あとは、好ましくないアクセス(不正アクセス)をブロックできる仕組みであるWAFを導入することにした。
対策案
- (出入り口が多い)
- GCLB(L7ロードバランサ)を入口に設置し1つに絞る。
- (何か問題が発生していても知る手だてがない)
- GCLBのログをCloud Loggingを通してBigQueryに保管
- 蓄積されたログを、BIツールであるMetabaseのダッシュボードで可視化
- (問題に気付いても打つ手がない(準備されていない))
- GCLBにWAFを設定し、Metabaseのダッシュボードで検知された脅威に対してブロックを設定
手法:具体的なサービスやプロダクトと設定のポイント
対策の計画に従い、順次設定を行う。
入口の限定:ネットワーク流路を集約 (GCLB)
対象のサブシステムをなるべく多くGCLBの配下に置きたいので、そのような構成を取れるGCLBの種類(全9種類)と、構成の設定を検証しました。
接続したいサブシステムの種類
- VMインスタンス:多数 (Nginxがいてそれを経由しているもの、内部でDockerが動いてNginxコンテナを経由するものなど)
- GKEのサービス:多数 (Ingressを経由するもの)
ロードバランサの種別については、従来タイプのグローバル外部L7(HTTP(S))ロードバランサを選択しました。グローバルLBを使うには、IPもグローバルである必要があるため、サービスのIPをグローバルIPとして取り直しました。
接続方法
- (VMインスタンス):インスタンスグループをかぶせて接続
- (GKEのサービス):GKE ServiceでゾーンNEGを作成してそれを経由して接続
このGCLBのセッティングは、既存サービスへの影響が甚大なため、慎重に検証を重ねて作業を実施した。
モニタリング1:アクセスログの収集と保存 (Cloud Logging & BigQuery)
GCLBを設定したら、ログの保管に関する設定を実施。ログ取得は、GCLBのバックエンドの設定から行う。そうするとアクセスログがCloudLoggingに流れてくるようになる。さらに、CloudLoggingに流れてきたデータをログルータ―のSinkを作成することで、BigQueryに吐き出すことができる。
モニタリング2:ログの可視化 (Metabase)
ログの可視化には、OSSのBIツールであるMetabaseを利用しました。MetabaseはGKEクラスタ上にコンテナを利用して構築し、今回構築したGCLBを通して公開。BigQueryのアクセスログや後のWAFの検知ログなどをダッシュボードで可視化&共有するのに利用しました。
可視化の例
- リクエスト数の日毎の変化
- IP別、国・都市別のリクエスト数
- MaxMind社 の GeoLite2 を利用して、IPを国・都市・組織名、また、経度緯度情報に変換
- デバイス、ブラウザ、OS、ロボット、クローラー別のリクエスト数
- Weethee.js などのUserAgent分類器を利用して、リクエストのUserAgent情報を分類
不正アクセス対策:トラフィックの監視とブロック (WAF: CloudArmor)
WAF(Cloud Armor)の設定は、GCLBのバックエンドの設定から簡単に行うことができます。ポイントはポリシーとルールの設定や更新の運用になります。
具体的には、アクセス数が目立って多く悪質なボットなどのIP、もしくは、IPが多すぎるときは国やエリアを特定し、WAFのブロックルールに追加します。ブロックルールは、事前にVPNなどで海外のIPを使って動作テストしてみるとよいでしょう。
結果:作業を通して得たノウハウ
既に本番稼働しているシステムのネットワーク構成を変更し、GCLBを入れるのに苦労しましたが、やはりGCLBは非常に便利で強力です。このGCLBのログをBigQueryに格納して可視化するのは鉄板でやらない手はないでしょう。
ポイント
- インタネットからのトラフィックをまとめるのにGCLBを導入
- アクセスログは、GCLBのログをBigQueryに保存する形で実現
- Webトラフィックの可視化は Metabase を利用(BigQueryに接続できる使い慣れているBIツールで代替可)
- 不正アクセス対策は、GCLBにWAF(CloudArmor)を設定する形で実現
考察
BigQueryに入れたデータの可視化は、何でもいいと思いますが、最近は Metabase を使っています。構築が面倒なので最初は、無料で構築不要のDataStudioに白羽の矢があたることが多いのですが、DataStudioのダッシュボードはメンテナンスされなくなったり使われなくなったものが多いです。なぜそうなるのか、うまく整理できていないのですが。どうしてなのでしょうか?
- GCLB+WAF(CloudArmor)+BigQueryは、すべてのGoogleCloudを使ったサービスユーザにオススメ
- BigQuery+Metabaseは、GA(GoogleAnalytics)や、IssueTrackerのDB、アプリケーションのデータも活用できる。運用チーム、営業チーム、開発チームなどチームを横断したSQLベースのデータ分析基盤として活用できる。
その他
- 時期:2022年1月~3月ごろ
- 規模:15名、サーバ15台
- Google Cloud, Loadbalancing(GCLB), WAF(Cloud Armor), BigQuery, Cloud Logging, Metabase, Weethee.js, MaxMind GeoLite2