API経由でデータをアップロードする

SBOM ファイル、画像スキャン、および証明書データをアップロードするには、IBM® Concert API を使用します。

注意: Concert は、共通パッケージを持つ SBOM の同時アップロードをサポートしないという既知の制限があります。 共通のパッケージまたは脆弱性のサブセットを持つ2つ以上の CycloneDX SBOMまたは脆弱性スキャンファイルをアップロードすると、これらのエラーのいずれかが発生する可能性があります:
  • SBOM とパッケージの関係が作成できませんでした。
  • エラーが発生したため、データベース接続を取得できませんでした。
  • パイプラインを呼び出すことができませんでした。
回避策として、SBOMファイルを1つずつアップロードし、 イベントログを表示して、イベントステータスが完了していることを確認してから、次のファイルをアップロードすることができます。
注: エンドポイントとリクエストの完全なインデックスについては、 https://developer.ibm.com/apis/catalog/concert--ibm-concert-api を参照のこと。
APIエンドポイントへのPOSTリクエストを使って、以下のデータタイプをConcertアップロードすることができる:
  • アプリケーションSBOMapplication_sbom
  • ビルドSBOMapplication_sbom)
  • SBOMの展開application_sbom
  • パッケージ SBOMpackage_sbom
  • 脆弱性スキャン(CVEとエクスポージャ)
    • 画像の脆弱性スキャンimage_scan)
    • ソースコードの脆弱性スキャンcode_scan)
    • ランタイムまたは仮想マシンの脆弱性スキャンvm_scan)
    • CVEdynamic_scan)の動的アプリケーション・セキュリティ・テスト(DAST)
    • SARIF形式のソースコードの静的アプリケーション・セキュリティ・テスト(SAST)static_code_scan)
  • 証明書の詳細 (certificate)
注意: ConcertDef SBOMファイルをアップロードするときは、それがアプリケーションSBOM、ビルドSBOM、デプロイSBOMのいずれであっても、data_typeパラメータ値をapplication_sbomに設定しなければなりません。

準備

  • リクエストを認証するには、有効な Concert API キーが必要です。 手順については、 APIキーの生成を参照してください。
  • ベース URLと APIリクエスト・ヘッダの詳細については、 APIリファレンスと認証を参照のこと。

データ取り込み用APIエンドポイント

https://${concert_host}:${port}/ingestion/api/v1/upload_files
変数 説明
${concert_host} Concert APIサーバーのホスト名。
{port} APIサーバーがリクエストの受信をリッスンしているポートの番号。 SaaS および OpenShift Container Platform のデプロイメントでは、ポートの値は 443 です。 ポート番号は、VMのデプロイメントによって異なる場合がある。

コード・スニペット

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: <string>" \
    -H "Authorization: <type> ${Concert_API_Key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=<enum>" \
    -F "filename=@<string>"

パラメーター

パラメーター 説明
InstanceID ConcertインスタンスのユニークID。 この値は、Concert UIでAPIキーを生成したときに、APIキーの使用に関連する他の詳細とともに一時的にUIに表示されます。 フォーマット例0000-0000-0000-0000
Authorization Concert APIキーの型と値。
  • <type> は、SaaS および VM デプロイメントでは C_API_KEY に、OpenShift Container Platform デプロイメントでは ZenApiKey に置き換えてください。
  • ${Concert_API_key} を一意のAPIキー値に置き換える Concert UIで生成される。
data_type アップロードするデータの種類。
  • アプリケーションSBOMapplication_sbom
  • ビルドSBOMapplication_sbom)
  • SBOMの展開application_sbom
  • パッケージ SBOMpackage_sbom
  • 脆弱性スキャン(CVEとエクスポージャ)
    • 画像の脆弱性スキャンimage_scan)
    • ソースコードの脆弱性スキャンcode_scan)
    • ランタイムまたは仮想マシンの脆弱性スキャンvm_scan)
    • CVEdynamic_scan)の動的アプリケーション・セキュリティ・テスト(DAST)
    • SARIF形式のソースコードの静的アプリケーション・セキュリティ・テスト(SAST)static_code_scan)
  • 証明書の詳細 (certificate)
filename アップロードするファイルのパスと名前。 ファイルパスの前に@記号を付けます。 例えば、@slacksim-definition.json
表 1. ファイルアップロードマトリックス
カテゴリー データ形式 データ・タイプ ファイルの種類 メタデータ
コンサート目録 アプリケーションSBOM ConcertDef アプリケーション json メタデータなし
SBOMのビルド ConcertDef アプリケーション json メタデータなし
SBOMの展開 ConcertDef アプリケーション json メタデータなし
ソフトウェア構成 SBOM パッケージ ( CycloneDX ) - イメージ パッケージ_sbom json メタデータなし
SBOM パッケージ ( CycloneDX ) - ソース パッケージ_sbom json (オプション ) repo_url
脆弱性 Prisma Cloud スキャン イメージスキャン json (オプション ) scanner_name
Prisma Cloud スキャン イメージスキャン csv (オプション ) scanner_name
Sysdig イメージスキャン csv (オプション ) scanner_name
VDRスキャン ( CycloneDX ) イメージスキャン json (オプション ) scanner_name
Aqua Security イメージスキャン json (オプション ) scanner_name
VDRスキャン ( CycloneDX ) コードスキャン json (必須 ) repo_url
コンサート・カスタム・フォーマット コードスキャン csv (オプション ) scanner_name
(オプション ) repo_url
Mend コードスキャン csv (オプション ) scanner_name
(オプション ) repo_url
Qualys vm_scan csv (オプション ) scanner_name
SARIF 静的コードスキャン json (必須 ) repo_url
(必須 ) repo_name
コンサート・カスタム・フォーマット 静的コードスキャン csv (必須 ) repo_url
(必須 ) repo_name
SonarQube 静的コードスキャン csv (必須 ) repo_url
(必須 ) repo_name
(オプション ) scanner_name
Zap ダイナミック・スキャン json (必須 ) env_name
(必須 ) アクセスポイント名
コンサート・カスタム・フォーマット ダイナミック・スキャン csv (必須 ) env_name
(必須 ) アクセスポイント名
(必須 ) access_point_url
証明書 コンサート・カスタム・フォーマット 証明書 csv (必須 ) env_name
証明書SBOM ConcertDef 証明書 json メタデータなし
コンプライアンス コンプライアンス・カタログ コンプライアンス・カタログ json メタデータなし
コンプライアンス・ポスチャ コンプライアンス姿勢 json メタデータなし

用例

以下の各例は、Concertプラットフォームに特定のタイプのデータをアップロードするためのAPIコールの構造を示しています。

アプリケーション、ビルド、またはデプロイのSBOMファイルConcertDef形式)をアップロードする

次の例は、 ConcertDef フォーマットexample-SBOM.json と呼ばれるアプリケーション、ビルド、またはデプロイ SBOM ファイルをアップロードする。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=application_sbom" \
    -F "filename=@my-application-SBOM.json"

パッケージSBOMCycloneDX形式)のアップロード

以下の例は、 CycloneDX フォーマットmy-package-sbom.json というパッケージ SBOM ファイルをアップロードする。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=package_sbom" \
    -F "filename=@my-package-SBOM.json"

脆弱性スキャン(画像)のアップロード

次の例は、 my-image-scan.csv という脆弱性スキャンをアップロードします。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=image_scan" \
    -F "filename=@my-image-scan.csv" \
    -F 'metadata={"scanner_name": "<scan source>"}'

脆弱性スキャン(ソースコード)のアップロード

次の例は、 my-code-scan.csv という脆弱性スキャンをアップロードします。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=code_scan" \
    -F "filename=@my-code-scan.csv" \
    -F 'metadata={"scanner_name": "<scan source>"}'

ランタイムまたは仮想マシンの)脆弱性スキャンのアップロード

次の例は、 my-vm-scan.csv という脆弱性スキャンをアップロードします。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=vm_scan" \
    -F "filename=@my-vm-scan.csv" \
    -F 'metadata={"scanner_name": "<scan source>"}'

DAST動的脆弱性スキャンのアップロード

次の例では、 dast-scan.csv という動的アプリケーションセキュリティテスト(DAST)スキャンをアップロードします。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=dynamic_scan" \
    -F "filename=@/Users/jsmith/Desktop/dast-scan.csv" \
    -F 'metadata={"env_name": "prod","access_point_name": "<string>","access_point_url": "<url>"}'

SAST脆弱性スキャンのアップロード

次の例は、 sast-scan.csv という SARIF 形式の静的アプリケーションセキュリティテスト(SAST)スキャンをアップロードする。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/json' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=static_code_scan" \
    -F "filename=@/Users/jsmith/Desktop/sast-scan.csv" \
    -F 'metadata={"env_name": "prod","repo_url": "<url>", "repo_name":"<string>"}'

証明書の詳細をアップロード

証明書データは、csvファイルまたはJSONファイルとしてアップロードできる。 詳細な手順とサンプルファイルについては、 証明書データのアップロードを参照してください。

次の例は、 my-certificates.csv というcsvファイルをアップロードするものです。

$CURL -X 'POST' \
    "https://${concert_host}:${port}/ingestion/api/v1/upload_files" \
    -H 'accept: application/csv' \
    -H "InstanceID: 0000-0000-0000-0000" \
    -H "Authorization: <type> ${Concert_API_key}" \ 
    -H 'Content-Type: multipart/form-data' \
    -F "data_type=certificate" \
    -F 'metadata={"env_name": "prod"}'
    -F "filename=@my-certificates.csv"

以下の例では、証明書データのアップロードに my-certificates.json と呼ばれるJSONファイルを使用しています。

$CURL -X 'POST' \ "https://${concert_host}:{port}/ingestion/api/v1/upload_files" \ 
-H 'accept: application/json' \ 
-H "InstanceID: 0000-0000-0000-0000" \ 
-H "Authorization: <type> ${Concert_API_key}" \ 
-H 'Content-Type: multipart/form-data" \ 
-F "data_type=certificate" \ 
-F "filename=@my-certificates.json"
注意: また、APIを使用して証拠ファイルをアップロードすることもできます。 APIによる証拠のアップロードを参照してください。

HTTP 応答コード

  • 200 成功しました。 ファイルが正常にアップロードされました。
  • 400 無効なリクエストパラメータです。 リクエストの詳細を確認する。
  • 401 Unauthorized - 認証トークンが無効か不足しています。
  • 500 Internal Server Error - サーバーでエラーが発生しました。