工数を掛けずに継続的なアプリの脆弱性診断をTrivyで実現した話


こんにちは!CARTA COMMUNICATIONS でエンジニアをしている r-ikoma です!
Trivyを導入することで苦労することなく、セキュリティ診断が可能になります!

Webアプリを成長させたい立場の心情としては「開発を効率化させるための便利なライブラリは導入したい。でも、その脆弱性を常に追い続けることに時間は掛けたくない」ところです。
Trivy を導入することでその辺りが楽になります!

Trivy はコンテナイメージ等に対して、導入しているライブラリの既知の脆弱性を発見してくれるスキャナーになります。(例えばhttpリクエストに使用してるaxios に問題が見つかった!など)
Amazon ECRとGitHubを利用していればざっくり下記のようなの構成で Trivyの診断が活用できます。
開発者がソースコードをプッシュするとdockerイメージがビルドされ、ECRにプッシュされます。そのイメージに対してTrivyが脆弱性診断を実施します。

診断の流れ

GitHubを活用していれば、 dependabot による脆弱性の発見が可能ですが、
コード変更をきっかけに診断が実行されることで、開発工程のなかで問題に必ず気づけることに優位性を感じて、今回 Trivy を導入しました!

ということで

  • Trivyの導入方法
  • Trivyの導入結果
  • Trivyの柔軟な設定

に関して書いていきます!

Trivyの導入方法

必要な作業は Gtihub Actions のジョブのステップの一つとして下記を追加するのみです!
severityなどオプションはプロジェクトの方針に応じて適宜設定しましょう。
※usesに指定してあるmasterの部分は適宜公式を参照して安定稼働しているものを活用しましょう。

    - name: Run Trivy vulnerability scanner
      uses: aquasecurity/trivy-action@master
      with:
        image-ref: ${{ steps.build-image.outputs.image }}
        format: "table"
        exit-code: "1"
        ignore-unfixed: true
        vuln-type: "os,library"
        severity: "CRITICAL,HIGH"

GitHub Actionsを利用したCI/CDの過程でTrivyによる脆弱性診断を行い、脆弱性が見つけられた場合は処理を中断するようにしています。

Trivyの導入結果

実際にTrivyを導入し運用を進めていく上で、必要な機能を開発してリリースを行うサイクルの中で見過ごしがちな、ライブラリのアップデート漏れによる脆弱性レベル高の問題を検知することが出来ました。

Trivyの柔軟な設定

ライブラリに対して、脆弱性が見つかっているもののパッチが公開されていないものに関して
(運用上クリティカルな問題になりえないか判断は慎重になる必要はあるが)デプロイを優先したい場合には、チェックを無視するなどの設定も可能です。
Vulnerability Filtering - Trivy


以上、簡単な設定のみでセキュリティ診断ができるTrivyの紹介でした!
ありがとうございました。