はじめに
クラウド環境でのソフトウェア開発が普及する中、CI/CDパイプラインを導入することで、開発からデプロイまでのプロセスを自動化し、効率的な運用が可能になっています。しかし、コードの変更が迅速に行われる中で、脆弱性やセキュリティリスクも見逃されやすくなるため、セキュリティチェックの自動化がますます重要になっています。
Trivyは、コンテナやIaC(Infrastructure as Code)ファイル、Kubernetesクラスターなどの脆弱性を検出するオープンソースツールとして、クラウド環境のセキュリティ対策が可能です。CI/CDパイプラインに組み込むことで、セキュリティチェックの自動化が可能になり、セキュアなリリースが実現できます。
CI/CDパイプラインとは?
CI/CDパイプラインは、ソフトウェアの開発、テスト、デプロイの各工程を自動化する手法です。コードがリポジトリにプッシュされるたびに自動でビルドとテストが行われ、その後自動的にデプロイされることで、開発サイクルが高速化します。特にクラウド環境(AWS、Azure、GCPなど)においては、スケーラブルなインフラと組み合わせることで、迅速かつ安定した運用が可能になります。
セキュリティの観点からも、CI/CDパイプラインの各ステージに脆弱性チェックを取り入れることで、開発中に潜んでいるリスクを早期に検出できます。
自動脆弱性チェックのメリット
脆弱性の早期発見
CI/CDパイプラインに自動脆弱性チェックを組み込むことで、コードがリリースされる前にセキュリティチェックが実行され、潜在的な脆弱性を迅速に検出し、修正できるようになります。これにより、脆弱性が本番環境にデプロイされるリスクを低減できます。
手動チェックの負担軽減
脆弱性チェックを自動化することで、手動でのセキュリティ確認が不要になります。これにより、人的ミスを防ぎ、チェックの精度が向上し、効率的なセキュリティ対策が可能になります。
コンプライアンス対応
自動化された脆弱性チェックは、法規制や企業ポリシーに基づくコンプライアンスを確実にする手助けとなります。クラウドインフラ上でのセキュリティ対策を強化することで、規制を遵守しつつ、セキュリティリスクを最小限に抑えることができます。
Trivyの概要
クラウド環境におけるセキュリティは、システム全体の安定性を確保するための重要な要素です。近年、コンテナ化やインフラのコード化(IaC)が進む中、これらの環境に潜む脆弱性を早期に発見し、対策を講じることが求められています。Trivyは、そうしたニーズに応えるために設計されたオープンソースの脆弱性スキャナです。軽量で使いやすいという特徴を持ち、コンテナやIaCファイルの脆弱性チェックを簡単に実行でき、開発者や運用エンジニアにとって強力なツールとなっています。
Trivyは、AWS、Azure、GCPといった主要なクラウドプラットフォーム上でも活用でき、クラウドネイティブなアプリケーションのセキュリティを一貫して管理するのに適しています。これにより、企業が継続的にセキュリティを維持し、運用環境に脆弱なコードや設定を持ち込まないようにすることが可能です。
詳しいインストール方法や基本的な使い方については、Trivyを使ったセキュリティスキャンの基本と導入方法を参考にしてください。
Trivyの主要機能
-
コンテナイメージの脆弱性スキャン
Trivyは、DockerやOCIイメージの脆弱性をスキャンします。これにより、開発中やデプロイ前に、コンテナ内のパッケージや依存関係に潜む脆弱性を検出できます。
-
IaCファイルのセキュリティチェック
TerraformやCloudFormationといったIaCツールで定義されたファイルをチェックし、誤った設定やセキュリティリスクの原因となる構成を検出します。IaCを利用する際には、誤設定がインフラ全体に重大な影響を及ぼすため、早期に検出することが重要です。
-
Kubernetesクラスターのスキャン
Trivyは、Kubernetesのリソース(Pod、Service、ConfigMapなど)をスキャンし、セキュリティリスクを検出します。特権モードで実行されているPodや誤ったアクセス制御リスト(ACL)など、Kubernetesの設定ミスが潜在的な脆弱性の原因となることがあります。
Trivyを使ったクラウド環境のCI/CDパイプラインへの統合
クラウド環境でのCI/CDパイプラインにTrivyを組み込むことで、開発からデプロイまでの各段階で自動的に脆弱性スキャンを実行できます。これにより、リリース前に潜在的なセキュリティリスクを検出し、修正することが可能です。ここでは、AWS、Azure、Google Cloudの各プラットフォームにおけるTrivyの統合方法を紹介します。
1. AWS CodeBuildとの統合
AWS CodeBuildは、AWS環境でのビルドプロセスを自動化するサービスです。ここでは、AWS CodeBuildを使用してコンテナイメージの脆弱性を自動でスキャンする方法を紹介します。
phases:
install:
commands:
- curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
build:
commands:
- trivy image --severity HIGH,CRITICAL <your-container-image>
この設定では、Trivyをインストールした後、trivy image
コマンドを使って指定したコンテナイメージの脆弱性をスキャンします。脆弱性の深刻度(HighやCritical)のみを対象としています。
2. Azure DevOpsとの統合
Azure DevOpsは、Microsoft AzureのCI/CDサービスです。以下の設定例では、TrivyをAzure DevOpsパイプラインに組み込み、コンテナイメージのセキュリティチェックを自動化します。
steps:
- script: |
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin
trivy image --severity HIGH,CRITICAL <your-container-image>
このスクリプトでは、Trivyをインストールし、その後trivy image
コマンドを実行して脆弱性スキャンを行います。AWS CodeBuildと同様、特に深刻度の高い脆弱性を優先してチェックします。
3. Google Cloud Buildとの統合
Google Cloud Buildは、Google Cloud Platform(GCP)上でビルドプロセスを自動化するサービスです。以下の設定では、Google Cloud BuildにTrivyを組み込んで脆弱性スキャンを実行します。
steps:
- name: 'gcr.io/cloud-builders/curl'
args: ['-sfL', 'https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh', '|', 'sh', '-s', '--', '-b', '/usr/local/bin']
- name: 'gcr.io/cloud-builders/docker'
args: ['trivy', 'image', '--severity', 'HIGH,CRITICAL', '<your-container-image>']
Google Cloud Buildでも、curl
でTrivyをインストールし、その後trivy image
コマンドを使って脆弱性スキャンを実行します。スキャン結果は、深刻度の高い脆弱性に絞って表示されます。
これらの設定を利用することで、クラウド環境でのCI/CDパイプラインにTrivyを統合し、自動でセキュリティスキャンを実行することができます。
JenkinsやGitHub ActionsでのTrivy統合
クラウド環境に限らず、JenkinsやGitHub Actionsなどの一般的なCI/CDツールでもTrivyを簡単に統合し、自動的な脆弱性スキャンを実行することができます。これにより、継続的インテグレーション(CI)の一部としてセキュリティチェックを追加し、脆弱性を早期に発見して対応することが可能です。
Jenkinsとの統合
Jenkinsは、幅広く使われるオープンソースのCI/CDツールであり、パイプラインを使って自動化されたビルド、テスト、デプロイが可能です。TrivyをJenkinsに統合することで、コンテナイメージの脆弱性スキャンを自動化できます。
以下は、Jenkinsのパイプライン内でTrivyを使用して脆弱性チェックを行う例です。
pipeline {
agent any
stages {
stage('Trivy Scan') {
steps {
sh 'curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin'
sh 'trivy image --severity HIGH,CRITICAL <your-container-image>'
}
}
}
}
この設定では、curl
を使用してTrivyをインストールし、その後にコンテナイメージに対して脆弱性スキャンを実行します。脆弱性が検出された場合は、その情報がログに記録され、修正が必要な箇所が特定されます。
GitHub Actionsとの統合
GitHub Actionsは、GitHub上でのCI/CDプロセスを自動化するためのツールです。Trivyを統合することで、コードがリポジトリにプッシュされるたびに自動的に脆弱性スキャンを実行することが可能です。
以下は、GitHub ActionsでTrivyを使った脆弱性チェックの例です。
name: Trivy scan
on:
push:
branches:
- main
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Run Trivy scan
run: trivy image --severity HIGH,CRITICAL nginx:latest
この例では、push
イベントに応じて、リポジトリにあるコードがmain
ブランチにプッシュされると自動的にTrivyによる脆弱性スキャンが実行されます。脆弱性のスキャン結果は、GitHub Actionsのログに記録され、確認や修正のアクションが可能になります。
追加の機能とカスタマイズ
Trivyは基本的な脆弱性スキャンに加え、さまざまなカスタマイズや追加機能を活用することで、セキュリティチェックをより効果的に実行できます。以下に、特に便利な機能をいくつか紹介します。
1. 脆弱性のフィルタリング
脆弱性の深刻度によって、スキャン結果をフィルタリングすることが可能です。これにより、CriticalやHighといった高い優先度を持つ問題に集中して対応できます。
trivy image --severity HIGH,CRITICAL <your-container-image>
このコマンドでは、深刻度の高い脆弱性のみを表示し、効率的な対応が可能になります。
2. レポート形式のカスタマイズ
Trivyはスキャン結果をさまざまなフォーマットで出力でき、レポートの共有や他のツールとの連携が容易です。たとえば、JSONやHTML形式に出力することで、視覚的に結果を確認したり、他のシステムと統合してセキュリティデータを管理することが可能です。
JSON形式でのレポート生成例:
trivy image --format json --output report.json <your-container-image>
また、HTML形式でのレポートも簡単に生成でき、セキュリティチームやステークホルダーにわかりやすく提示できます。
trivy image --format html --output report.html <your-container-image>
この機能を使うことで、スキャン結果を可視化し、定期的な監視や改善活動を効率化するためのデータとして活用できます。
まとめ
TrivyをCI/CDパイプラインに組み込むことで、セキュリティスキャンを自動化し、脆弱性を早期に発見・修正することが可能です。特にAWS、Azure、GCPなどのクラウド環境においては、セキュリティリスクが広範囲に及ぶため、自動化されたセキュリティスキャンが不可欠です。
JenkinsやGitHub ActionsなどのCIツールとの統合により、継続的な脆弱性チェックを行い、リリースの安全性を確保することで、効率的でセキュアな開発を実現します。
セキュリティ対策を先延ばしにすると、後のコストや影響が大きくなる可能性があります。早期の導入が安全な運用の鍵ですので、ぜひTrivyを活用して強固なセキュリティ基盤を築いてください。
参考リンク
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2023.08.30
Terraformの組み込み関数とは?elementやlookupなどの基本構文と使用例を学ぶ
こちらの記事では、Terraformの組み込み関数についての基本的な構文と使用例について解説します。
- インフラエンジニア
- AWS
2022.12.19
CSRF(クロスサイトリクエストフォージェリ)の仕組みと対策
CSRFの呼び名は複数あり、「シーサーフ」、「XSRF」、「リクエスト強要」、「セッションライディング」などと呼ばれます。
- サイバーセキュリティ
2024.05.02
Linux認定試験「LinuC」でクラウド時代の即戦力インフラエンジニアに
LinuCは、クラウド技術を含めた幅広いLinux技術を網羅した新しいLinux技術者認定試験です。2018年にスタートし、2020年には仮想化・コンテナ技術などを追加する改訂が行われ、2023年には最上位資格としてLinuCシステムアーキテクトが追加されました。LinuCを取得することで、自身のLinux技術を証明し、就職や転職、キャリアアップに繋げることができます。
- インフラエンジニア
- Linux