無理なく Amazon Inspector と付き合う
はじめに
お久しぶりです、最近は SRE として活動をしている満江です。
今回は Amazon Inspector から定期的に検出される脆弱性を、無理なく継続的に運用するための仕組みを紹介したいと思います。
負債と課題
単に Inspector を導入して満足してしまうと、誰も脆弱性対応を行わず、コストだけが発生する負債となってしまいます。
かと言って、Inspector が脆弱性を検知する度に Slack 通知を飛ばして全て対応させるのも非現実的です。
開発者は他にもやらなければならない業務が山積みなはずです。
実際問題、ついこの間まで脆弱性が検知される度に Slack 通知を飛ばして各チームに脆弱性対応をお願いしていたのですが、チームによって進捗はバラバラで、中には対応に手が回っていないチームも存在しました。
更に対応できないだけでなく、「休日や深夜に通知がくる」「重複した脆弱性が通知されるため量が多く見える」といった精神的負担が発生してしまいました。
構成を見直す
弊社では週に1回、「脆弱性定期確認会」を各チームの代表と私で行なっているため、幸いにも上記の課題や不満は早期に発見することができました。
この確認会では脆弱性対応の進捗や各チームの悩み・不満などを共有し、脆弱性対応の運用フローそのものを改善することが目的です。
今回の内容はある程度の改善を行えば解決できそうと判断したため、早速取り掛かりました。
Before
関係ある部分だけ抽出するとかなり簡素な感じになりましたが、改善前は上記の構成でした。
Inspector から検出された脆弱性はまず Security Hub へ集約されます。
Security Hub へ脆弱性が通知されたことを EventBridge が検知して、Step Functions と SNS へイベントを流します。
Step Functions では Security Hub のワークフローステータスを NOTIFIED に更新する役割を担っています。
また、この Event Bridge はワークフローステータスが NEW のレコードのみ発火するため、SNS を経由した重複通知を排除できると踏んでいました。
しかし ECR のイメージに対してスキャンを行う場合、1つの脆弱性でもイメージが異なれば新規の脆弱性として Security Hub に集約されるため、イメージをデプロイする度に同一の脆弱性が通知されてしまいます。
さらに Inspector が CVE を追加する度にスキャンが走るため、休日深夜問わず Slack 通知が行われる状態でした。
After
改善後の構成では Lambda を2つ、DynamoDB のテーブルを1つ追加しています。
脆弱性が検出されると EventBridge から Store Lambda を起動します。
この Lambda ではすぐに Slack 通知を行わず、一旦 DynamoDB に脆弱性情報を格納します。
この時 DynamoDB の Primary Key で重複した脆弱性を排除しており、新規の脆弱性が格納された場合のみ JIRA の Issue を作成します。
その後毎朝 10:30 に EventBridge Scheduler が1度だけ Notify Lambda を起動します。
この Lambda では脆弱性情報が格納されている DynamoDB Table から、まだ通知が行われていない脆弱性のみ取得し Slack へ通知します。
通知が完了すると DynamoDB に格納されている脆弱性のステータスを NOTIFIED に更新します。
何が良くなったのか
まず当初の課題であった下記2点は解決することができました。
休日や深夜に通知がくる
重複した脆弱性が通知されるため量が多く見える
更に下記の恩恵も受けることができました。
一度にまとまった通知を送るため、受け取り側の負担が減少した
サービスごとの脆弱性対応スピードが可視化できるようになった
Issue 作成の手間が無くなった
Slack 通知のメッセージのカスタマイズ性が向上した
(今まで EventBridge の入力トランスフォーマーで頑張っていました…)
さいごに
構成の改善も重要ですが、見直すきっかけとなった「脆弱性定期確認会」の重要性を改めて感じました。
SRE としてどれだけ良いサービスを導入しても、それを開発者が気持ちよく利用できないと意味がありません。
脆弱性の対応も強制させるのではなく、チームにセキュリティの意識を持ってもらうことが大切だと思っています。
そのためには定期的に率直なフィードバックを貰い、SRE から歩み寄ることを忘れないよう精進します。
今後も様々な取り組みを発信していくので、引き続きよろしくお願い致します!!
この記事が気に入ったらサポートをしてみませんか?