【Inspector】Lambda関数の脆弱性スキャン結果をSlackへ通知させてみた

この記事は、「[Relic Advent Calendar 2022](https://qiita.com/advent-calendar/2022/relic)」の8日目の記事です！

# はじめに
re:Inventでリリースされたサービスを試してみる第3弾はセキュリティで有効化必須の「**InspectorによるLambdaの脆弱性スキャン**」になります。設定的にはコンソールをクリックして機能を有効化するだけ完了するもので、それだけですと物足りないので実際に脆弱性スキャンさせてSlackへ通知させるところまで確認してみようと思います。

第1弾はこちら→[【re:Invent】Amazon EventBridge Pipesの検証と今後について](https://qiita.com/hedgehog051/items/3479d4fec43d01fd30f1)
第2弾はこちら→[【完全に】統合型DevOpsサービス「Amazon CodeCatalyst」【理解した】](https://qiita.com/hedgehog051/items/4a8cc0e03e0252e0087e)

# Inspector v2
Inspectorは2021年11月にv2へとバージョンがあがり、以下の機能が追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2021/11/amazon-inspector-continual-vulnerability-management/

- Snykと提携することで脆弱性データベースに脆弱性インテリジェンスが追加
- AWS Organizationと統合
- Amazon EventBridgeと統合
- SecurityHubとの統合
- 脆弱性管理の自動化
- ECRのアドバンスドスキャン対応
- SSMエージェントでEC2の脆弱性スキャン対応
    - 以前はInspectorエージェントが必要だった

# InspectorのLambda脆弱性スキャン対応
そこに更に今年のre:InventではLambdaへの対応が発表されたことにより更に対応範囲を広げた形になります。

https://aws.amazon.com/jp/blogs/aws/amazon-inspector-now-scans-aws-lambda-functions-for-vulnerabilities/

Lambdaへの脆弱性スキャンは以下の機能を持ちます。

- 対応ランタイム(2022年現在)
    - Java、Node.js、Python
- エージェントレス
- スキャン対象
    - Lambda関数およびレイヤー
- スキャンタイミング
    - Lambda関数の作成時
    - Lambda関数の更新時
    - 新たな脆弱性が公開された時
        - ([CVE](https://cve.mitre.org/))

このアップデートによりLambdaのデプロイ時だけでなく、**継続的にCVEをチェックし自動的に再スキャン**してくれるのでよりアプリケーションの安全性を維持することが容易になりました。
     
# Lambda脆弱性スキャンの有効化
※Inspector自体は既に有効化されている前提
- Inspecotrのナビゲーションペインより`設定`->`アカウント管理`を選択
- `アカウント`タブより有効化したいアカウントIDをクリック
- `有効化`をクリック

![スクリーンショット_2022-12-07_21_00_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/48c986cf-6baf-ad60-a56d-27a6790359e8.png)
- `Lambda標準スキャン`をクリック
![スクリーンショット_2022-12-07_21_00_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/b4817435-2f7f-9a3e-4dad-db0c7da147f3.png)
- ステータスが`Enabled`になることを確認
![スクリーンショット_2022-12-07_21_07_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/66e9df1f-bb7d-8c4d-7dcd-bcf3460a192f.png)

# スキャン結果確認
## カバレッジ
Lambda関数がそれぞれスキャンされてカバレッジが表示されました。
このSandBox環境ではLambda関数が計151個あり、その内スキャンがサポートされているランタイムでの関数が144個、残りは未サポートのランタイムによる関数ということが分かります。
![スクリーンショット 2022-12-07 21.09.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/909ea832-9e3d-c993-142c-d68ef14953e6.png)

## 検出結果
- `検出結果`->`Lambda別`でLambda関数毎の検出結果を参照する事が出来ます。
このSandBox環境では昔検証で作成されたLambdaに脆弱性が検出されておりました。
![スクリーンショット_2022-12-07_21_15_32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/6ceacb7b-e664-2095-00e3-8e9005f3f386.png)

# Slackへの通知
EventBridgeでInspectorからの検出結果をトリガーに通知させることも可能ですが、より一般的なSecurityHubと統合した状態で通知させたいと思います。

![スクリーンショット 2022-12-07 23.06.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/06048189-3644-59fc-a8f5-fb0d357373d1.png)

## SecurityHub有効化
- SecurityHubコンソールへアクセスして、任意のセキュリティ基準にチェックを入れ`Security Hubの有効化`をクリックする
![スクリーンショット_2022-12-07_21_39_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/11a54c5f-813c-673f-e285-09028fa70f48.png)

- SecurityHubを有効化すると各AWSサービスと自動的に統合されます。
## 統合の確認
- SecurityHubのナビゲーションペインの`統合`を選択して、Inspectorのステータスが`結果を受け入れます`と表示されていることを確認
![スクリーンショット_2022-12-07_21_31_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/8b748798-b277-3fd1-0092-17e2b3e6ef6a.png)

## EventBridge設定
- EventBridgeにてルールを以下のイベントパターンで作成
- 今回は重大度評価がMEDIUM以上を通知対象とします
- ルールのターゲットにChatbotに紐付いているSNSを指定
※EventBridgeやSNS、Chatbotとの連携については↓などを参考にしてください

https://aws.amazon.com/jp/blogs/news/monitor-amazon-eventbridge-events-in-your-slack-channels-with-aws-chatbot/

※Inspectorは、NVD/CVSSスコアを脆弱性の重大度スコアの基準として使用しております。
トリガーとする重要度を変更したい場合は下記を参照してください。

|Score|Rating|
|---|---|
|0|INFORMATIONAL|
|0.1–3.9|LOW|
|4.0–6.9|MEDIUM|
|7.0–8.9|HIGH|
|9.0–10.0|CRITICAL|

```json
{
  "source": ["aws.securityhub"],
  "detail-type": ["Security Hub Findings - Imported"],
  "detail": {
    "findings": {
      "ProductName": ["Inspector"],
      "Severity": {
        "Label": ["MEDIUM","HIGH", "CRITICAL"]
      }
    }
  }
}
```

## 通知の確認
- 脆弱性が検出された関数のソースコードを改行を加えるなどして更新
- Slackへ通知が飛ぶことを確認

特に疑っていませんでしたがちゃんと通知が飛んで来ました。
![スクリーンショット_2022-12-07_22_03_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354022/186b0780-874f-d87a-d5a9-e1ed6af95be7.png)

**今回の検証に利用したLambda関数は特に使っている様子がなかったので最後に削除しました。**

# 料金
Lambda関数の脆弱性スキャンは継続的に評価されることから、毎月のコストは1ヶ月あたりにスキャンされるLambda関数の平均数をベースにInspectorの総カバー時間に基づいて比例配分となります。

|条件|価格|
|---|---|
|スキャンされるLambda関数の平均数/月|$0.36/Lambda関数|

※15日間の無料トライアル有り

## 例
1ヶ月スキャンされたLambda関数: 20個
10日間だけスキャンされたLambda関数: 10個
20 * 0.36ドル + 10 * 0.12 = 8.4ドル 

# おわりに
スキャンだけならほぼワンクリックで、今回使用したSecurityHubやEventBridge、Chatbotを活用した仕組みが既に用意されてる環境では変更なく検出結果通知を受け取る事が出来るので是非積極的に取り入れていきたいですね。

ご自身の環境で使用しているLambdaランタイムが今回のアップデートでサポートされているものであれば是非導入を検討してみては如何でしょうか。

# 参照
https://docs.aws.amazon.com/inspector/latest/user/findings-understanding-severity.html

https://www.first.org/cvss/specification-document