Red Hat Trusted Profile Analyzer を使用した SBOM の検査
SBOM をスキャンして、アプリケーションのセキュリティー体制に関する実用的な情報を取得する方法を説明します。
概要
はじめに
Red Hat Trusted Application Pipeline は、アプリケーションイメージをビルドするときに、Software Bill of Materials (SBOM) も提供します。SBOM には、イメージが使用するすべてのソフトウェアライブラリーがリストされます。SBOM を使用すると、セキュリティーの脆弱性を特定できます。
しかし、SBOM は長くて判読が困難です。未処理の SBOM を実用的な情報に変換するには、Trusted Profile Analyzer (TPA) を使用できます。たとえば、TPA は、Common Vulnerabilities and Exploits (CVE) の対象となるイメージ内の依存関係を識別できます。
第1章 SBOM のダウンロード、変換、分析
次の手順では、TPA を使用して SBOM を検査する方法を説明します。具体的には、SBOM をダウンロードし、SBOM を互換性のある形式に変換して、TPA で SBOM を分析する方法を説明します。
RHTAP 1.3 では、サポートされている CI プロバイダー (Tekton、Jenkins、GitLab CI、GitHub Actions) を使用してアプリケーションをビルドするときに、SBOM が TPA に自動的に公開されるため、この手順は必要ありません。GitHub Actions は テクノロジープレビュー 機能であり、完全にはテストされていないことに注意してください。
SBOM を手動で展開し、ローカルコピーを保持する場合は、次の手順に従ってください。
手順:
コンテナーレジストリーで、SBOM 検査の対象とするコンテナーイメージの完全なアドレスを確認します。アドレスの形式は、registry/namespace/image:tag です。たとえば、quay.io/app/app-image:ff59e21cc などです。
注記SBOM イメージのアドレス (末尾が
.sbom
のもの) は使用しないでください。実際のアプリケーションイメージのアドレスを使用してください。CLI で、cosign を使用して SBOM をダウンロードします。出力を、後で参照できるファイルにリダイレクトします。必ず新しいファイル名の末尾を
.json
にします。cosign download sbom quay.io/redhat/rhtap-app:8d34c03188cf294a77339b2a733b1f6811263a369b309e6b170d9b489abc0334 > /tmp/sbom.json
(オプション) SBOM は、最終的にこの .json ファイルにリストされている名前で TPA UI に表示されます。デフォルトでは、Syft によって SBOM のファイルパスに基づいてその名前が作成されます。SBOM をわかりやすい名前で TPA UI に表示する場合は、ダウンロードした .json ファイルで名前を手動で変更する必要があります。具体的には、
.metadata.component
オブジェクト内の名前を置き換える必要があります。必要に応じて、ここでversion
フィールドを追加することもできます。$ vim /tmp/sbom.json "component": { "bom-ref": "fdef64df97f1d419", "type": "file", "name": "/var/lib/containers/storage/vfs/dir/3b3009adcd335d2b3902c5a7014d22b2beb6392b1958f1d9c7aabe24acab2deb" #Replace this with a meaningful name }
次のコマンドを実行して、Bombastic API URL を環境変数として保存します。
$ bombastic_api_url="https://$(oc -n rhtap get route --selector app.kubernetes.io/name=bombastic-api -o jsonpath='{.items[].spec.host}')"
注記このコマンドと次のコマンドでは、
-n
の後に、RHTAP をインストールした名前空間を必ず入力してください。この例では、rhtap
という名前空間を使用していると想定しています。CLI で、次の値を持つ新しい
token_issuer_url
環境変数を作成します。$ token_issuer_url=https://$(oc -n rhtap get route --selector app.kubernetes.io/name=keycloak -o jsonpath='{.items[].spec.host}')/realms/chicken/protocol/openid-connect/token
次に、TPA__OIDC__WALKER_CLIENT_SECRET 環境変数を設定する必要があります。RHTAP のインストール中に組織が生成した private.env ファイルにアクセスできる場合は、そのファイルをソースとして取得します。そのファイルにアクセスできない場合は、RHTAP をインストールした担当者に TPA OIDC Walker クライアントシークレットを提供するよう依頼してください。
private.env
ファイルにアクセスできる場合は、以下を実行します。$ source private.env
または、RHTAP をインストールした担当者からシークレットを入手したら、以下を実行します。
$ TPA__OIDC__WALKER_CLIENT_SECRET=<secret value>
次のコマンドを実行して BOMbastic API のトークンを取得します。このトークンを使用すると、SBOM をアップロードできます。
$ tpa_token=$(curl \ -d 'client_id=walker' \ -d "client_secret=$TPA__OIDC__WALKER_CLIENT_SECRET" \ -d 'grant_type=client_credentials' \ "$token_issuer_url" \ | jq -r .access_token)
SBOM のアップロードを試行します。
curl \ -H "authorization: Bearer $tpa_token" \ -H "transfer-encoding: chunked" \ -H "content-type: application/json" \ --data @/tmp/sbom.json \ "$bombastic_api_url/api/v1/sbom?id=my-sbom"
エラーメッセージ
storage error: invalid storage content
が表示された場合は、Syft を使用して SBOM を以前の CycloneDX 1.4 に変換します。異なる pURL を持つパッケージのマージに関する警告は、無視しても問題ありません。この警告は、Syft が元の SBOM の一部のデータを破棄する可能性があることを示していますが、そのデータは重要ではありません。$ syft convert /tmp/sbom.json -o cyclonedx-json@1.4=/tmp/sbom-1-4.json
SBOM の再アップロードを試行します。
$ curl \ -H "authorization: Bearer $tpa_token" \ -H "transfer-encoding: chunked" \ -H "content-type: application/json" \ --data @/tmp/sbom-1-4.json \ "$bombastic_api_url/api/v1/sbom?id=my-sbom"
- OpenShift コンソールから、RHTAP を実行しているクラスターにアクセスします。
-
rhtap プロジェクトで、Networking > Routes に移動します。
spog-ui
サービスと同じ行にリストされている URL を開きます。 - Register ボタンを使用して新しいアカウントを作成し、TPA に対して認証します。
SBOM (直近にアップロードしたもの) を選択し、その SBOM に基づいて TPA が提供した、アプリケーションに関する分析情報を確認します。
- 依存関係分析レポートタブに移動して、脆弱性と修復を表示します。
改訂日時: 2024-12-11