Import
データが AVM に入るまで
AVM は staged import model を採用しています。 そのため inventory data は、validation、preview、 そして元の文脈を保ったまま取り込まれます。 software の import はワークフローの始まりであって、 終わりではありません。
Import はプロセスの終わりではない
AVM は staged workflows を通じて inventory を import します。 asset data と software data は、まず staging records として validation され、 その後 main operational tables に commit されます。 これにより、import behavior が見える形で review 可能になります。
software import では、vendor、publisher、product、version などの raw values が保持されます。 これらの raw values は重要です。 canonical resolution や vulnerability matching は、 import の後に行われるのであって、 import の代わりに行われるわけではないからです。
Key point: import に成功したからといって、 その software がすでに canonically resolved されているとか、 matching の準備が完全に整っているとは限りません。
Import flow
import staging の目的は、 inventory ingestion を inspectable にすることであり、 単一の opaque upload action に隠すことではありません。
まず assets、その後 software
AVM では、software rows は assets に紐付く前提です。 実際には、software を import する前に asset records が存在している必要があります。
asset は、後続の software review や alert generation における host anchor になります。 そのため、software import は asset identity が利用可能であることに依存します。
Asset import
software rows が紐付く先となる host-level records を作成します。
Software import
既知の asset identity に結び付いた observed software rows を追加します。
assets と software はどう結び付くか
AVM の import では、
software rows は internal IDs で assets に結び付けられるわけではありません。
代わりに、asset JSON と software JSON の両方で
同じ external_key を使って関連付けます。
つまり、asset とその software は、 import 時に同じ stable external identifier を共有している必要があります。
最小の asset 例
{
"external_key": "example-uuid-0001",
"name": "server-01"
}
最小の software 例
{
"external_key": "example-uuid-0001",
"product": "Docker Desktop",
"vendor": "Docker Inc.",
"version": "4.60.1"
}
import 時に、AVM はこの共有された external_key を
internal asset_id に解決します。
その後 software row は、その asset に紐付いた record として保存されます。
external_key は imports をまたいで stable であるべきです。
これが変わると、AVM はその asset を別の system と見なします。
Key idea:
external_key は、
asset と software を結び付ける import-side identity です。
AVM は validation の後にこれを internal relationships に変換します。
osquery query の例
以下は、同様のデータを osquery で取得する例です。
実際には、これらの結果を AVM の JSON format に変換して import します。
Asset-side の例
osqueryi --json "
SELECT
uuid AS external_key,
hostname AS name
FROM system_info;
"
system_info table は、
uuid や hostname といった
stable host identity を提供し、
AVM の asset fields にマッピングできます。
Software-side の例(Windows)
osqueryi --json "
SELECT
(SELECT uuid FROM system_info LIMIT 1) AS external_key,
name AS product,
publisher AS vendor,
version
FROM programs;
"
programs table は installed software inventory を提供します。
external_key は通常、変換時に付与され、
software rows を対応する asset に結び付けるために使われます。
osquery をデータソースとして使う
AVM は特定の data source を必須としていませんが、 osquery のようなツールは asset / software inventory の収集によく使われます。
osquery は system information を SQL tables として公開します。 これらの tables を query し、 AVM 互換の JSON に変換して import できます。
Asset-side data
system_info や
os_version などの tables は、
host identity、OS details、hardware、CPU information を提供し、
AVM の asset fields に対応付けられます。
Software-side data
Windows では、programs table が
installed software inventory の代表的なソースです。
name、version、publisher、install location などを取得できます。
Key idea:
osquery data は通常そのまま import するのではなく、
AVM JSON に変換して使います。
この変換ステップで、osquery fields を AVM fields に対応付け、
stable な external_key を付与します。
osquery について詳しくは Official documentation を参照してください。
AVM が assets / software に保持できるもの
import source 側の fields を考える前に、 まず AVM が実際に何を保持できるよう設計されているかを理解するのが大切です。 richer import の目的は、 source から取れるあらゆる field を集めることではありません。
つまり、source data が豊富でも、 それが AVM の actual fields にマップされなければ意味がありません。
AVM における asset record
assets table には、
host identity と context が保存されます。
ownership、platform、OS、hardware、CPU、system metadata などです。
external_key
name
asset_type
owner
note
source
platform
os_name
os_version
os_build
os_major
os_minor
os_patch
arch
system_uuid
serial_number
hardware_vendor
hardware_model
hardware_version
board_vendor
board_model
board_version
board_serial
cpu_brand
cpu_physical_cores
cpu_logical_cores
cpu_sockets
physical_memory
computer_name
hostname
local_hostname
last_seen_at
AVM における software record
software_installs table には、
raw evidence と canonical linkage fields の両方を持つ
observed software が保存されます。
asset_id
type
source
source_type
vendor_raw
product_raw
version_raw
publisher
vendor
product
version
version_norm
normalized_vendor
normalized_product
cpe_name
cpe_vendor_id
cpe_product_id
install_location
installed_at
package_identifier
install_source
package_manager
bundle_id
edition
channel
release_label
purl
last_seen_at
import_run_id
canonical_link_disabled
Key idea: import は、後で linking、review、matching に使えるよう、 AVM が実際に保持・活用できる fields を埋めることが重要です。
より詳細な asset の例
AVM の assets は、
最小限の external_key と name よりも
はるかに多くの host context を保持できます。
source がすでに operating system、hardware、CPU、
host identity details を持っている場合、
それらの context を AVM 内にも残せるようになります。
{
"arch": "64-bit",
"asset_type": "endpoint",
"computer_name": "example-host-01",
"cpu_brand": "Intel(R) Core(TM) m3-6Y30 CPU @ 0.90GHz",
"cpu_logical_cores": "2",
"cpu_physical_cores": "2",
"cpu_sockets": "1",
"external_key": "example-uuid-0001",
"hardware_model": "VirtualBox",
"hardware_vendor": "innotek GmbH",
"hardware_version": "-1",
"hostname": "example-host-01",
"local_hostname": "example-host-01",
"name": "example-host-01",
"os_build": "26200",
"os_major": "10",
"os_minor": "0",
"os_name": "Microsoft Windows 11 Pro",
"os_version": "10.0.26200",
"owner": "example-team",
"physical_memory": "-1",
"platform": "windows",
"serial_number": "example-serial-1234",
"source": "OSQUERY",
"system_uuid": "example-uuid-0001"
}
これは assets table の asset-side fields に自然に対応します。
たとえば host identity
(external_key、name、
hostname、computer_name、
local_hostname、system_uuid、
serial_number)、
platform と OS
(platform、os_name、
os_version、os_build、
os_major、os_minor、
os_patch、arch)、
hardware
(hardware_vendor、hardware_model、
hardware_version、board_vendor、
board_model、board_version、
board_serial)、
CPU / memory context
(cpu_brand、cpu_physical_cores、
cpu_logical_cores、cpu_sockets、
physical_memory)などです。
より詳細な software の例
AVM の software rows も、 最小限の vendor / product / version payload より はるかに豊かな observed evidence を保持できます。
{
"external_key": "example-uuid-0001",
"install_location": "C:\\Program Files\\Docker\\Docker",
"last_seen_at": "2026-03-19 00:05:43",
"product_raw": "Docker Desktop",
"publisher": "Docker Inc.",
"source": "osquery",
"source_type": "osquery",
"type": "application",
"vendor_raw": "Docker Inc.",
"version_raw": "4.60.1"
}
これは software_installs table の software-side fields に対応します。
AVM は
vendor_raw、
product_raw、
version_raw、
publisher のような raw evidence、
source、
source_type、
import_run_id のような provenance、
install_location、
installed_at、
package_identifier、
install_source、
package_manager のような installation context、
さらに type、
arch、
edition、
channel、
release_label、
bundle_id、
purl などの product-shape metadata を保持できます。
AVM には、
vendor、product、version、
version_norm、normalized_vendor、
normalized_product、cpe_name、
cpe_vendor_id、cpe_product_id などの
normalized / canonical fields もありますが、
これらは source system が最初から直接提供するものというより、
後段の運用処理で埋まっていく fields と考えるのが適切です。
osquery data が AVM records にどう対応するか
osquery は通常、AVM に one-to-one で取り込まれるわけではありません。 代わりに、osquery tables を読み取る transformation step が入り、 AVM が実際に保存できる fields に合わせた asset / software JSON を生成します。
Asset-side mapping
host-oriented な osquery tables から、
1 system につき 1 つの AVM asset record を作る形に変換できます。
典型的な target fields は
external_key、name、
hostname、computer_name、
system_uuid、platform、
os_name、os_version、
os_build、arch、
hardware_vendor、hardware_model、
cpu_brand などです。
Software-side mapping
installed-software 系の osquery tables は、
同じ stable external_key を通じて
その asset に紐付く AVM software rows に変換できます。
典型的な target fields は
type、source、
source_type、vendor_raw、
product_raw、version_raw、
publisher、install_location、
installed_at、install_source、
package_identifier などです。
なぜ重要か
目的は source data を ingest すること自体ではなく、 evidence を保持しつつ、 後続の review、linking、matching を支えられる形で AVM 独自の operational model を埋めることにあります。
Typical osquery sources
osquery から AVM import JSON を作る場合、 最終 payload は通常、単一 query の結果をそのまま使うのではなく、 複数の osquery tables を組み合わせて作られます。
よくあるパターンは、
host-side tables から host ごとに 1 つの asset object を作り、
installed-software tables から同じ host に対する複数の software objects を作ることです。
そして両者は同じ external_key で結び付けられます。
Asset-side tables
system_info、
os_version、
cpu_info などの tables は、
AVM asset records を作るのに役立ちます。
実際には、host identity、platform、OS version、hardware、CPU などの
host metadata を提供し、
assets table に自然にマッピングできます。
Software-side tables
Windows では、
programs が installed software inventory の
最も直接的なソースになることが多いです。
software name、version、publisher、install location、 install source、install date、identifying number などの fields を AVM software-side fields に対応付けられます。
Transformation step
最終的な AVM import files は通常、 raw osquery tables そのものではなく transformed outputs です。 source-side field names を AVM の asset / software model に対応付けるのはこの変換段階です。
osquery から AVM への field mapping の例
Asset-side の例
| osquery field | AVM field |
|---|---|
system_info.hostname |
hostname または name |
system_info.uuid |
system_uuid または stable な external_key |
system_info.cpu_brand |
cpu_brand |
system_info.cpu_physical_cores |
cpu_physical_cores |
system_info.cpu_logical_cores |
cpu_logical_cores |
system_info.cpu_sockets |
cpu_sockets |
system_info.physical_memory |
physical_memory |
system_info.hardware_vendor |
hardware_vendor |
system_info.hardware_model |
hardware_model |
os_version.name |
os_name |
os_version.version |
os_version |
os_version.major |
os_major |
os_version.minor |
os_minor |
os_version.patch |
os_patch |
os_version.build |
os_build |
os_version.platform |
platform |
os_version.arch |
arch |
Software-side の例
| osquery field | AVM field |
|---|---|
programs.name |
product_raw |
programs.version |
version_raw |
programs.publisher |
publisher、場合によっては vendor_raw |
programs.install_location |
install_location |
programs.install_source |
install_source |
programs.install_date |
installed_at |
programs.identifying_number |
package_identifier |
正確な transformation rules は、 あなたの import pipeline に依存します。 AVM は osquery 固有の field names を必須としていませんが、 stable な asset identity と raw software evidence を保持すると最も活用しやすくなります。
Accepted field styles
AVM は、inventory や integration tooling でよく使われる 一般的な JSON naming patterns を受け入れます。 これにより、import 前にデータを大きく整形しなくても済みやすくなります。
一般的な形式
external_key、
product_raw、
version_raw のような snake case です。
こちらもサポート
一部の integrations で使われる camel case 形式も受け付けます。 特に import-side keys を同じ operational field に対応付ける場合です。
これは naming の不統一を推奨するためではなく、 実際の inventory sources に対して import を実用的にするためです。
なぜ raw values を保持するのか
AVM は imported software を、 すでに完璧に正規化されたものとしてではなく、 observed inventory として保存します。 raw vendor、publisher、product、version values は、 review、canonical linking、alias creation、 auditability のために後から必要になることがあります。
これは重要です。 inventory data はめったに完璧には整っていないからです。 raw evidence を保持することで、 元の source-side view を失わずに後から resolution を改善できます。
Design principle: import は evidence を消すのではなく、 保持するべきです。
Import staging
AVM は、asset / software import のために 明示的な staging entities を使います。 これにより uploads は、 main inventory records に影響する前に validation と preview ができます。
ImportRun
特定の import execution を追跡し、 staged rows、status、後の review context を結び付けます。
ImportStagingAsset
import commit 前の staged asset rows を保持します。
ImportStagingSoftware
import commit 前の staged software rows を保持します。
なぜ重要か
operators は最終ステップの前に、 何が valid か、何が invalid か、 何が import されようとしているかを確認できます。
Import は canonical resolution を保証しない
software row は import に成功しても、 canonical の観点では unresolved のままかもしれません。 これは正常です。
import が答えるのは 「何が観測され、system に受け入れられたか」 という問いです。 canonical resolution が答えるのは別の問い、 「この software はどの reference identity に対応するのか」 です。
Import success が意味すること
その row は import validation を通過し、 operational inventory の一部になったということです。
Import success が意味しないこと
その row がすでに fully normalized であり、 canonically linked され、 perfect な vulnerability matching の準備が整っている、という意味ではありません。
software import 時の Replace と Append の選び方
AVM では、software inventory を時間とともにどう管理したいかに応じて、 二つの import mode を選べます。
Append rows
既存データを消さずに、 新たに観測された software を追加したい場合に使います。
Typical use:
- asset に新しい application がインストールされた
- 複数の sources からデータを集めている
- 観測データを時間とともに蓄積したい
Behavior:
- 既存の software records はそのまま残る
- 新しい rows が追加される
- 既存 software に紐付く alerts には影響しない
Replace asset software
import した内容が、 各 asset の current full state を表している場合に使います。
Typical use:
- 定期的な inventory updates(例: daily scan)
- source of truth(CMDB、full scan)との同期
Behavior:
- 既存 software は imported set で置き換えられる
- 新しい import に存在しない software は削除される
- 削除された software に紐付く alerts は、 次回の recalculation で自動的に close される
Important: alert updates は import 中には実行されません。 software を import した後、 特に Replace を使った場合は、 現在の software inventory と alert state を同期するために Generate Alerts を実行してください。
推奨される運用フロー
- software を import
-
Append → incremental update
Replace → full state refresh - (必要なら)linking / unresolved mappings を review
- Generate Alerts を実行
Key idea: Append は dataset を増やす方式(observation-oriented)、 Replace は current state を反映する方式(state-oriented)です。 Generate Alerts は、その state に security results を同期させます。
Import 後に起こること
software が import された後、 AVM は canonical resolution と review workflows を続けます。 software row に応じて、 dictionary resolution、alias / synonym による補助、 unresolved mapping review、 canonical backfill、 その後の alert recalculation などが行われます。
どのようなときに unresolved entries が普通に発生するか
unresolved rows は、 software naming にノイズが多いとき、 package metadata が不完全なとき、 vendor names が canonical dictionary と異なるとき、 product strings が広すぎて初回では安全にマップできないときなどに普通に発生します。
AVM は、これらの rows を見える形で保ちます。 それらは現実の import result の一部であり、 隠すべき例外的 corner case ではないからです。
なぜ version information が役立つのか
import 後に重要なのは product identity だけではありません。 vulnerability が適用されるかどうかは、 version information に大きく左右されることがあります。 import 時に version values を入れておくことで、 後続の matching がより有用になり、 不必要な曖昧さも減らせます。
version data がある場合
AVM は後続の matching steps で、 より強い version-aware evaluation を行えます。
version data がない場合
canonical identity だけでも役立ちますが、 downstream の applicability decisions は精度が落ちることがあります。
Import sources と provenance
AVM は、source や source type などの import-side context も保持します。 これにより、 row がどのように system に入ったのかを残し、 後の review、トラブルシュート、data-quality work を支えます。
実際には、import data は manual preparation、inventory scripts、platform exports、 osquery のような tooling など、 さまざまな sources から来ます。 AVM はその context を捨てずに活用します。
Example
software upload に、 import には十分だが canonical product に即座には解決できない product name が含まれていることがあります。 AVM はその row を保持し、 正しい asset に紐付け、 unresolved review の対象として使えるようにしておくべきです。
後から alias や synonym が改善され、 canonical backfill が行われると、 同じ software row が raw evidence を再 import しなくても vulnerability conditions に対して matchable になることがあります。
AVM が避けようとしていること
一段階の opaque ingestion
import は見える形で review 可能であるべきで、 単一の all-or-nothing action の裏に消えるべきではありません。
raw source evidence を捨てること
source-side values は import 後も重要な場合があります。
import と normalization を同一視すること
system にデータを入れることと、 その canonical identity を解決することは別です。
不完全な coverage を隠すこと
unresolved rows は見える形で残り、 system を反復的に改善できるべきです。
まとめ
AVM の import は staged process です。 observed inventory を保持し、 それを見える形で validation し、 canonical identity や vulnerability applicability が すでに解決済みであるかのようには扱わずに system へ commit します。
これにより import は信頼できる operational starting point になります。 assets と software は元の context を保ったまま platform に入り、 その後 canonical linking、unresolved review、backfill、matching を通じて coverage を改善していけます。