Syftは、コンテナイメージのソフトウェア部品表(SBOM)を生成するCLIユーティリティです。 SBOMは、イメージで使用される依存関係のカタログです。画像のファイルシステムを形成する「素材」を可視化できます。
SBOMを作成すると、依存関係の混乱攻撃のリスクにさらされる非常に複雑なパッケージサプライチェーンを特定するのに役立ちます。画像と一緒にSBOMを配布すると、表面の下にあるものがユーザーに通知されます。これは、サプライチェーンのセキュリティを強化する際の出発点として役立ちます。
Syftは、完全なコンテナスキャンエンジンも提供するAnchoreによって開発されました。 Syft CLIは、一般的なオペレーティングシステムとプログラミング言語を使用して画像からパッケージリストを抽出できます。 DockerイメージとOCIイメージの両方がサポートされています。
Syftのインストール
インストールスクリプトを使用して、最新のSyftバイナリをダウンロードし、パスに追加できます。
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
Macユーザーは、anchore/syft
を追加することで、HomebrewからSyftを入手することもできます。 リポジトリとsyft
のインストール パッケージ。
システムにSyftをインストールしたら、syft
を実行します ターミナルで使用可能なコマンドを表示します。 syft completion
を実行すると、シェルの補完を生成できます。 。
syft version
を使用する インストールのバージョンを検索します。 GitHubタグページを定期的にチェックして新しいリリースを見つけ、インストールスクリプトを再利用して各更新をダウンロードします。
Syftの機能は現在、単一のサブコマンドsyft packages
によって公開されています。 。画像タグを渡して、次のSBOMを生成します:
syft packages alpine:latest
Syftは画像をダウンロードし、その内容をスキャンして、検出されたパッケージのカタログを作成します。出力は、端末にテーブルとして表示されます。各結果には、検出されたパッケージ名、バージョン、およびタイプが含まれます。
この画像のパッケージリストは短いです。これはアルパインのベースイメージであるため、インストールされたパッケージは意図的に合理化され、可能な限り最小の表面を提供します。より大きな画像には、いくつかの異なる形式の数百または数千のパッケージが含まれる可能性があります。 Syftをgrep
などの既存のUnixターミナルツールと組み合わせると便利です。 およびawk
探しているデータを抽出します。
syft packages example-image:latest | grep example-package-to-find
Syftは、主要なオペレーティングシステムおよびプログラミング言語全体で多くの一般的なパッケージ形式をサポートしています。リストには次のものが含まれます:
-
APK
(アルパイン)、DEB
(Debian)、およびRPM
(Fedora)OSパッケージ。 - Alpine、CentOS、Debian、およびRHELの好意によるLinuxディストリビューションの識別。
- Goモジュール
- Java in
JAR
、EAR
、およびWAR
バリエーション - NPMおよびYarnパッケージ
- Pythonホイールと卵
- ルビーバンドル
すべての言語が網羅されているわけではありませんが、アプリケーションで選択したスタックに関係なく、OSレベルのスキャンの恩恵を受けることができます。
デフォルトの出力形式はtable
と呼ばれます 。ターミナルに結果の列ベースのテーブルをレンダリングし、検出されたパッケージごとに新しい行を作成します。人間が読める形式の代替形式は、text
です。 Version
のパッケージのリストを表示します およびType
各セクションの下にネストされたフィールド。
Syftはいくつかのプログラム形式もサポートしています:
-
json
–パッケージデータをJSON構造に保存します。 -
cyclonedx
–XML形式のCycloneDXレポート。 -
spdx
およびspdx-json
–タグ値またはJSON形式のSPDX互換レポート。
これらのレポートのいずれかを使用すると、後で参照できるように調査結果をファイルにアーカイブできます。
syft packages alpine:latest -o json > alpine-packages.json
標準化されたCycloneDXおよびSPDX形式は、SyftスキャンをCI/CDパイプラインに統合するのに役立ちます。データは、パッケージリストとSBOMの結果を処理する他のエコシステムツールからアクセスできます。
Syftは、Anchoreのスタンドアロンコンテナファイルシステムの脆弱性ファインダーであるGrypeとも統合されています。 JSON出力形式を使用すると、SyftからのデータをGrypeに直接フィードできます。
syft packages example-image:latest -o json > sbom.json
grype sbom:./sbom.json
Grypeは、パッケージリストを既知の脆弱性のインデックスと比較します。問題が含まれているパッケージが強調表示され、セキュリティ体制を改善するための即時の開始点が提供されます。
Syftは、パブリックDockerレジストリ以外の他のソースからのイメージを使用できます。レジストリタグを介して、または保存されたイメージtarとして、OCI準拠のイメージを参照できます。画像アーカイブへのパスは、Syftに直接渡すことができます:
docker image save my-image:latest > my-image.tar
syft packages ./my-image.tar
SyftはプライベートDockerレジストリでも動作します。 ~/.docker/config.json
にある既存の資格情報を使用します ファイル:
{ "auths": { "registry.example.com": { "username": "", "password": "" } } }
Syftはコンテナイメージスキャンに重点を置いていますが、任意のファイルシステムパスのSBOMを作成することもできます。 Syftを使用して、ソフトウェアバイナリとライブラリを一般的に含むディレクトリをスキャンすることにより、ホストのパッケージにインデックスを付けることができます。
syft packages dir:/usr/bin
dir:
を明示的に追加する必要があります 作業ディレクトリ外のパスを参照している場合はスキーム。それ以外の場合、Syftはそれを画像タグ参照として解釈しようとします。
Syftは、コンテナイメージからパッケージリストを抽出します。生成されたデータは画像のSBOMとして機能し、サプライチェーンの長さに対する認識を高めます。
Syftは、いくつかの異なる形式でレポートを生成する単一のバイナリとして配布されます。 CI / CDシステムに簡単に統合して、イメージビルドパイプラインの一部としてSBOMアーティファクトをアップロードできます。これにより、説明責任が高まり、各画像の作成時に各画像の完全なソフトウェアリストが記録されるため、監査証跡が容易になります。
Syftスキャンをワークフローに追加すると、使用しているパッケージを常に把握できます。この情報を入手したら、各パッケージの評価を開始して、それが本当に必要かどうかを判断できます。ワークロードで使用されていないパッケージが多数ある場合は、最小限のベースイメージに切り替えて、重要なソフトウェアのみを最上位に重ねることを検討してください。