JFrog Xray (Pro)
このページの内容
JFrog Xrayコネクタは、JFrog Xray REST APIを使用して、Artifactoryリポジトリから脆弱性データを取得します。DefectDojoはJFrogインスタンス内のすべてのリポジトリを検出し、Xray経由で脆弱性レポートを生成して、スケジュールに基づいて検出事項をインポートします。
Prerequisites
ArtifactoryとXrayの両方のAPIにアクセスできるAPIトークンが必要です。DefectDojo専用のサービスアカウントの作成をお勧めします。このアカウントには以下が必要です。
- Artifactoryリポジトリへの読み取りアクセス
- Xrayの脆弱性レポートを生成・閲覧する権限(Xrayの
Apply on Watches権限、またはそれに相当するもの)
Connector Mappings
- LocationフィールドにJFrogインスタンスのベースURLを入力します。これはJFrogインスタンスのルートURLである必要があります。例:
https://your-instance.jfrog.io。末尾にパスを含めないでください — DefectDojoが適切なAPIパスを自動的に構築します。 - Secretフィールドに有効なReference Tokenを入力します。トークンはJFrog PlatformのUIのUser Management > Access Tokensから生成できます。 Reference Tokenを生成し、その値を使用する必要があります。
JFrog Xrayに必要なトークンスコープ:
- All Services — DefectDojoはXRayとArtifactoryの両方のサービスへのアクセスが必要なため
- 最低限Manage Reports + Manage Resourcesが必要です。
デフォルトでは、DefectDojoは各Artifactoryリポジトリを個別のRecordとしてマッピングします。各Syncでリポジトリごとに完全な脆弱性レポートがXray経由で生成されるため、DefectDojo内の検出事項のステータスは常にリポジトリの現在の状態を反映します。
Repository Filter (optional)
デフォルトでは、コネクタはJFrogインスタンス内のすべてのリポジトリを検出します。リポジトリ数が非常に多いインスタンス(その多くはセキュリティレビューに関係ない場合もあります)では、コネクタフォームのImport Filtersの下にある任意項目のRepository Filterフィールドで検出範囲を絞り込むことができます。
このフィルタは検出時、つまりリポジトリごとの処理が行われる前に適用されます。フィルタ範囲外のリポジトリにはコストがかかりません — そのリポジトリのXrayレポートは生成されず、アーティファクトモードでは第1階層のアーティファクトも列挙されません。これにより、Syncにかかる時間とDefectDojoがJFrogインスタンスにかける負荷の両方を削減する、最も効果的な方法となります — これはSync後半に適用される他のどの設定よりも効果的です。特に大規模なインスタンスでは、Artifact-Level Recordsと併用することが推奨されます。
構文: リポジトリキーのカンマ区切りリストです。各項目には*ワイルドカードを使用できます。
*を含む項目はパターンとして照合されます —releases-*はreleases-で始まるすべてのリポジトリキーに一致し、*docker-pr-local*はdocker-pr-localを含むすべてのキーに一致します。*は/を含む任意の文字列に一致します。*を含まない項目は、リポジトリキーに完全一致する必要があります。- リストのいずれかの項目に一致すれば、そのリポジトリは検出されます。カンマの前後の空白は無視されます。
releases-*, snapshots上記の例では、releases-で始まるすべてのリポジトリキーに加えて、snapshotsという名前に完全一致する単一のリポジトリを検出します。
補足:
- このフィルタは**許可リスト(allow-list)**です — 一致するとそのリポジトリが選択されます。除外や否定の構文はないため、「Xを除くすべて」を直接表現することはできません。
- 一致は完全一致・ワイルドカードともに大文字小文字を区別します。ワイルドカード文字は
*のみで、?や文字範囲はサポートされていません。 - すべてのリポジトリを検出するには空欄のままにしてください。 空白またはカンマのみの値は空欄として扱われます。
- 何にも一致しないフィルタは単に何も検出しません — エラーにはなりません。Syncで予期せずリポジトリが見つからない場合は、コネクタログの
repository filter scoped discoveryのエントリを確認してください。これは全リポジトリ数のうち何件が一致したかを報告します。 - このフィールドは接続作成後にも変更できます。
後からフィルタを変更する場合: 新たに絞り込まれたフィルタによって除外されたリポジトリは検出されなくなり、その既存のRecordはツールがそれ以上報告しなくなったproductに対する通常のライフサイクルに従います — マッピング済みのRecordは次のSyncでMISSINGとフラグが立てられ、未マッピングのNEWのRecordは削除されます。すでにDefectDojoにインポートされた検出事項は削除されません。フィルタが管理するのは検出のみです。
Artifact-Level Records
Artifact-Level Recordsのトグルをオンにすると、検出範囲がリポジトリの1階層下に変わります。リポジトリルート直下の第1階層の各エントリ(Dockerリポジトリの場合は各イメージ、汎用リポジトリの場合は各トップレベルのファイルまたはフォルダ)が、それぞれ独自のRecordになります。各Syncは引き続きリポジトリごとに1つのXrayレポートを生成しますが、DefectDojoは各脆弱性を影響を受けるアーティファクトに割り当てるため、JFrogインスタンスへの負荷は増加しません。
最初のSyncを行う前に、どちらのモードになっているか確認してください。 Artifact-Level Recordsは新規インストールではデフォルトで有効です。この機能より前から存在するインストールでは、既存のリポジトリレベルのレイアウトが維持されるため、誰かが有効化するまでトグルはオフのままです。どちらの場合も、トグルはいつでも変更できます。詳細は以下の既存の接続の切り替えを参照してください。
Artifact-Level Recordsを有効にすると:
- リポジトリはRecordのままですが、親アセットになります。リポジトリ自体は検出事項を持ちませんが、Asset Hierarchy機能が有効な場合、DefectDojoは各アーティファクトアセットをそのリポジトリアセットに
parent関係で自動的に関連付けます。これにより、アセットを親/子でフィルタリングでき、検出事項は階層をロールアップします。 - 複数のアーティファクトに影響する脆弱性は、影響を受ける各アーティファクトのアセットにインポートされるため、すべてのアセットにそれぞれへ影響する検出事項の完全なセットが表示されます。
- 検出事項は各アーティファクトの最新ビルドにスコープされるため、アーティファクトの検出事項は、Xrayがこれまでスキャンしたすべてのビルドの結果を蓄積するのではなく、現在のビルドを表します。
- コネクタが作成した階層関係が、あなたが手動で作成した関係を上書きすることはありません。アセットにすでに割り当てた親がある場合、コネクタはそれに手を加えません。
- トークンにはさらにArtifactory storage APIへの読み取りアクセスが必要です(上記のスコープに含まれています)。
既存の接続をArtifact-Level Recordsに切り替える: このトグルはいつでも変更できます。切り替え後の最初のSyncでは、マッピング対象として新しいアーティファクトRecordが表示されます — トグルを切り替える際は、検出事項が途切れなく移行するよう、接続でAuto Mapを有効にしてください。リポジトリレベルのアセットは検出事項を受け取らなくなり、以前にインポートされた検出事項は次のSyncでクローズされます(同じ検出事項は新しいステータスで新しいアーティファクトアセットの下に再インポートされます)。古いリポジトリレベルの検出事項に付いていたメモと履歴は、リポジトリアセットに残ります。元に戻すとこの逆になります — リポジトリRecordが検出事項を持つ状態に戻り(以前にクローズされた検出事項は再一致して再オープンします)、アーティファクトRecordはMISSINGとしてマークされます。そのアセットと検出事項は保持されますが更新されなくなるため、任意のタイミングでアーカイブできます。
詳細については、JFrog Xray REST APIドキュメントを参照してください。