FutureVulsとTrivyでAWS CodePipelineのCI/CDに脆弱性検知を組み込む

devops

はじめに

皆様こんにちは。20年ぶりに再開したスノーボードにハマっている「たけし」です。

この記事では、現代のソフトウェア開発におけるDevOpsの重要性について掘り下げます。具体的には、コンテナ技術、CI/CDパイプライン、そしてセキュリティというDevOpsの3つの主要な柱を取り上げ、これらがどのように統合され、ソフトウェア開発の効率と品質を向上させるのかを解説します。
また、FutureVulsとTrivyとの連携を事例に、実際の脆弱性管理がどのようにCI/CDプロセスに組み込まれているのかを学べます。さらにTrivyとFutureVulsと連携するメリットを解説します。

DevOpsの変貌: コンテナ技術とCI/CDの融合

現代のソフトウェア開発において、DevOpsはすでに定着した概念です。しかし、その実践方法は絶えず進化しており、特にコンテナ技術とCI/CD(Continuous Integration/Continuous Deployment)の組み合わせが、この分野を大きく変えています。コンテナはアプリケーションの開発と配布をより柔軟かつ効率的にし、CI/CDはプロセスを自動化して迅速化します。

DevSecOpsの台頭: 脆弱性管理の重要性

DevOpsにセキュリティの要素を追加したDevSecOpsも、既に主流となっています。DevSecOpsの重要な要素として、脆弱性管理をCI/CDパイプライン中で実施することが挙げられます。従来はソフトウェア開発の後半部でのみ考慮されるセキュリティが、現在は開発の初期段階から組み込まれています。これにより、セキュリティ問題は早期に特定され、迅速かつ低コストで対応できるようになります。このアプローチは「Shift Left」として知られており、セキュリティを開発ライフサイクルの初期に移動させます。

FutureVulsとの連携: 脆弱性管理の進化

FutureVulsではDevSecOpsの一環として、GitHub ActionsのCI/CDパイプラインにTrivyを組み込む方法を以前より推奨してきました。この方法では、CI/CDパイプライン中でビルドされるコンテナイメージに含まれる脆弱性を検知し、検知した脆弱性情報をFutureVulsに連携して脆弱性を管理できます。

FutureVulsのメリット

TrivyのようなツールはNVDや各種情報ソースで定義された、脆弱性のそのものの「深刻度」を表示しますが、FutureVulsとの連携により、さらに多くのメリットがあります。FutureVulsは独自で収集した様々な情報をもとに、SSVCによる自動トリアージ機能を用いて、対応優先度をシステムが自動判断します。さらにタスク管理機能と連動し、「優先度」や「対応期限」を自動設定し、運用者への対応指示まで自動化します。

参考:

また、AWS、GCP、GitHub、オンプレ環境等、社内の色々なところに別々に構築されたCI/CDパイプラインの脆弱性の検知結果をFutureVulsに集約することで一元管理できます。CSIRT部門はFutureVulsを利用して社内の大量にあるシステムの脆弱性を横断的に閲覧し、危険な脆弱性の一括注意喚起や、期限切れタスクの一括対応指示等、日々の業務をFutureVulsで効率的に実施できます。

AWS CodePipelineの統合

最近、GitHub Actionsに加えて、AWS CodePipelineの環境で使用するサンプルファイルをヘルプに追加しました。以下のbuildspec.ymlをリポジトリに追加し、環境変数やシークレット変数を設定することで、FutureVuls連携の初期設定が完了します。AWS CodeCommitにGit pushされた際にDockerイメージをビルドし、その中の脆弱性をTrivyが検知します。結果はFutureVulsに連携され、脆弱性の自動トリアージとタスク管理に繋がります。

pipeline

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: 0.2

#env:
# variables:
#VULS_SAAS_GROUPID: "define in secret manager"
#VULS_SAAS_TOKEN: "define in secret manager"
#DOCKERFILE_PATH: "./Dockerfile"
#TARGET_IMAGE: "target_image:tag"
#VULS_SAAS_UUID: "xxxx-FutureVuls-Server-UUID-xxxxxxxx"
phases:
install:
runtime-versions:
python: latest
build:
commands:
- 'docker build -t $TARGET_IMAGE .'
post_build:
commands:
- 'curl -s https://installer.vuls.biz/vuls-trivy-light.sh | VULS_SAAS_GROUPID="$VULS_SAAS_GROUPID" VULS_SAAS_TOKEN=$VULS_SAAS_TOKEN TARGET_IMAGE=$TARGET_IMAGE VULS_SAAS_UUID=$VULS_SAAS_UUID bash -s inst'
- "echo scan results Sent to Fvuls on `date`"

まとめ: DevOpsからDevSecOpsへの進化

この記事では、DevOpsの現代的な進化としてコンテナ技術とCI/CDの統合、さらにセキュリティの重要性が高まるDevSecOpsへの移行を見てきました。DevOpsの枠組み内でセキュリティを組み込むことは、脆弱性の早期発見と迅速な対応を可能にし、ソフトウェア開発プロセス全体をより安全かつ効率的にします。

FutureVulsとTrivyの連携は、DevSecOpsの理想を実現するための具体的な方法を提供しています。脆弱性の自動検知とトリアージにより、開発チームはセキュリティ問題に迅速に対応し、リスクを最小限に抑えることができます。

今後も、DevOpsとセキュリティの統合はソフトウェア開発の世界で重要な役割を果たし続けるでしょう。FutureVulsはこれからも、セキュリティを最前線に置きながら、開発プロセスの効率化と安全性の向上に貢献していきます。