開発者REST API

開発用REST APIについて

FutureVulsでは外部アプリ開発用にAPIを用意しています。 FutureVulsのデータをAPIを利用して取得できます。

開発者APIの概略は以下のようになっています。

  • コードを使ったSecOpsに利用可能
  • ドキュメントでモデルを確認可能
  • トークンを作成することでAPIからデータ取得可能
  • トークンには、権限が設定可能
  • トークンは、作成、編集、削除、再作成、有効化、無効化が可能
  • Authorizationを指定してAPIアクセス
  • 配列のオプションは、複数指定する
  • APIドキュメントから詳細を確認できる

image

開発用APIのトークン管理

開発用のAPIのトークンはグループ設定のトークンで管理されています。 image.png

ここでは、Scanner用のトークンや、開発者API用のトークンを管理可能です。

グループ設定はグループ管理者権限をもつユーザのみアクセス可能です。

開発者APIのトークン作成

トークンページで トークン追加 をクリックするとトークンの追加を行えます。

image.png

トークンの名前と権限を設定して作成します。

API権限は以下の通りです。

  • 読み込み、更新、グループ設定
  • 読み込み、更新
  • 読み込み

権限は各種文言の通りとなっています。 グループ設定 が必要なAPIは別ページで実装される予定です。

トークン編集

トークンの編集をクリックすることで、トークン名、API権限、スキャン権限を編集できます。

image.png

トークン再作成

トークンの再作成では、トークンのハッシュを再作成できます。
元に戻すことができないため、確認の上、再作成してください。

image.png

この他にも、トークンの無効化、トークンの有効化、トークンの削除も行えます。

APIメソッド一覧

https://rest.vuls.bizに、以下のURLを指定してHTTPリクエストを行ってください。

HTTPメソッド URL 説明 必要な権限 備考
GET /health health 読み込み
GET /v1/cve/{cveID} cve詳細 読み込み cveIDの取得方法
GET /v1/cves cve一覧 読み込み オプションあり
GET /v1/lockfiles Lockファイル一覧 読み込み オプションあり
GET /v1/lockfile/{lockfileID} Lockファイル詳細 読み込み lockファイルIDの取得方法
POST /v1/lockfile Lockファイル追加 更新 Lockファイル追加
PUT /v1/lockfile/{lockfileID} Lockファイル更新 更新 lockファイルIDの取得方法
DELETE /v1/lockfile/{lockfileID} Lockファイル削除 更新 lockファイルIDの取得方法
POST /v1/pkgCpe/cpe cpe追加 更新
DELETE /v1/pkgCpe/cpe/{cpeID} cpe削除 更新 cpeIDの取得方法
DELETE /v1/pkgCpe/cpe [DEPRECATED]cpe削除 更新 cpeIDの取得方法
GET /v1/pkgCpe/cpe/{cpeID} cpe詳細 読み込み cpeIDの取得方法
GET /v1/pkgCpe/pkg/{pkgID} package詳細 読み込み pkgIDの取得方法
GET /v1/pkgCpes package&cpe一覧 読み込み オプションあり
GET /v1/role/{roleID} ロール詳細 読み込み roleIDの取得方法
PUT /v1/role/{roleID} ロール更新 更新 roleIDの取得方法
DELETE /v1/role/{roleID} ロール削除 更新 roleIDの取得方法
GET /v1/roles ロール一覧 読み込み オプションあり
POST /v1/server/paste ペイストサーバの作成 serverIDの取得方法
PUT /v1/server/paste/{serverID} ペイストサーバの更新 serverIDの取得方法
GET /v1/server/uuid/{serverUuid} UUIDを使ったサーバ詳細 読み込み UUIDの取得方法
GET /v1/server/uuid/{serverUuid} UUIDを使ったサーバ詳細 読み込み UUIDの取得方法
GET /v1/server/{serverID} サーバ詳細 読み込み serverIDの取得方法
PUT /v1/server/{serverID} サーバ更新 更新 serverIDの取得方法
DELETE /v1/server/{serverID} サーバ削除 更新 serverIDの取得方法
GET /v1/servers サーバ一覧 読み込み オプションあり
GET /v1/task/{taskID} タスク詳細 読み込み taskIDの取得方法
PUT /v1/task/{taskID} タスク更新 更新 taskIDの取得方法
POST /v1/task/{taskID}/comment タスクコメント追加 更新 taskIDの取得方法
PUT /v1/task/{taskID}/ignore タスク非表示設定 更新 taskIDの取得方法
GET /v1/tasks タスク一覧 読み込み オプションあり
  • タスク一覧取得といった、レスポンスに複数のデータが含まれるAPIでは、そのIDの昇順にデータが取得されます。

  • 開発者APIドキュメントで、各APIのmodelをクリックすると、レスポンスのデータモデルが確認できます。 image.png

cveIDの取得方法

以下の2つの方法で取得できます。

  • 脆弱性タブを開き、IDを取得したい脆弱性のCVE ID列を参照する。
  • https://rest.vuls.biz/v1/cvesにGETリクエストを行い、脆弱性一覧を取得する。レスポンスJSONのcvesに含まれるデータのうち、IDを取得したい脆弱性のcveIDを参照する。 image

lockfileIDの取得方法

以下の2つの方法で取得できます。

  • サーバ>LOCKFILEタブを開き、IDを取得したいLockファイルをクリックして第3ペインを開く。ブラウザに表示されているURLから、pane3.idの値を参照する。

https://console.vuls.biz/<-省略->&pane3.show=1&pane3.type=lockfile&pane3.id=[ココ]

  • https://rest.vuls.biz/v1/lockfilesにGETリクエストを行い、脆弱性一覧を取得する。レスポンスJSONのlockfilesに含まれるデータのうち、IDを取得したい脆弱性のidを参照する。

cpeIDの取得方法

以下の方法で取得できます。

  • https://rest.vuls.biz/v1/pkgCpesにGETリクエストを行い、package&cpe一覧を取得する。レスポンスJSONのpkgCpesに含まれるデータのうち、IDを取得したいcpeのcpeIDを参照する。

pkgIDの取得方法

以下の方法で取得できます。

  • https://rest.vuls.biz/v1/pkgCpesにGETリクエストを行い、package&cpe一覧を取得する。レスポンスJSONのpkgCpesに含まれるデータのうち、IDを取得したいパッケージのpkgIDを参照する。

roleIDの取得方法

以下の2つの方法で取得できます。

  • ロールタブを開き、IDを取得したいロールのロールID列を参照する。(ロールID列は表示項目の編集から表示)
  • https://rest.vuls.biz/v1/rolesにGETリクエストを行い、ロール一覧を取得する。レスポンスJSONのrolesに含まれるデータのうち、IDを取得したいロールのidを参照する。

UUIDの取得方法

以下の2つの方法で取得できます。

  • サーバタブを開き、IDを取得したいサーバのサーバUUID列を参照する。(サーバUUID列は表示項目の編集から表示)
  • https://rest.vuls.biz/v1/serversにGETリクエストを行い、サーバ一覧を取得する。レスポンスJSONのserversに含まれるデータのうち、IDを取得したいサーバのserverUuidを参照する。

serverIDの取得方法

以下の2つの方法で取得できます。

  • サーバタブを開き、IDを取得したいサーバのサーバID列を参照する。(サーバID列は表示項目の編集から表示)
  • https://rest.vuls.biz/v1/serversにGETリクエストを行い、サーバ一覧を取得する。レスポンスJSONのserversに含まれるデータのうち、IDを取得したいサーバのidを参照する。

taskIDの取得方法

以下の2つの方法で取得できます。

  • タスクタブを開き、IDを取得したいタスクのタスクID列を参照する。(タスクID列は表示項目の編集から表示)
  • https://rest.vuls.biz/v1/tasksにGETリクエストを行い、タスク一覧を取得する。レスポンスJSONのtasksに含まれるデータのうち、IDを取得したいタスクのidを参照する。

オプション指定可能なパラメータ

FutureVulsのREST APIは大量データをサポートするために、ページネーション形式を採用しています。 APIによって、データを取得する際に以下のオプションが指定可能です。

各APIごとに指定可能なオプションは開発者APIドキュメントを参照ください。

パラメータ タイプ デフォルト値 説明
page integer 1 ページネーション分割されたデータの、取得するページ番号
limit integer 20 ページネーション分割するデータの、1ページあたりの件数
offset integer 0 ページネーション分割する前のデータのオフセット
filterCveID string - 指定したcveIDの脆弱性に関連するデータのみ取得
filterTaskID integer - 指定したtaskIDのタスクに関連するデータのみ取得
filterServerID integer - 指定したserverIDのサーバに関連するデータのみ取得
filterRoleID integer - 指定したroleIDのロールに関連するデータのみ取得
filterPkgID integer - 指定したpkgIDのpackageに関連するデータのみ取得
filterCpeID integer - 指定したcpeIDのcpeに関連するデータのみ取得
filterStatus array[string] [“new”, “investigating”, “ongoing”] 指定したステータスのタスクのみ取得
filterPriority array[string] - 指定した優先度のタスクのみ取得
filterIgnore boolean - 指定した非表示フラグのタスクのみ取得(trueの場合に非表示にしたもののみ、falseの場合全件表示)
filterMainUserIDs array[integer] - 指定したuserIDのユーザが主担当であるタスクのみ取得
filterSubUserIDs array[integer] - 指定したuserIDのユーザが副担当であるタスクのみ取得

例えばhttps://rest.vuls.biz/v1/servers?page=1&limit=20&offset=5にGETリクエストし、グループに登録されているサーバ一覧を取得した場合、 serverID順に並んだサーバ情報の先頭5件を除き、20件ずつ区切られたデータの最初の20件を取得します。 つまり、6件目のデータから25件目のデータが取得されます。

https://rest.vuls.biz/v1/servers?page=2&limit=20&offset=5とすると、26件目のデータから45件目のデータが取得されます。 オフセットを指定せず、https://rest.vuls.biz/v1/servers?page=1&limit=20とした場合は、1件目のデータから20件目のデータが取得されます。

また、https://rest.vuls.biz/v1/tasks?filterPriority=high&&filterPriority=mediumにGETリクエストを行うと、タスク優先度がHIGHもしくはMEDIUMであるタスク一覧が取得できます。

開発者APIサンプル

curlを使って開発者APIにアクセスする方法を紹介します。

脆弱性一覧

xxxxxxxxxxxxxにはトークンが入ります。

curl -H 'Authorization:xxxxxxxxxxxxx' 'https://rest.vuls.biz/v1/cves'

{"paging":{"totalPage":8,"offset":0,"page":1,"limit":20,"totalCount":158},"cves":[{"cveID":"CVE-2016-3191","scoreV2s":{"jvn":7.5,"nvd":7.5},"scoreV3s":{"nvd":9.8},"vectorV2s":
...
...

サーバ一覧

curl -H 'Authorization:xxxxxxxxxxxxx' 'https://rest.vuls.biz/v1/servers'

{"paging":{"totalPage":1,"offset":0,"page":1,"limit":20,"totalCount":2},"servers":[{"id":21384,"serverUuid":"","hostUuid":"","serverName":"ip-192-168-0-188","serverIpv4":"192.168.0.188","platformName":"aws","platformInstanceId":"","serverroleId":1522,"serverroleName":"default","osFamily":"amazon","osVersion":"2017.03","needKernelRestart":false,"lastScannedAt":"2018-12-17T00:05:22.376924Z","lastUploadedAt":"2018-12-17T00:05:28.254655Z","tags":[{"id":363,"name":"tag1"}],"successScanCount":12,"createdAt":"2018-11-22T07:16:35.665921Z","updatedAt":"2018-12-17T00:05:28.289345Z"},{"id":23772,"serverUuid":"","hostUuid":"","serverName":"dummy-server","serverIpv4":"","platformName":"","platformInstanceId":"","serverroleId":1522,"serverroleName":"default","osFamily":"pseudo","osVersion":"unknown","needKernelRestart":false,"lastScannedAt":"2018-12-16T22:06:16.629504Z","lastUploadedAt":"2018-12-16T22:08:52.065021Z","successScanCount":14,"createdAt":"2018-12-03T07:34:01.676822Z","updatedAt":"2018-12-16T22:08:52.071344Z"}]}

各種一覧には、フィルタも用意されているため、フィルタを利用してのアクセスも可能です。

ペーストサーバ一作成

curl -X POST "https://rest.vuls.biz/v1/server/paste" -H  "accept: application/json" -H  "Authorization: xxxxxxxxxxxxx" -d '{  "serverName": "amazonLinuxPaste", "osFamily": "amazon", "kernelRelease": "4.9.75-25.55.amzn1.x86_64",  "osVersion": "2018.03",  "pkgPasteText": "libgcc48 0 4.8.5 28.142.amzn1 x86_64\n python27-kitchen 0 1.1.1 5.6.amzn1 noarch\n nspr 0 4.21.0 1.43.amzn1 x86_64\n openssl 1 1.0.2k 16.153.amzn1 x86_64\n python27-docutils 0 0.11 1.15.amzn1 noarch\n info 0 5.1 4.10.amzn1 x86_64\n python27 0 2.7.18 2.141.amzn1 x86_64\n python27-iniparse 0 0.3.1 2.1.9.amzn1 noarch\n file-libs 0 5.37 8.49.amzn1 x86_64\n python27-requests 0 1.2.3 5.10.amzn1 noarch\n tcp_wrappers-libs 0 7.6 77.12.amzn1 x86_64\n rubygem20-psych 0 2.0.0 2.39.amzn1 x86_64\n python27-pystache 0 0.5.3 2.8.amzn1 noarch\n lua 0 5.1.4 4.1.9.amzn1 x86_64\n ruby20 0 2.0.0.648 2.39.amzn1 x86_64\n libevent 0 2.0.21 4.19.amzn1 x86_64\n nss 0 3.44.0 7.84.amzn1 x86_64\n libffi 0 3.0.13 16.5.amzn1 x86_64\n python26 0 2.6.9 2.92.amzn1 x86_64\n words 0 3.0 17.8.amzn1 noarch\n perl-macros 4 5.16.3 294.43.amzn1 x86_64\n fontpackages-filesystem 0 1.41 1.1.2.amzn1 noarch\n libedit 0 2.11 4.20080712cvs.1.6.amzn1 x86_64\n procps 0 3.2.8 45.16.amzn1 x86_64\n ncurses-base 0 5.7 4.20090207.14.amzn1 x86_64\n p11-kit-trust 0 0.18.5 2.3.amzn1 x86_64\n nss-tools 0 3.44.0 7.84.amzn1 x86_64\n libselinux 0 2.1.10 3.22.amzn1 x86_64\n perl-Encode 0 2.51 7.5.amzn1 x86_64\n file 0 5.37 8.49.amzn1 x86_64\n bzip2-libs 0 1.0.6 8.12.amzn1 x86_64\n perl-Storable 0 2.45 3.5.amzn1 x86_64\n python27-jinja2 0 2.7.2 3.16.amzn1 noarch\n audit-libs 0 2.6.5 3.28.amzn1 x86_64\n perl-File-Temp 0 0.23.01 3.5.amzn1 noarch\n libtirpc 0 0.2.4 0.16.15.amzn1 x86_64\n shadow-utils 2 4.1.4.2 13.10.amzn1 x86_64\n perl-Digest-MD5 0 2.52 3.5.amzn1 x86_64\n libnghttp2 0 1.33.0 1.1.6.amzn1 x86_64\n cyrus-sasl-lib 0 2.1.23 13.16.amzn1 x86_64\n rsync 0 3.0.6 12.13.amzn1 x86_64\n rpm 0 4.11.3 40.78.amzn1 x86_64\n libidn 0 1.18 2.8.amzn1 x86_64\n pinentry 0 0.7.6 6.11.amzn1 x86_64\n rpm-build-libs 0 4.11.3 40.78.amzn1 x86_64\n libassuan 0 2.0.3 3.3.amzn1 x86_64\n mingetty 0 1.08 5.9.amzn1 x86_64\n system-release 0 2018.03 0.2 noarch\n libsmartcols 0 2.23.2 63.33.amzn1 x86_64\n python27-PyYAML 0 3.10 3.10.amzn1 x86_64\n subversion 0 1.9.7 1.61.amzn1 x86_64\n perl-Pod-Perldoc 0 3.20 4.7.amzn1 noarch\n git-core-doc 0 2.18.5 2.73.amzn1 noarch\n perl-Exporter 0 5.68 3.5.amzn1 noarch\n python27-backports 0 1.0 3.14.amzn1 x86_64\n ntpdate 0 4.2.8p15 1.44.amzn1 x86_64\n perl-threads-shared 0 1.43 6.5.amzn1 x86_64\n newt-python27 0 0.52.11 3.11.amzn1 x86_64\n kernel 0 4.14.225 121.362.amzn1 x86_64\n perl-Digest 0 1.17 245.5.amzn1 noarch\n freetype 0 2.3.11 19.15.amzn1 x86_64\n keyutils 0 1.5.8 3.12.amzn1 x86_64\n copy-jdk-configs 0 3.3 10.3.amzn1 noarch\n dejavu-fonts-common 0 2.33 6.6.amzn1 noarch\n kernel-headers 0 4.14.225 121.362.amzn1 x86_64\n autogen-libopts 0 5.18 5.8.amzn1 x86_64\n golang-src 0 1.15.5 1.65.amzn1 noarch\n libXcomposite 0 0.4.3 4.6.amzn1 x86_64\n libX11 0 1.6.0 2.2.13.amzn1 x86_64\n pam 0 1.1.8 12.33.amzn1 x86_64\n vim-enhanced 2 8.0.0503 1.47.amzn1 x86_64\n zlib 0 1.2.8 7.18.amzn1 x86_64\n irqbalance 2 1.5.0 1.27.amzn1 x86_64\n python27-configobj 0 4.7.2 7.15.amzn1 noarch\n chkconfig 0 1.3.49.3 2.14.amzn1 x86_64\n openssh-server 0 7.4p1 21.75.amzn1 x86_64\n readline 0 6.2 9.14.amzn1 x86_64\n yum-plugin-upgrade-helper 0 1.1.31 46.30.amzn1 noarch"}'
パラメータ タイプ
serverName サーバの名前
osFamily OSの種類(amazon, centos, ubuntu, debian, redhat)
kernelRelease 以下詳細
kernelVersion 以下詳細
pkgPasteText 以下詳細
  • AmazonLinuxのパラメータ取得コマンド
パラメータ amazon
osFamily amazon
osVersion awk '{if ($0 ~ /Amazon\ Linux\ release\ 2/) printf("%s %s",$4, $5); else if ($0 ~ /Amazon\ Linux\ 2/) for (i=3; i<=NF; i++) printf("%s ", $i); else if (NF==5) print $5}' /etc/system-release
kernelRelease uname -r
kernelVersion 不要
pkgPasteText rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n"
  • CentOSのパラメータ取得コマンド
パラメータ centos6 centos7
osFamily centos centos
osVersion awk '{print $3}' /etc/redhat-release awk '{print $4}' /etc/redhat-release
kernelRelease uname -r uname -r
kernelVersion 不要 不要
pkgPasteText rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n
  • RHELのパラメータ取得コマンド
パラメータ redhat
osFamily redhat
osVersion awk '{print $7}' /etc/redhat-release
kernelRelease uname -r
kernelVersion 不要
pkgPasteText rpm -qa --queryformat "%{NAME} %{EPOCHNUM} %{VERSION} %{RELEASE} %{ARCH}\n
  • Debianのパラメータ取得コマンド
パラメータ debian
osFamily debian
osVersion cat /etc/debian_version
kernelRelease uname -r
kernelVersion `uname -a
pkgPasteText $(dpkg-query -W -f="\${binary:Package},\${db:Status-Abbrev},\${Version},\${Source},\${source:Version}\n")
  • Ubuntuのパラメータ取得コマンド
パラメータ ubuntu
osFamily ubuntu
osVersion `lsb_release -sr
kernelRelease uname -r
kernelVersion 不要
pkgPasteText $(dpkg-query -W -f="\${binary:Package},\${db:Status-Abbrev},\${Version},\${Source},\${source:Version}\n")

Lockファイル追加

パラメータ 説明 備考
serverID Lockファイルを追加するサーバのID serverIDの取得方法
path Lockファイルのパスとファイル名 サポートされているLockファイル
fileContent Lockファイルの内容
curl -X POST -H 'accept: application/json' -H Authorization:XXXXXX 'https://rest.vuls.biz/v1/lockfile' -d '{ "serverID": 192730, "path": "/REST_API/go.sum", "fileContent": "github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=\n github.com/go-gitea/gitea v1.2.3 h1:L0SC8kIr3+UnxNAte9M9bmdQ8Bdrc6I5b4Zuz/T+NCw=\n github.com/go-gitea/gitea v1.2.3/go.mod h1:g8iUbfFNyuJp8u7GsSggxI8NQyuxeGTyqxogl3imbQM=\n github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=\n github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=\n golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\n golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\n golang.org/x/crypto v0.0.0-20190122013713-64072686203f/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\n golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=\n golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=\n golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\n golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\n golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\n golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\n golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba h1:9bFeDpN3gTqNanMVqNcoR/pJQuP5uroC3t1D7eXozTE=\n golang.org/x/crypto v0.0.0-20191119213627-4f8c1d86b1ba/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\n gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=\n gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=\n"}'

タスク一覧(すべてのタスク取得)

curl -H 'Authorization:xxxxxxxxxxxxx' 'https://rest.vuls.biz/v1/tasks?filterStatus=new&&filterStatus=investigating&&filterStatus=ongoing&&filterStatus=workaround&&filterStatus=patch_applied'

{"paging":{"totalPage":8,"offset":0,"page":1,"limit":20,"totalCount":157},"tasks":[{"id":1331193,"cveID":"CVE-2014-9402","serverID":21384,"serverUuid":"","serverName":"ip-192-168-0-188","serverTags":["tag1"],"osFamily":"amazon","osVersion":"2017.03","roleID":1522,"roleName":"default","hasExploit":false,"hasMitigation":false,"hasWorkaround":false,"pkgCpeNames":["glibc","glibc-common","glibc-devel","glibc-headers"],"pkgNotFixedYet":false,"applyingPatchOn":"1970-01-01T00:00:00Z","status":"new","priority":"none","ignore":false,"detectionTools":[{"name":"vuls"}],"advisoryIDs":["ALAS-2018-1017"],"createdAt":"2018-11-22T07:16:39.677041Z","updatedAt":"2018-12-17T00:05:28.289345Z"},{"id":1331194,"cveID":"CVE-2015-5180","serverID":21384,"serverUuid":"","serverName":"ip-192-168-0-188","serverTags":["tag1"],"osFamily":"amazon","osVersion":"2017.03","roleID":1522,"
...
...

タスク一覧はデフォルトで、workaroundとpatch_appliedが除外されています。すべてのタスクを取得するには、上記のように、filterStatusで全てのステータスを指定する必要があります。

開発者APIの注意点

  • 一覧データの一度で取得できる最大件数は1000件
  • ソフトウェア一覧や、タスク一覧などのデータが多い物に関しては、フィルタを使用してアクセスすると短時間で取得可能
  • デフォルトが指定されているものもあるので、ドキュメントでデフォルトを確認する
  • 配列指定するものは、同じキーを複数 && で繋いでいく。 (ex. filterStatus=new&&filterStatus=investigating )