Getting Started
AVM を最初に動かすまでの運用パス
AVM を理解する最も早い方法は、 通常の運用パスをそのままたどることです。 参照データを投入し、assets と software を取り込み、 canonical / unresolved mappings を確認し、 alerts を生成して、その結果を見ていきます。
AVM をどう捉えるか
AVM は、単一の import 画面や単一の alert list としてではなく、 ワークフローとして捉えると最も理解しやすくなります。 reference-side data と inventory-side data の両方が重要です。 canonical linking は inventory quality を高めます。 vulnerability data と product references は matching 側を支えます。 そして alert generation が、 それらの入力を operational results に変えます。
つまり、最初の目標は一度で全部を完璧にすることではありません。 観測された software が、 どのように reviewable な alert state に変わるのか、 その流れを理解することが最初の目標です。
Practical mindset: まずは reference coverage と visibility を整え、 次に linking quality を改善し、 その後に結果を確認していく、という考え方が実用的です。
必要なもの
AVM を始める前に、次を準備してください。
- Java 21 以降
- AVM の jar ファイル
- MySQL(推奨)または組み込み H2 database のいずれか
Recommended path: 通常運用や永続データを扱うなら MySQL を使います。 H2 は quick evaluation や local testing 向けです。
AVM を取得する
AVM はオープンソースプロジェクトです。 GitHub から source code を確認したり、 実行可能な artifacts を取得したりできます。
GitHub repository:
https://github.com/notegridx/asset-vuln-manager
ビルド済みの .jar ファイルは GitHub Releases で公開されています。
source から build せずに AVM を試す最も手早い方法です。
実行モードを選ぶ
AVM を始める方法として、一般的には二つあります。
MySQL で実行する
通常利用、永続データ、より実運用に近い環境に向いています。
H2 で実行する
quick evaluation、デモ、 データベースサーバを準備せずに AVM を試す用途に向いています。
設定の考え方
AVM は環境変数で設定できます。 これらの設定は、database connection、security behavior、 runtime options を制御します。
設定は次のどちらでも渡せます。
- 環境変数で指定する(推奨)
- コマンドライン引数で指定する(簡単に試す用)
環境変数を使う場合(推奨)
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/your-db-name
export SPRING_DATASOURCE_USERNAME=your-db-user
export SPRING_DATASOURCE_PASSWORD=your-db-password
export APP_SECURITY_BOOTSTRAP_ADMIN_ENABLED=true
export APP_SECURITY_BOOTSTRAP_ADMIN_PASSWORD=your-admin-password
export SERVER_PORT=8080
その後、AVM を起動します。
java -jar asset-vuln-manager-0.1.0.jar
Key idea: 設定と実行を分けることで、 systemd、Docker、Kubernetes などの環境でも AVM を運用・自動化・デプロイしやすくなります。
MySQL で実行する(推奨)
通常利用では、AVM は MySQL で動かす前提が最も適しています。 永続データを持ち、 より実運用に近い環境で使いたい場合の推奨構成です。
Quick start(コピペ用、コマンドライン引数):
java -jar asset-vuln-manager-0.1.0.jar --spring.datasource.url="jdbc:mysql://localhost:3306/your-db-name" --spring.datasource.username="your-db-user" --spring.datasource.password="your-db-password" --app.security.bootstrap-admin.enabled=true --app.security.bootstrap-admin.password="your-admin-password" --server.port=8080
読みやすい形(Linux/macOS):
java -jar asset-vuln-manager-0.1.0.jar \
--spring.datasource.url="jdbc:mysql://localhost:3306/your-db-name" \
--spring.datasource.username="your-db-user" \
--spring.datasource.password="your-db-password" \
--app.security.bootstrap-admin.enabled=true \
--app.security.bootstrap-admin.password="your-admin-password" \
--server.port=8080
Notes:
起動前に MySQL が利用可能である必要があります。
bootstrap admin は、明示的に有効化した場合にのみ作成されます。
database name、credentials、admin password、port は環境に合わせて調整してください。
より構造的に設定したい場合は、コマンドライン引数の代わりに環境変数も使えます。
H2 で実行する(quick evaluation)
MySQL を準備せずに AVM を試したい場合は、 組み込みの H2 database でも実行できます。 これは quick local evaluation や feature exploration に向いています。
H2 はセットアップのハードルを下げますが、 継続利用には MySQL の方が適しています。
Quick start(H2):
java -jar asset-vuln-manager-0.1.0.jar --spring.profiles.active=h2 --app.security.bootstrap-admin.enabled=true --app.security.bootstrap-admin.password="your-admin-password" --server.port=8080
読みやすい形(Linux/macOS):
java -jar asset-vuln-manager-0.1.0.jar \
--spring.profiles.active=h2 \
--app.security.bootstrap-admin.enabled=true \
--app.security.bootstrap-admin.password="your-admin-password" \
--server.port=8080
Notes:
H2 は evaluation、デモ、quick local testing に向いています。
永続利用や production-oriented な運用には MySQL を使ってください。
インライン引数の代わりに環境変数で設定することもできます。
最初のステップ
これは初回セットアップ用の流れであるだけでなく、 システムの通常運用ループでもあります。
Step 1: 参照データを投入する
まず、AVM が使う reference-side data を投入します。 実際には、canonical CPE dictionary と、 後続の評価に使う vulnerability-side data の両方を sync します。
このステップが最初に来るのは、 AVM が canonical linking と vulnerability matching の両方で reference data に依存しているからです。 canonical vendor / product references がなければ software を正しく link できません。 vulnerability data がなければ、後段の alert generation も意味のある結果を出せません。
CPE dictionary を sync
software resolution と matching に使う canonical vendor / product references を読み込みます。
Vulnerability data を sync
後続の alert generation で、 installed software を stored conditions に対して評価できるよう、 CVE-side data を読み込みます。
関連する operational surfaces については Admin を参照してください。
Step 2: assets と software を import する
reference data が利用可能になったら、 asset と software の inventory を取り込みます。 assets は環境内の host anchor になります。 software rows は、後で linking と evaluation に使われる inventory-side evidence になります。
AVM では、asset identity が先に存在している状態で software import するのが最も有効です。 software rows は assets に紐付いており、 後から生成される alerts も host context の中で初めて意味を持つからです。
まず assets を import
software rows が紐付く先となる host records を作成します。
次に software を import
vendor、product、publisher、version などの observed software rows を、 可能な限り多くの情報とともに追加します。
field-level の詳細や JSON examples については Import を参照してください。
Step 3: canonical mapping を確認する
import の後は、software が canonical vendor / product identity に どう linked されているかを確認します。 これは AVM において最も重要なステップの一つです。 後続の vulnerability evaluation は、 この linkage の品質に依存するからです。
AVM は candidate mappings を提案できますが、 review surface 自体は見えるまま残ります。 operators は suggested candidate set を確認し、 software を link すべきか、調整すべきか、 それとも unresolved のまま残して追加 review すべきかを判断できます。
Candidate-driven review
AVM は candidate vendor / product mappings を表示するため、 linking が hidden ではなく reviewable になります。
User-controlled linkage
operators は mappings を確認、調整、または見送ることができ、 automated resolution を無条件の truth として扱わずに済みます。
Step 4: unresolved mappings を確認する
一部の software rows は unresolved のまま残ります。 これは正常です。 特に source data にノイズが多い場合や、 naming が canonical dictionary と異なる場合にはよく起こります。
unresolved mappings は早めに確認してください。 そこには、AVM が installed software の identity を理解するために まだ助けを必要としている箇所や、 aliases、synonyms、後続の review actions によって coverage を改善できる箇所が現れます。
なぜ早めに見るのか
canonical coverage が高いほど、 downstream matching quality が良くなるからです。
何を見るのか
vendor naming variation、product naming ambiguity、 そして alias / synonym support が必要な rows を確認します。
Step 5: alerts を生成する
reference data が投入され、 inventory に十分な canonical coverage が得られたら、 alert state を生成します。 ここで AVM は、software、canonical identity、version evidence、 stored vulnerability conditions を operational results に変換します。
generation は、後から canonical coverage が改善した場合にも重要です。 aliases、synonyms、review actions によって identity picture が変わったなら、 alert state もその改善を反映するよう更新されるべきです。
背景となる decision path については Matching を参照してください。
Step 6: 結果を確認する
alerts が生成されたら、 それを生み出した context とあわせて確認します。 AVM は、final result だけでなく、 そこに至る path の品質も operators が見られるよう設計されています。
この段階で役立つ確認ポイントには、次のようなものがあります。
重要な software rows が unresolved のままではないか
もし残っているなら、matching coverage はまだ不完全かもしれません。
必要な箇所に version data があるか
version evidence が弱いと、applicability precision が下がることがあります。
alert results は software context と整合しているか
alerts は software identity と asset context を合わせて見たときに 納得できるものであるべきです。
最初の1周で期待すべきこと
最初の1サイクルで、 すべてが完全にきれいな結果になるとは限りません。 すでに link 可能で matchable な software もあれば、 unresolved のまま残るものもあります。 strong version evidence を持つものもあれば、 そうでないものもあります。
それは正常です。 AVM は、一回で naming や applicability の問題をすべて解決したかのように見せるのではなく、 iterative improvement のために設計されています。
普通に起こること
resolved software、unresolved software、 そして reviewable alert results が混在します。
最初から不要なこと
system から学ぶ前に、 perfect canonical coverage を達成しておく必要はありません。
AVM の最初の30分
実践的な最初のセッションとしては、次の順番がおすすめです。
1. Reference data を sync する
CPE dictionary と vulnerability-side data を先に投入しておくことで、 linking や alert generation が機能しやすくなります。
2. 小さな asset set を追加する
host context が見やすいように、 まずは少数の assets を import します。
3. 現実的な software sample を追加する
vendor、product、publisher、version の値を、 可能な範囲で含めます。
4. canonical / unresolved mappings を確認する
これにより、AVM が raw inventory と canonical identity をどう区別し、 どこにまだ review が必要かをすぐ把握できます。
5. alerts を生成する
resulting alert state を確認し、 それを software と asset context にさかのぼって見ていきます。
おすすめの読み進め順
基本の workflow を一通り見た後は、 次の順番で読むと理解しやすくなります。
この順番だと、 high-level operating model から、 それを支えるより詳細な mechanics へ自然に進めます。
Example
新しいユーザーが、まず canonical reference data と vulnerability data を sync し、 次に少数の assets と software を import したとします。 いくつかの software rows はすぐに canonical vendor / product references に linked される一方で、 source naming が広すぎる、あるいは特殊すぎるために unresolved のまま残る rows もあります。 ユーザーは canonical / unresolved mappings を確認し、 reference coverage を改善し、 その後 alerts を生成します。
この最初の1サイクルを終えた時点で、 ユーザーは AVM の最も重要な考え方をすでに理解しています。 system は単に inventory を ingest しているのではなく、 observed software を、 review 可能で改善可能な vulnerability context に変えるのを助けているのです。
AVM が避けようとしていること
ワンクリックのブラックボックス設定
AVM は、運用パスを見えるまま保つよう設計されています。
import を full resolution と混同すること
import された software には、 まだ canonical review が必要なものがあります。
alerts だけを唯一の有用な出力と考えること
canonical review や unresolved mappings も、 それ自体が価値ある結果です。
iteration を隠すこと
aliases の改善、backfill coverage の向上、 alert generation の再実行は通常運用の一部です。
まとめ
AVM の Getting Started は、 一つの operational loop を理解することだと考えると分かりやすくなります。 参照データを投入し、 assets と software を import し、 canonical / unresolved mappings を確認し、 alerts を生成し、 その結果を context とともに確認する、という流れです。
このループが見えるようになると、 AVM 全体も理解しやすくなります。 system の価値は alerts を出すことだけでなく、 そこに至る path を可視化し、改善可能にしている点にあります。