< back to blog

Sysdigを用いたAzureパイプラインにおけるコンテナイメージスキャン

清水 孝郎
Sysdigを用いたAzureパイプラインにおけるコンテナイメージスキャン
Published by:
清水 孝郎
@
Sysdigを用いたAzureパイプラインにおけるコンテナイメージスキャン
Published:
September 19, 2022
シスディグによるファルコフィード

Falco Feedsは、オープンソースに焦点を当てた企業に、新しい脅威が発見されると継続的に更新される専門家が作成したルールにアクセスできるようにすることで、Falcoの力を拡大します。

さらに詳しく

本文の内容は、2022年9月19日にEduardo Mínguezが投稿したブログ(https://sysdig.com/blog/container-image-scanning-for-azure-pipelines-with-sysdig/)を元に日本語に翻訳・再構成した内容となっております。

Sysdig Secureを使用して、Azure Pipelinesに脆弱性やバッドプラクティスがないかコンテナイメージをスキャンするのは、簡単なプロセスです。この記事では、その方法についてステップバイステップの例を説明していきます。

Sysdig Secureによるイメージ脆弱性スキャン

イメージスキャンにより、DevOpsチームは、コンテナが本番環境にデプロイされる前、またはイメージが任意のコンテナ・レジストリにプッシュされる前に、パイプラインの初期段階で既知の脆弱性を検出し、コンテナのビルド構成を検証することにより、セキュリティをシフトレフトさせることができます。

Sysdigのイメージスキャンプロセスは、ImageConfigのチェック(機密情報の漏洩など)、OSパッケージだけでなくサードパーティパッケージ(java、pythonなど)のチェックなど、さまざまなルールを含むようにカスタマイズ可能なポリシーに基づいています。

Sysdigの脆弱性スキャンは、スキャン手順を実行する場所によってイメージの分類が異なってきます。

  • パイプライン: sysdig-cli-scanner ツールで実行されるランタイム段階(開発者のワークステーション内、CI/CDパイプライン内など)の前。
  • ランタイム: 実行ノードでイメージが実行され、Sysdigエージェントによってスキャンが実行される場合。
Sysdig vulnerabilities UI screenshot

本記事では、ベストプラクティスとして採用されているAzure Pipelinesを使ったパイプラインステップでのスキャンの実行方法について説明します。

コンテナイメージに対してスキャナーを実行するのは、sysdig-cli-scanner ツールに以下のようないくつかのフラグ(詳細は公式ドキュメントを参照)を付けて実行するのと同じくらい簡単です。

SECURE_API_TOKEN=<your-api-token> ./sysdig-cli-scanner --apiurl <sysdig-api-url> <image-name> --policy <my-policy>

Azureパイプライン

Azure DevOpsは、コードリポジトリ、レポート、プロジェクト管理、自動ビルド、ラボ管理、テスト、およびリリース管理などのツールをチームに提供します。Azure パイプラインはAzure DevOpsバンドルのコンポーネントで、コードに対するテストの実行、gitリポジトリにコミットがプッシュされたときのコンテナイメージのビルド、コンテナイメージに対する脆弱性スキャンの実行など、CI/CDタスクの実行を自動化するものです。

脆弱性スキャンのためのAzure パイプライン

Azureパイプラインは、YAMLファイルに記述されたタスクの一括を定義し、イベントが発生したときに自動的に実行されます。イベントとは、通常、リンク先のリポジトリに新しいコミットやプルリクエストが発生したときのことです。

Azure pipeline example steps diagram

これにより、自動的にビルドしてレジストリにイメージをプッシュし、Kubernetesにデプロイすることができます。

アプリケーションの例

GitHub リポジトリに保存されている 8080/tcp ポートをリッスンする簡単な golang アプリケーションを利用します。

package main
import (
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "I love %s!\n", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

Sysdig Secure でイメージスキャンするための Azure パイプライン YAML 定義

これですべてが揃ったので、パイプラインの定義を掘り下げましょう。以下はワークフローの例です。

  1. コンテナイメージをビルドし、ローカルに保存する
  2. 必要に応じて sysdig-cli-scanner ツールをダウンロードする
  3. スキャンを実行する
  4. コンテナイメージをリモートレジストリにプッシュする

- script: |
$(CACHE_FOLDER)/sysdig-cli-scanner \
--apiurl $(SYSDIG_SECURE_ENDPOINT) \
--console-log \
--dbpath=$(CACHE_FOLDER)/db/ \
--cachepath=$(CACHE_FOLDER)/scanner-cache/ \
docker://$(REGISTRY_HOST)/$(IMAGE_NAME):$(IMAGE_TAG)
displayName: Run the sysdig-cli-scanner
env:
SECURE_API_TOKEN: $(TOKEN)

パイプラインの実行

GitHub リポジトリにコミットした後、Azure ウェブコンソールでパイプラインが動作しているのを確認できます。

Successful Azure pipeline output screenshot

Sysdig Secureに戻り、これらの結果をさらに分析することができます。

Sysdig vulnerability with 0 issues found screenshot

この基本的なアプリケーションでは脆弱性は発見されませんでしたが、https://github.com/sysdiglabs/dummy-vuln-app などの別のアプリケーションを見ると、いくつか発見されていることが分かります。

Sysdig vulnerability scan with some issues found screenshot

まとめ

Sysdigを使うと、Azure DevOps Pipelinesで作成したイメージを実に簡単なプロセスでスキャンすることができます。ローカルスキャン機能のおかげで、インフラストラクチャーを離れることなくイメージをスキャンすることができ、CI/CDパイプラインの早い段階で問題を検出できます。

Azure MarketplaceでSysdig Secure DevOps Platformをご購入ください!

Sysdigは、Azure Marketplaceで簡単にご購入いただくことができます。

Azure MarketplaceのSysdig Secure DevOps Platformをご参照ください。

About the author

クラウド セキュリティ
コンテナ、Kubernetes、ホストのセキュリティ

セキュリティの専門家と一緒に、クラウド防御の最適な方法を探索しよう