GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Syftを使用してDockerイメージの依存関係にインデックスを付ける方法

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 JAREAR 、および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スキャンをワークフローに追加すると、使用しているパッケージを常に把握できます。この情報を入手したら、各パッケージの評価を開始して、それが本当に必要かどうかを判断できます。ワークロードで使用されていないパッケージが多数ある場合は、最小限のベースイメージに切り替えて、重要なソフトウェアのみを最上位に重ねることを検討してください。


Docker
  1. Dockerを使用してJenkinsをインストールする方法

  2. Dockerを使用してマイクロサービスをデプロイする方法

  3. ランチャーでアプリをデプロイする方法

  1. Dockerfileを使用してDockerイメージを構築する方法

  2. Dockerイメージをあるサーバーから別のサーバーにパッケージ化して転送する方法

  3. Dockerイメージを他の人と共有する方法

  1. Dockerイメージを変更する方法

  2. LinuxサーバーにDockerを使用してNextcloudをインストールする方法

  3. Dockerイメージに変更をコミットする方法