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

データをアップロード
staging に validation
結果を preview
import を commit
review と backfill

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 は、 uuidhostname といった 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_infoos_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_keyname よりも はるかに多くの 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_keynamehostnamecomputer_namelocal_hostnamesystem_uuidserial_number)、 platform と OS (platformos_nameos_versionos_buildos_majoros_minoros_patcharch)、 hardware (hardware_vendorhardware_modelhardware_versionboard_vendorboard_modelboard_versionboard_serial)、 CPU / memory context (cpu_brandcpu_physical_corescpu_logical_corescpu_socketsphysical_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_rawproduct_rawversion_rawpublisher のような raw evidence、 sourcesource_typeimport_run_id のような provenance、 install_locationinstalled_atpackage_identifierinstall_sourcepackage_manager のような installation context、 さらに typearcheditionchannelrelease_labelbundle_idpurl などの product-shape metadata を保持できます。

AVM には、 vendorproductversionversion_normnormalized_vendornormalized_productcpe_namecpe_vendor_idcpe_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_keynamehostnamecomputer_namesystem_uuidplatformos_nameos_versionos_buildarchhardware_vendorhardware_modelcpu_brand などです。

Software-side mapping

installed-software 系の osquery tables は、 同じ stable external_key を通じて その asset に紐付く AVM software rows に変換できます。 典型的な target fields は typesourcesource_typevendor_rawproduct_rawversion_rawpublisherinstall_locationinstalled_atinstall_sourcepackage_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_infoos_versioncpu_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_keyproduct_rawversion_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 などが行われます。

import された software
Canonical linking
必要に応じて unresolved review
Backfill + matching

どのようなときに 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 を改善していけます。