インプルの堀江@2児の父です。
最近娘(6歳)がスマホの音声入力でGoogle画像検索することを覚えました。うちのオカンよりもうスマホ使いこなしてる。すごい。
早速ですが、皆さんはWebサービスの監視やってますか?
規模が大きくなればなるほど監視の仕組みは当たり前のように導入しているものですが、規模の大小関係なく監視はした方がいいです。それを実感させられた過去の失敗談を記事にして、監視の重要性をみなさんに共有したいと思います。
※本記事の内容は、私がインプルに入社する前にいた会社での出来事です
起きたこと
- あるWebサービスを運営している
- ある日他部署の社員から「あのサービス、ログインできなくなってるよ」と連絡があった
- 調べてみると、認証を行うAPIサーバーのCPU使用率が常に一定以上でビジー状態になっていた
原因は?
- APIサーバーがKinsingというマルウェアに感染していた
- これによってサーバー負荷が上がりっぱなしになり、ログイン処理がさばけない状態になった
- APIサーバーはLaravelで開発をしており、Laravelの環境設定ファイルに設定ミスがあったことが直接原因(この設定ミスでセキュリティホールがうまれた)
マルウェアの感染に気づいた時「は・・・?」となったのを今でも鮮烈に覚えています。こういう状況を経験するのが初だったのと、私1人で開発、保守・運用していたサービスだったため、自力解決しなければいけないプレッシャーがありました。
いつからそうなっていた?
- サーバーのCPU使用率推移を見ると、問題が発覚した2日前から異常な状態になっていた
- 環境設定ファイルのミスもいつからそうなっていたか分からず、長期間設定ミスのままになっていた可能性があった
この経験を通じて気づいたこと
- 監視の仕組みを入れていれば、過負荷状態になった時点で異常に気づくことができ、早く対処できた
- セキュリティホールがある状態になっていたことにずっと気づけなかったのも問題
- 設定ミスに限った話ではないので、異常にいち早く気づける仕組みを優先しよう
なので監視は必ずしましょう!
AWSならCloudWatch、Google CloudならCloud Monitoringといったモニタリングをするためのサービスが必ずあるので、サーバー構築とセットでおさえておきたいところ。CloudFormation、Cloud Deployment Managerを活用してテンプレート化することで、監視漏れを防ぐことにも繋がります。
監視をする仕組みは他にも色々あり、その中でも
- 死活監視:UptimeRobot
- エラー監視:Sentry
こういった既存のサービスを活用することで、異常にいち早く気づくことができます。特にSentryはスマホアプリ、フロントエンドの異常検知に役立つので、使いこなせるといいかもです。
今回の例でいうと、設定ファイルの異常検知もできるとなお良しですね。
あとがき
余談ですが、今回経験したトラブルは下記の記事のおかげで解決することができました。
laravelのヤバい脆弱性をついたkinsing(kdevtmpfsi)というマルウェアに感染した話 CVE-2021-3129 (Qiita)
対処法を記事にまとめてくださった方、マジ感謝です。この記事のおかげで障害対応を迅速に終わらせることができました。本当にありがとうございました。
※
本記事のアイキャッチ画像は、Canvaのマジックスタジオを使用して生成しています。