GitHub ActionsでTrivyのスキャンを実行する

GitHub ActionsでTrivyのスキャンを実行する
◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

【5/27開催】事業変革を最新ソフトウェア技術で加速する「OSS利活用事例セミナー」
OSSのビジネス活用事例などを紹介します!登壇者はスカパー様やIPAなど🎤
OSSを活用した新たなビジネス創出やDX推進のヒントを得られる機会です。
https://ossforum.connpass.com/event/318583/

ども!今回はTrivyをGitHub Actionsで使用する方法についてまとめました。ローカルでDockerを用いて構築する方法がわからなかったのですが、Dockerを読む力が上がって構築できるようになりました。セキュリティスキャン記事第二弾!GitHub Actionsでセキュリティ

はじめもす

どもども!一気に寒くなってお家から出かけるのが億劫になってる龍ちゃんです。そんなこと言いつつ昨日は手羽餃子が食べたくなって、食べに出かけました。毎日、GitHub Actionsを触っているのでいい加減抵抗感が減ってきましたね。

さて、前回はGitHub Actions上でOWASP ZAPのスキャンを実行しました。今回はDockerのイメージをスキャンしたいということで、Trivyについてスキャンを実施してみたのでまとめておきます。

この記事でわかることは以下になります。

  • ローカルPCでTrivyのスキャンを実行する
  • GitHub Actions上でTrivyのスキャンを実行する

それでは、本題に入ってきましょう。この記事は2024/01/18日時点の情報です!。

そもそもTrivyって何?

ざっくりと公式ホームページの情報をまとめました。

もともとOSSだけど、今は会社がメンテしているや~つ  対応しているスキャン対象
コンテナイメージ・ファイルシステムスキャン・IaC  検出できるもの
脆弱性・IaCの設定・シークレット検知・ライセンス  スキャン結果
テーブル/JSON/SARIF/SBOM etc...

今回は、脆弱性検知とシークレット検知の二点を利用するために調査してみました。IaCの設定ミスなども検知することができます。意外と検証用にシークレットをべた書きしていたりするので、検知してアラートが出るというのはうれしいですね。

ファイルシステムとコンテナイメージのスキャンどちらにも対応しているので、要件によって導入がしやすいというのもうれしいところです。

最近いろいろと話題になっている、SBOMに対応しているのもうれしいところですね。

Trivyスキャンしていく!

まず最初にローカルでTrivyをセットアップしてスキャンしてみます。その後、GitHub Actionsでスキャンをしていきます。

ローカルでTrivyをスキャンしてみる

それでは、Trivyをセットアップしていきます。前提としてはWSL上にDockerが構築されている必要があります。公式のページを置いておきます。

まずはイメージを引いてきましょう。

docker pull aquasec/trivy:0.48.3

公式の方法に則り、お試しでpythonのイメージをスキャンするコマンドを以下に置いておきます。特にカスタマイズはしていませんが、—rmのフラグを付けてスキャン後にコンテナを破棄しておきます。

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ --rm aquasec/trivy:0.48.3 image python:3.4-alpine

上記のコマンドだと、どこが変数かわかりにくい可能性があるかと思うのでサンプルとして以下に出しておきます。${特定のイメージ名をスキャンする}の部分をイメージ名に変更することでスキャンを行えます。

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.48.3 image ${特定のイメージ名をスキャンする}

脆弱性検知とシークレット検知はデフォルトで設定されています。ライセンス検知と設定ミスを検知するためには、追加のフラグを与える必要があります。以下にサンプルを置いておきます。

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ --rm aquasec/trivy:0.48.3 image --scanners license,secret,vuln,misconfig  ${特定のイメージ}

以上で、コンテナイメージスキャン周りの説明は以上になります。

ファイルスキャンの場合は、imagefsにして、イメージ名の部分をファイルパスに置き換えることで処理が走ります。カレントディレクトリをスキャンするサンプルを以下に置いておきます。

docker run -v /var/run/docker.sock:/var/run/docker.sock -v $HOME/Library/Caches:/root/.cache/ --rm aquasec/trivy:0.48.3 fs .

GitHub Actionsでスキャンをしていく!

やっとで本題まで来ました。スキャンをするためには、スキャンするアプリケーションが必要になります。せっかくなので、脆弱性のあるアプリケーションを使用してスキャンを実施したいと思います。肝心のアプリはOWASP Juice shopを使用したいと思います。こちらは、ふんだんに脆弱性が仕込まれています。もちろんDockerで起動することができます。

Trivyのスキャンは、GitHub Actionsに手軽にインストールすることができます。こちらが、GitHubのページになります。

#
name: Trivy Scan to OWASP Juice shop

on:
  push:
    branches: ["main"]

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Pull Docker
        run: docker pull bkimminich/juice-shop

      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: "bkimminich/juice-shop"
          scan-type: "image"
          format: "table"
          exit-code: "0" # 0だと脆弱性検知しても通る 1だと検知後落ちる
          ignore-unfixed: true
          vuln-type: "os,library"
          severity: "CRITICAL,HIGH"
          scanners: "license, secret vule misconfig"

exit-codeがローカル版と異なる部分になります。01で、脆弱性検知後に処理が落ちるようになっています。スキャン結果は、CI上で表示されます。

面白い話ですが、公式のREADMEにはscannersに設定できる項目にはlicenseの記載がありません。ですが、設定したら動きました。なので、CI上でもライセンスチェックが行えますね。

おわりもす

ひとまず、スキャンができることは確認することができました。最初は、Docker上での構築ができませんでした。WSL上にセットアップしたのが良い思い出です。本来ならば、スキャン結果をartifactに保存して、Issueに自動で登録などもあると思います。その辺は、実運用に回るときにセットしていきましょう。

GitHub Actionsでスキャンが連続で失敗してもめげない心を手に入れました。これからも程よく頑張っていきます( *´艸`)

以降がDocker周りの記事になります。

アバター画像
About 龍:Ryu 107 Articles
2022年入社で主にフロントエンドの業務でTailwindと遊ぶ日々。お酒とうまいご飯が好きで、運動がちょっと嫌いなエンジニアです。しゃべれるエンジニアを目指しておしゃべりとブログ執筆に注力中(業務もね)//
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる