API からのインポート

DefectDojo の API は、新しいスキャンをインスタンスに自動的に取り込む堅牢なパイプラインソリューションを可能にします。このような自動化にはいくつかの形態があります。

  • 環境を日次でスキャンし、そのスキャン結果を DefectDojo にインポートする日次インポート(当社のコネクター機能に似ています)
  • デプロイ時に新しいコードをスキャンし、その結果をトリガーされたアクションとして DefectDojo にインポートする CI/CD パイプライン

これらのパイプラインは、当社の Import Scan Form に近い方法で、スキャンファイルを添付して API の /reimport エンドポイントを直接呼び出すことによって作成できます。

DefectDojo の API

DefectDojo の API は、OpenAPI フレームワークを使用してアプリ内でドキュメント化されています。このドキュメントには、画面右上のユーザーメニューの**「API v2 OpenAPI3」**からアクセスできます。

  • このドキュメントは、さまざまなパラメーターを使用して API 呼び出しをテストするために利用でき、その際にはご自身のユーザーの API トークンが使用されます。

スクリプトや他の連携のために API トークンにアクセスする必要がある場合は、同じメニューの API v2 Token オプションでその情報を確認できます。

image

API に関する一般的な注意事項

  • OpenAPI ドキュメントは各エンドポイントで使用できるパラメーターについて詳しく説明していますが、読者が DefectDojo の主要な概念(製品階層、検出事項、重複排除など)を十分に理解していることを前提としています。
  • DefectDojo 全体にはあまり詳しくないものの、動作するインポート連携を求めるユーザーは、当社の Universal Importer の利用を検討してください。
  • DefectDojo の API は、特に /import または /reimport エンドポイントで「Auto-Create Context」が使用されている場合、意図しないデータオブジェクトを作成することがあります。
  • 幸いなことに、API を使用して誤ってデータを削除することは非常に困難です。ほとんどのオブジェクトは、関連するエンドポイントへの専用の DELETE 呼び出しによってのみ削除できます。

/import および /reimport エンドポイントに関する注記

/reimport エンドポイントは、最初のインポート、または既存のテストに検出事項を追加する「再インポート」のどちらにも使用できます。/reimport エンドポイントを使用する前に、まず /import でテストを作成しておく必要はありません。「Auto Create Context」が有効になっている限り、/reimport エンドポイントは新しいテスト、エンゲージメント、製品、または製品タイプを作成できます。ほとんどの場合、API 経由でデータを追加する際には /reimport エンドポイントのみを使用できます。

ただし、/import エンドポイントは、単一のテストオブジェクト内の差分を処理するために /reimport を使用するのではなく、常に各スキャン結果を個別のテストオブジェクトに保存したいパイプラインに使用できます。どちらのオプションも許容されるため、どちらを選ぶかはレポート構造や、パイプラインの個別の実行を検査する必要があるかどうかによって異なります。

Scan Completion Date (API: scan_date) フィールドの使用

DefectDojo は非常に多くのスキャナーレポートをサポートしていますが、そのすべてがユーザーにとって最も重要な情報を含んでいるわけではありません。scan_date フィールドは、特定のスキャンレポートの完了日を設定し、それをインポートされたすべての検出事項に反映させることができる柔軟なスマート機能です。

このフィールドは必須ではありませんが、デフォルト値はインポートの日付(リクエストが処理され、正常なレスポンスが返された時点)になります。

このフィールドに関するユースケースと、テストに適用される結果は以下のとおりです。

  1. レポートが日付を設定せず、インポート時に scan_date も設定されない場合
    • 検出事項の日付は scan_date のデフォルト値になります
  2. レポートが日付を設定し、インポート時に scan_date が設定されない場合
    • 検出事項の日付はレポートが設定する値になります
  3. レポートが日付を設定せず、インポート時に scan_date設定される場合
    • 検出事項の日付はユーザーが scan_date に設定した値になります
  4. レポートが日付を設定し、インポート時に scan_date設定される場合
    • 検出事項の日付はユーザーが scan_date に設定した値になります