こんにちは、minne事業部の@nissyiです。minne事業部では、Web/Mobileエンジニアを対象にインシデント対応演習を実施しました。今回はその演習についてお伝えします。
インシデント対応演習とは?
GMOペパボでは年に一度、インシデントの対応力向上を目的とし、インシデント対応演習を実施しています。検証環境でインシデントを引き起こし、検知から障害・脆弱性への対応、各関係向への報告、事態の収束まで一連の流れについて実際に取り組みます。
演習の内容について
今回は、「GraphQLの認証・認可に脆弱性があり、情報漏洩につながった」というシナリオで演習しました。演習を実施するには、擬似的なインシデントを引き起こす必要があります。そのために、minneで使用しているプログラムを調査し、検証環境のコードに脆弱性を仕込み、攻撃者のように振る舞って攻撃を仕掛けました。
その結果引き起こされた擬似的なインシデントに対して、@nissyi以外のWeb/Mobileエンジニアがインシデント対応にあたりました。
今回の演習の狙い
演習を実施するにあたって、「演習を実施することで、minneの開発者全員がどう成長してほしいか?」という観点で題材を考えました。演習の準備を進める際に上長の @ebihara99999 にアドバイスをもらっていたのですが、真っ先にもらったアドバイスが先述の観点を持つことでした。
2024年3月現在、minneの新規のAPIはGraphQLで実装しています。また、既存のRESTishなAPIに関してもGraphQL化を推進しています。GraphQLで実装をするにしても、自分を含めチームのメンバーがGraphQLの認証・認可について理解が浅いのではないか?という課題を感じていたため、それをメインの題材として選択しました。
また、サブの目的として「演習を演習として活用し、普段は挑戦しにくいことにも挑戦してもらう」ことを考えていました。実際のインシデント対応中には、一刻も早く対応・復旧する必要があるため、何かに挑戦しようとしても、心理的なハードルが邪魔してアクションしづらい状況が発生しがちです。演習ならば失敗しても実害は発生しないので、失敗を恐れずに挑戦してもらい経験値を積んでほしいという思いを抱いていました。このサブ目的を達成するために、エンジニアの等級・習熟度・専門のプラットフォームなどを勘案してチームを構成し、2チームに分かれて演習に臨んでもらいました。
参加した感想や学び
yumu
昨年ペパボに新卒入社し、今年1月にminne事業部に配属された@yumuです。インシデント対応演習への参加は今回が初めてで、実際のインシデント対応の経験もほとんどない状態で演習に参加しました。
演習で感じた悔しさ
演習では、チームのメンバーそれぞれがやったことのない役割にチャレンジしようということで、私はハンドラーを担当させてもらいました。ペパボにおけるハンドラーとは、インシデント対応の中心となり、他のメンバーに役割(連絡・書記・調査など)を割り振ったり、状況整理を行う人のことです。しかし、私はハンドラーの役目を把握できておらずあたふたしてしまい、結局は他のメンバーにリードしてもらいました。ハンドラーとして十分な役割を果たすことができず悔しかったです。
インシデントの調査に関しては、チームメンバーが役割分担をして調査に臨めたことは良かったです。一方で、時間内に原因究明や対応策の実施までは到達できませんでした。調査を進める上で確認したい管理画面の権限を持っていない、ユーザーの行動ログから欲しいデータを取得するためのクエリを書くのに手間取るなど、知りたいことにたどり着くまでの過程で時間がかかってしまっていました。私たちのチームはインシデント対応経験が少ないメンバーが多かったので、経験不足を感じました。
演習を経て意識が変わった
今回の演習を経て、インシデント対応に対する当事者意識が芽生えたことが大きな収穫だったと思っています。配属直後ということもありインシデント対応には徐々に慣れていけばいいという甘えがありましたが、自身の力不足を痛感したため、演習以降はインシデント対応に積極的に参加し、他のメンバーの対応や調査方法を見て学ぶようにしています。また、インシデントが復旧した後も「もう大丈夫」と安心せず、その原因を深く理解し、再度似たような事象が起きた場合、どのように対応するかを自分なりにシミュレーションするようにしています。
yanagi
Webエンジニアとして未経験でペパボに入社し、早いもので2年が経った@yanagiです。実際のインシデント対応にも普段から主に調査メンバーとして関わり、少しずつ経験を積んでいるところです。 演習をやる前は、正直なところ「インシデント対応は日々の業務で経験しているので、演習で得るものは少ないかも」と考えていました。しかし、実際に演習を行ってみると、多くのことを学び、チャレンジできたことがあり、とても有意義だったと感じています。
演習でよかったことは以下の通りです。
本番よりもチャレンジがしやすい環境
私は普段のインシデント対応ではハンドラーを務めたいと思いつつも、なかなか手を挙げられずにいました。今回の演習では、本番と同様に進行しましたが、何か失敗してもユーザーに影響がありません。この機会を利用してハンドラーに挑戦しました。
演習中は普段ハンドラーをやっている方達にサポートをもらいつつ、チームの方にも主体的に調査を進めてもらったおかげで、なんとかハンドラーとしてインシデントの調査を進めることができました。
演習中はハンドラーの役割である状況の整理や調査メンバーの人員の振り返りなどに苦戦しましたが、演習後の振り返りで「進行がスムーズ」だったとフィードバックをもらうことで、挑戦してよかったと感じました。 また、振り返りで「ハンドラーは調査メンバーと比べて手を動かしていないのでやってる実感がなかった」という感想を共有したところ、「それはハンドラーあるある」との反応があり、共感を得られました。 なにより、演習のチームメンバー全員が自主的に調査を進めてくれることがとても頼もしかったので「ハンドラーってそこまで大変じゃないのかも」と思えたのが今回一番の収穫でした。
去年の演習と比べることで成長が実感できる
去年も同様の時期にインシデント対応演習を行いましたが、その時は反省点も多くありました。 というのも、去年の演習では発生している事象の原因の調査を最初に全員総掛かりで進めてしまい、動線を塞いで被害の拡大を防ぐ対応が後回しになってしまったためです。
今回の演習では、事象が発覚した後にまず動線を塞ぎ、それから影響調査・根本解決という流れで進めることができました。これは去年の演習の反省点のおかげでもあり、またこの一年で実践を通してのチームの練度が上がった証拠でもあります。
このように定期的な演習は、前回と比べた成長を感じることができるというメリットがあると感じています。
インシデント対応のその後にいい影響があった
先ほども書いたように、私は以前よりインシデント対応でハンドラーを担当する機会が増えました。 さらに、今回のインシデント演習のテーマだったGraphQLの認証・認可を正しく設定することの重要性が以前より共通認識となったと実感しています。
saki-htr
昨年2月に実務未経験からWebエンジニアとして入社し、約1年経った@saki-htrです。インシデント対応演習への参加は今回が初めてです。実際のインシデント対応にも普段から参加していますが、解決に必要な調査を自ら判断して行うことができていないため、調査力・対応力を上げたいと思い今回の演習に臨みました。
積極的に発言・調査することができた
本番のインシデント対応では、現状復帰を目的としてスピード最優先で動くため、経験豊富なエンジニアがどんどん調査を進め、仮説を立てて議論が進むため、私はその理解に追いつくのに精一杯な状況でした。しかし演習では、等級やインシデント対応のスキルが近いエンジニア同士が同じグループに分けられたため、「XXを調査すれば△△が分かるのではないか」「XXが原因ではないか」と積極的に発言したり、自ら判断して調査にあたることができました。
また、今回私のグループではインシデントの原因解明・復旧まで至ることができなかったのですが、「対応するエンジニアが原因解明して復旧させることができなければ、インシデントはずっと発生したままの状態になってしまう」ということを痛感しました。演習の振り返りで、シニアエンジニアの先輩から、「インシデント対応は1人で対応に当たっていると思ってやってほしい」とアドバイスいただき、オーナーシップをもっと上げて対応にあたらなくてはと改めて思いました。
演習後、インシデント対応できるように具体的なアクションをとることができている
演習参加後、インシデント対応への当事者意識が芽生え、
- インシデント発生時、調査に手を挙げるのが難しい時はハンドラーに手を挙げる
- 「XXの調査誰かお願いできますか?」と言われた時は、調査方法がよく分かっていなくても、できることを増やすためにとにかく手を挙げる
- ポストモーテムを読んで振り返りをし、似た事象が発生した際対応できるようにwikiを作成する
といった具体的なアクションをとるようになりました。
主催者視点での感想
再び@nissyiです。主催者として今回の演習を振り返ります。
まずは、「演習を活用し、インシデント対応の経験値を積めたこと」がとてもよかったと思っています。上記「今回の演習の狙い」で書きましたが、演習の中で経験値を積んでもらうことを目標の一つとしていました。普段は挑戦できていない役割への挑戦や、Web/Mobileといった垣根をこえて演習に望むことで、チーム全体の対応力が向上しました。
そして、「演習の実施は非常に難しい」ということも感じました。題材の選定から、当日の動きや演習後の振り返りまで多くの準備をしなければなりませんでした。当日には想定外の質問やバグが発生することもあり、リアルタイムで判断しながら、質問の回答を行い、2チームの動きを確認しながら全体の進行を管理する必要がありました。事前に脳内シミュレーションはしていたものの、それでは到底追いつかないほどの情報を処理しなければなりませんでした。
それでも、演習後には「演習の内容がとてもよかった!」「勉強になった!」といった声をかけてもらい、心の底から嬉しい気持ちになりました。何事もなく演習を終えるまでサポートしてくれた他のエンジニアたちにとても感謝しています。
さいごに
今回はminne事業部のインシデント演習についてお伝えしました。ユーザーの皆さんに安心してminneをご利用いただけるよう、エンジニアたちは日々研鑽に励んでいます。これからも安心なminneを作り上げていくために、切磋琢磨していきます。こんなペパボのエンジニア職に興味がある方は、ぜひ以下の採用ページをご覧ください!