前置き
Amazon Inspector 使っていますか?
EC2インスタンスにインストールするエージェント→AWSのエンドポイントへの通信が可能な環境であればホストベースの脆弱性診断ができるサービスです。なかなか注目されづらいサービスですが、数回に分けて深掘りしてみます。
課題
Inspectorを実行するのは簡単ですが、問題はその後。「診断結果をもとにどうアクションするか」がなかなかの悩みどころです。
Inspectorの実行結果はPDFまたはHTML形式でレポート出力することができます。この機能が初めてリリースされたときは「すごい!便利!」と思ったものですが、英語の長大なレポートを毎回見るかと言われると・・・次第に見なくなります。
(事例)How to Remediate Amazon Inspector Security Findings Automatically
AWS Security Blog で紹介されていますが、Inspectorが検出した個々の脆弱性の内容を分析して、セキュリティパッチが当たっていない系の検出だった場合は該当するパッチを自動的にインストールするフローです。
パッチマネージャとかでパッチ状態を管理/適用しているのであれば、場当たり的にパッチ適用するこのフローはちょっとやりたくない気がします。それに、Inspectorが検出するのはセキュリティパッチの適用だけではないです(セキュリティパッチの管理だけをやりたいならパッチマネージャでも代替可能だし)。
なので、やはり人間による何らかの評価/検証プロセスが必要。でもPDFは見たくない。
目指すゴール
- その1 Inspectorの実行結果を、再処理しやすいCSVファイルとして出力する
- その2 Inspectorの最新の実行結果と前回の実行結果の差分(=解消された脆弱性、新たに検出された脆弱性)をレポートする
結局のところ、PDFのレポートを見ていたときも、やりたいことは「ゴールその2」だった気がします。なので、その「判断材料」を自動でサクッと提供してくれるようにするのが最終的なゴールとここでは設定します。
実装の方針
ゴールその1 Inspectorの実行結果を再処理しやすいCSVファイルとして出力する
- Inspectorが検出した脆弱性(findings)を取得する
- findingsをCSVへ出力し、S3へアップロードする
- アップロードしたファイルのPresigned URLを作成し、SNSを介して関係者へ通知する
Inspectorの実行完了をトリガーにLambdaファンクションを実行し、上記の処理を行います。CSVファイルが再処理しやすいか?という指摘があるかもしれませんが、少なくともPDFの英語レポートよりかは…。DynamoDBにつっこむ案もアリですが、後述する分析処理を考慮すると CSVファイル + Athena の組み合わせのほうがやりやすいかと思いました。
ゴールその2 Inspectorの最新の実行結果と前回の実行結果の差分をレポートする
- あらかじめCSVファイルのレイアウトをAthenaに認識させておく
- Athenaのクエリを実行して、今回と前回のInspector実行結果の差分を抽出する
- 抽出した結果をCSVファイルへ出力し、S3へアップロードする
- アップロードしたファイルのPresigned URLを作成し、SNSを介して関係者へ通知する
CSVファイルのdiffを取るだけでもいいんですが、ここではAthenaを使ってみます。
Lambdaファンクションの中でAthenaのクエリ処理を実行します。