Goアプリの脆弱性をCIにて診断する
はじめに
快適に安全な開発を継続的に進めていく上で脆弱性診断は大切だと思います。
Goアプリ開発における脆弱性診断をGitHub Actions
にて実行する環境を作ってみたので記事を書いてみました。
脆弱性診断ツール
脆弱性診断にはnancy
とtrivy
を用います。
nancy
はGo言語での依存パッケージの脆弱性を診断してくれるツールです。
trivy
はコンテナイメージの脆弱性を診断してくれるツールです。
trivy
でもGoバイナリの脆弱性を診断してくれるのでnancy
は不要だったりしますかね。。。
それぞれの詳しいツールの説明についてはほかの方のブログ記事等にお任せ致します。
nancyによる診断
実装は以下となります。
GitHub Actionsが用意されていますがgo install
で準備しました。
こうして実装しておけば別のCI環境に移行することになってもコピペで移行ができそうだったので。
また、同じ構文を利用してローカル環境での確認も行うことができると思います。
trivyによる診断
実装は以下となります。
同じくGitHub Actionsが用意されていますがapt-get
で準備しました。
nancy
と同様の理由です。
(ちゃんと試していませんが、go install
ができなかった。。。)
コンテナ作成にはko
を用います。
最初はko
によるビルド->コンテナリポジトリにプッシュ->プル->スキャンとしていましたが
ko
のビルドオプションでローカルビルドで完結することができたので
ローカルビルド->イメージ名取得->スキャンとすることができました。
認証のためのPAT
生成/管理やDocekrログイン・コンテナプッシュが不要となりスッキリしたと思います。
ローカル環境においても実行が可能ですが、
生成されたDockerイメージを工夫して削除する必要があります。
(現状はlatest
を消すのがめんどくさかったのでサボっています。)
おわりに
脆弱性診断をCIで実行できる環境を作ってみました。
お試しでの作成なのでpush
時に実行するようにしていますが、
pr
やcron
をトリガーに脆弱性を定期的に診断するようにするのがよいかと思います。
cron
実行にするなら脆弱性が発見されたら自動でissue
が作成されるようにするとよさそうです!
また、今回紹介した以外にもおすすめの脆弱性検査ツールがあればぜひ教えていただきたいです。
今回作成したリポジトリはこちらです。
Discussion