Slide 1

Slide 1 text

令和最新版 他人に自慢したいヤバいCI/CD LT会 @yabaibuki.dev #2 Akira Kuriyama (@sheepland) コンテナ脆弱性修正を Renovate/Dependabot のように行う

Slide 2

Slide 2 text

自己紹介 名前 : 栗山 聖(くりやま あきら) X : @sheepland 職種 : SRE 所属 : 株式会社スタディスト

Slide 3

Slide 3 text

補足 今回の話すコンテナ脆弱性とは、OSのパッケージの脆弱性です。 アプリケーションのパッケージの脆弱性は対象外。

Slide 4

Slide 4 text

みなさんコンテナ脆弱性修正 しておりますでしょうか? 突然大きな脆弱性が見つかりSNSで話題に。 話題にならなくても日々脆弱性は発見されている。

Slide 5

Slide 5 text

しかし、修正しようにも面倒ですよね? なにが面倒か ● どのコンテナに脆弱性があるのか分からない ● どうやって脆弱性を修正していいか分かりづらい ● コンテナ再ビルドすればパッケージが更新されるので修正できるが、ビルド キャッシュ効いていると更新されない問題 ● 手動でビルドキャッシュを消すのが面倒 ● 脆弱性修正PRという形でPRを出しづらい

Slide 6

Slide 6 text

なにが面倒か ● どのコンテナに脆弱性があるのか分からない ● どうやって脆弱性を修正していいか分かりづらい しかし、修正しようにも面倒ですよね? バージョンアップしたいけど バージョン指定してない RUN apt-get update && apt-get install -y \ package-bar \ package-baz \ package-foo \ …

Slide 7

Slide 7 text

しかし、修正しようにも面倒ですよね? なにが面倒か ● どのコンテナに脆弱性があるのか分からない ● どうやって脆弱性を修正していいか分かりづらい ● コンテナ再ビルドすればパッケージが更新されるので修正できるが、 ビルドキャッシュ効いていると更新されない問題 ○ 手動でビルドキャッシュを消すのが面倒 ● 脆弱性修正PRという形でPRを出しづらい

Slide 8

Slide 8 text

しかし、修正しようにも面倒ですよね? なにが面倒か ● どのコンテナに脆弱性があるのか分からない ● どうやって脆弱性を修正していいか分かりづらい ● コンテナ再ビルドすればパッケージが更新されるので修正できるが、 ビルドキャッシュ効いていると更新されない問題 ○ 手動でビルドキャッシュを消すのが面倒 ● 脆弱性修正PRという形でPRを出しづらい

Slide 9

Slide 9 text

おれたちはただ、Renovate/Dependabotのように コンテナ脆弱性修正PRをマージするだけで脆弱性を修正 したいだけなんだ…!

Slide 10

Slide 10 text

実現しました! 開発者側のフロー 1. Slackに脆弱性通知がくる 2. Slack通知内のPRリンクを開く 3. PRに対して脆弱性スキャンCIやアプリケーションのCIが 通っていることを確認する 4. mergeしてリリースする 5. 脆弱性解消! かなりDependabotやRenovateと近しい体験

Slide 11

Slide 11 text

実現しました! CI/CD側のフロー 1. CI/CDで毎日最新のイメージに対して脆弱性スキャン 2. 脆弱性が見つかれば脆弱性内容が記載されたGitHubのIssueを自動作成 3. そのIssueに紐付ける形で脆弱性修正PRを自動作成 4. Slackに脆弱性が見つかったことをPRのリンク付きで通知

Slide 12

Slide 12 text

Slack通知

Slide 13

Slide 13 text

Pull Request

Slide 14

Slide 14 text

Issue

Slide 15

Slide 15 text

ポイントを簡単に説明をします

Slide 16

Slide 16 text

脆弱性スキャンについて 脆弱性スキャンにはTrivyを使用しています。 以下のオプションを指定しています。 ● vuln-typeオプションでOSパッケージのみを脆弱性スキャン対象に ● severityオプションで緊急度の高い脆弱性のみを対象に ● ignore-unfixedオプションでパッチが提供済みの脆弱性のみを対象に

Slide 17

Slide 17 text

FROM node:22 # apt-getでinstallしたパッケージをアップデートする場合は以下のバージョンを上げる RUN echo "package-cache-v1" > /dev/null RUN apt-get update && apt-get install -y \ package-bar \ package-baz \ Dockerfileは `RUN`のコマンド内容が変わると以降はキャッシュが使われなくなります。 これを利用して、RUNの内容を更新することでキャッシュが使われないようにしています。 (RUNの内容はなんでもよいです) 脆弱性修正PRについて

Slide 18

Slide 18 text

脆弱性修正PRでは、"package-cache-v○"のv○の部分の数値を上げる 脆弱性修正PRについて

Slide 19

Slide 19 text

CIとTrivyを組み合わせて、簡単にコンテナ脆弱性 を修正できる仕組みを作りました! まとめ

Slide 20

Slide 20 text

「コンテナイメージ脆弱性検知と対応フローの紹介」 https://studist.tech/container-image-vulnerability-scan-3b8a04a9577 詳しくはテックブログを参照下さい!

Slide 21

Slide 21 text

ご静聴ありがとうございま した!