Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

Classiで発生した2つの問題を繰り返さないために我々が取り組んでいること

はじめに

こんにちは、Classiの佐々木(@sasata299)です。前回の投稿からだいぶ間が空いてしまい、季節はすっかり秋になってしまいました。

この期間、Classiでは外部の攻撃者による不正アクセス(4月)があり、また、サービスの高負荷によるアクセス障害(4月・5月)が続くなど、利用者の方々には多大なるご心配とご迷惑をおかけしました。この9月までClassiのCTOとしてサービスとお客様に向き合ってきた立場として、改めてお詫びを申し上げます。

本記事では、この2つの問題について改めて振り返りると共に、当時の状況と今我々がどのように対策を進めているのかについてお伝えします。
(※当社のCTOの変更については、後日改めて記事を出す予定です)

外部の攻撃者による不正アクセスが発覚(4月)

「Classi」は、学校現場の多様なシーンで活用されるクラウドサービスです。スマートフォン・タブレット・PCなどのデバイスを問わず利用でき、先生・生徒・保護者をつなぐサービスとして、主に高校(一部中高一貫校を含む)を中心にサービスを提供しています。

「Classi」は、4月5日(日)夕刻に予期しない事象が発生し、緊急でサービスを停止しました。不正アクセスの疑いを含めて調査を開始し、外部専門会社の協力も得てログの解析等を行ったところ、外部の攻撃者により不正アクセスが行われていたこと、この不正アクセスにより閲覧された可能性(のちに漏洩であることが判明)のある情報の範囲とその内容が11日(土)に確定し、13日(月)に全国のお客様に対して公表しました。

高負荷によるアクセス障害が発生(4月・5月)

3月から4月にかけては、新型コロナウイルスの感染拡大に伴い、全国の小中学校と高校、特別支援学校への臨時休校要請もあり、「Classi」の採用校も一斉休校となりました。 皆さんご存知のとおり、Beforeコロナの学校はほぼオフラインが前提でした。それが突然、学校は休校となり、オンラインにて学校運営を行わざるを得ない状況となりました。

当時、学校現場やそれを支援する企業側でどのようなことが起きていたのかについては、多くの先生方やメディアが発信されているので、そちらをご覧いただければと思います。


一方、「Classi」を導入している学校では、普段から学校と保護者との連絡や課題提出などがClassi上で行われ、比較的スムーズにオンラインを活用した学校運営に移行できたという声をいただきました。

しかし、このコロナ禍でのサービス運営は、我々にとってもサービス開始から約6年の間に経験をしたことのない未曾有なものでした。3月以降、特に春休みが明けて1学期が始まった4月・5月には、全国規模で一斉に先生・生徒・保護者が「Classi」を利用されるようになりました。

この頃から、「Classi」の校内グループでの毎朝の連絡、学習記録での振り返りをきっかけとしたコミュニケーション、課題の提出などでの利用が大きく増え、またアンケートを使った体温調査が行われるなど、通常時とは異なる使い方が見られました。我々もリクエストが増えることはもちろん想定していたものの、想定を大きく上回る、ユーザー数で3倍、リクエスト数で7倍となったことで、4月・5月には慢性的につながりづらい状況を引き起こしてしまいました。

f:id:sasata299:20201022115225p:plain
あるサーバのリクエスト数の推移(2月1日〜5月25日)


Datadog等を見ながら負荷となっている箇所の改善を日々進めていましたが、ボトルネックとなっていた箇所を改善すると次のボトルネックが発生するという状況で、少しずつ改善はするものの根本的な解決には至らない、、、本当に苦しい日々が続きました。自分たちのプロダクトにも関わらずコントロールが効かない、まるでコントロールを失った飛行機を操縦しているような、そんな絶望的な感覚でした。

なんとかこの危機的状況を改善したいと、毎日のように社内で対策を検討し、パフォーマンスの改善はもちろん、負荷となっていた部分の機能を一部止めたり、「Classi」本体のサービスとは切り離した代替機能を準備したりと全社一丸となって全力で対応にあたっていました。

6月以降の動き

6月以降は、つながりづらい状況を引き起こす根本的な原因の調査と、その解決に向けて動く社内体制の構築を急ピッチで進めていきました。これを社内では「再建プロジェクト」と呼んでいます。

6月に入ると徐々に休校が解除となり、分散登校や時差通学などで学校への登校が再開され、リクエスト数も落ち着いてきました。安定してご利用いただける状況となったのですが、今後また休校などによってリクエストが大きく増えた際にもサービスを安定してご利用いただけるように、7月以降は「再建プロジェクト」と「セキュリティ強化」を最優先で進めています。

セキュリティ強化では、既報の外部の攻撃者による不正アクセスの再発防止策(4月時点で実施済み)に加え、より安心・安全なサービスを提供できるよう、さらなるセキュリティ強化策について検討、実施しています。4月の不正アクセスと直接関連するものではありませんが、潜在的なリスクを減らすために、フレームワークやライブラリのアップデート、ネットワーク構成の見直しなども進めています。

再建プロジェクトでは、まず現状の分析からはじめ、技術的な課題やつながりづらい状況を引き起こした組織的な課題を一つひとつ明らかにすることからはじめました。その結果、組織的な課題として、チームの責任範囲が明確でないことや、一部のリポジトリのメンテナンス責任が曖昧、といったことが根本的な原因の一つとして浮かび上がってきました。

体制変更

一つのひとつの現象と根本的な原因を丁寧に分析し、その結果に対して、適切に遂行できるよう社内の体制も変えました。

7月からは、動作しているすべてのコードに対して、チームの責任範囲を明確にしました。また、技術的な課題をそれぞれのチームの責任において改善するような動き方にも変えました。やるべきことが明確(「再建プロジェクト」と「セキュリティ強化」が最優先)で、かつ、チームが主体となって意思決定する形にしたことで、現在は各チームが担当する機能やリポジトリをしっかりとメンテナンスしていく、そんな体制になってきたと思います。

その形をより強化するために、また、やるべきことを今後もぶらさないために、「技術的負債を適切にコントロールする」「技術的な意思決定を行う」ことを責務として、10月からは各チームにテックリードを置く形に変えました。各チームのテックリードが目を光らせることで、健全にメンテナンスしていける仕組みを作りたいと思います。

これらは一例ですが、今後も間違いなく課題は出てくるでしょう。いわゆる銀の弾丸はないので、プロダクト同様、組織についても少しでも良い形にできるように改善を続けていきます。

終わりに

「Classi」は、サービスの提供から約6年で、日本中の高校の半分以上、高校生の3人に1人に使っていただく、いわばライフラインとも言えるサービスにまでなりました。今現在も多くの学校、そして家庭で、先生・生徒・保護者の方々にご利用いただいています。

ユーザーの皆さんに、本当に使いたいときに当たり前に使っていただける。今回振り返ってみて、まず我々がやるべきことは、安心・安全なサービスを、安定して提供することだと改めて強く感じています。そのためにも、引き続き、全社一丸となって「再建プロジェクト」と「セキュリティ強化」をしっかりと進めていきます。

© 2020 Classi Corp.