Skip to content

Asset inventory for vulnerability management

Build an asset inventory a VOC can rely on: data sources, reconciliation keys, ownership and criticality attributes, and measuring coverage gaps.

Published on 7 min read

Every vulnerability decision depends on facts about assets: does this host exist, who owns it, what does it do for the business, and who can reach it? Scanners report vulnerabilities on IP addresses and hostnames; remediation needs a team name and a service. The gap between those two is the asset inventory, and it is the most common reason vulnerability programs stall. You cannot prioritize what you cannot see, and you cannot route what nobody owns.

This guide covers how to build an inventory that is good enough for a Vulnerability Operations Center: which sources to combine, how to reconcile them, which attributes matter, and how to measure the gaps that scanners silently leave behind.

Why the inventory comes first

CIS Controls v8 puts inventory of enterprise assets (Control 1) and software assets (Control 2) before continuous vulnerability management (Control 7) for a reason. Without an inventory:

  • Coverage is unknowable. A scanner can report that it scanned 5,000 hosts, but not that there were 6,000.
  • Prioritization is blind. Risk-based tiers need criticality and exposure; see risk-based prioritization.
  • Routing fails. Findings without an owner end up in a shared queue where they age indefinitely.
  • Metrics lie. A drop in open findings might mean remediation, or it might mean a scanner lost access to a subnet.

The inventory does not need to be perfect before you start. It needs to be measured — you should know how complete it is and be improving that number.

Sources of asset data

No single source is complete. Each sees a different slice of the estate, with different strengths.

SourceSees wellMissesBest attribute
CMDB / ITSMBusiness services, owners, lifecycle stateAnything created outside the processOwnership, service mapping
EDR / endpoint managementManaged laptops and servers, installed softwareUnmanaged devices, appliances, network gearSoftware inventory, last seen
Cloud provider APIsEvery resource in connected accountsAccounts nobody connectedTags, account, region, exposure
Identity provider / directoryDomain-joined machines, service accountsNon-domain assetsMachine ownership, OU
DHCP, DNS, IPAMAnything that requests an address or a nameStatic, undocumented assetsIP–hostname history
Network scanning (discovery)Anything that answers on the networkFiltered or offline assetsOpen ports, services
External attack surface managementInternet-facing assets, including forgotten onesInternal assetsExposure
Container registries, CI/CD, SBOMsImages, packages, dependenciesRunning stateSoftware components

A useful mental model: the CMDB tells you what the organization believes exists; discovery sources tell you what actually exists. The VOC's job is to reconcile the two and push the differences back to the owners of each source.

Reconciliation and deduplication

The same laptop may appear as an EDR agent ID, a directory computer object, a DHCP lease, three IP addresses over a month and a scanner asset record. Reconciliation merges these into one asset using identifiers in order of reliability:

  1. Strong, immutable IDs: cloud instance or resource IDs, EDR agent IDs, hardware serial numbers, MDM device IDs.
  2. Stable but mutable IDs: fully qualified hostnames, MAC addresses (unreliable for virtual machines and randomized on many mobile devices).
  3. Weak IDs: IP addresses, which should only be used together with a time window.

Keep the source records and the link to the reconciled asset rather than overwriting, so you can explain why two records were merged. The query below finds scanner-discovered hosts that do not match any known asset — the most actionable coverage gap, because it points to things that exist but are unmanaged.

-- Hosts seen by network discovery in the last 7 days with no reconciled asset
SELECT d.ip_address,
       d.hostname,
       d.open_ports,
       MAX(d.seen_at) AS last_seen
FROM   discovery_observations d
LEFT JOIN asset_identifiers ai
       ON (ai.kind = 'fqdn' AND lower(ai.value) = lower(d.hostname))
       OR (ai.kind = 'ip'   AND ai.value = d.ip_address
                            AND d.seen_at BETWEEN ai.valid_from AND ai.valid_to)
WHERE  d.seen_at >= now() - interval '7 days'
  AND  ai.asset_id IS NULL
GROUP BY d.ip_address, d.hostname, d.open_ports
ORDER BY last_seen DESC;

The attributes a VOC needs

Resist the urge to collect everything. These attributes are the ones prioritization and routing actually use:

asset:
  id: "aws:ec2:eu-west-1:i-0abc123def4567890"   # strongest available identifier
  names: ["pay-api-03.prod.example.internal"]
  type: cloud_vm            # server | endpoint | network | cloud_vm | container_image | saas | ...
  environment: production   # production | staging | development | lab
  business_service: "Card payments API"
  owner_team: "payments-platform"   # routable team, not a person
  technical_contact: "oncall-payments@example.internal"
  criticality: 1            # 1 = crown jewel ... 4 = low
  exposure: internet        # internet | partner | internal | isolated
  data_classification: restricted
  lifecycle: in_service     # planned | in_service | decommissioning | retired
  sources: [aws_config, edr, cmdb]
  last_seen: "2026-09-06T21:14:00Z"
  scan_coverage:
    authenticated: true
    last_authenticated_scan: "2026-09-05T02:10:00Z"

Two design choices are worth copying. Owner is a team, not a person, because people change roles and tickets must still land somewhere. And scan coverage is an attribute of the asset, which lets you report coverage directly from the inventory.

Criticality tiers

Criticality should be agreed with the business, documented, and applied consistently. A four-tier example:

TierDefinition (example)Typical examples
1 — Crown jewelFailure or compromise causes severe financial, legal or safety impactPayment processing, identity providers, domain controllers, core databases
2 — HighImportant business service; outage or breach is significant but containedCustomer-facing applications, ERP, email
3 — StandardSupports business functions; limited impact on its ownInternal tools, most employee endpoints
4 — LowNon-production, isolated or disposableLabs, test environments, kiosk devices

Criticality should usually be inherited from the business service: a server hosting a tier-1 service is tier 1. Identity infrastructure deserves special attention, since compromising it compromises everything that trusts it; many organizations place it in tier 1 regardless of the services it supports.

Exposure is separate from criticality. An internet-facing tier-3 marketing site can deserve faster remediation than an isolated tier-2 system, because attackers can reach it without first gaining a foothold.

Ephemeral and cloud-native assets

Autoscaling groups, serverless functions and containers break the "one asset, one record" model. Instead of chasing every instance:

  • Assess the source of truth. Scan container images in the registry and in CI, and fix vulnerabilities by rebuilding the image. Track the image digest and the workloads that run it.
  • Inventory the control plane. Cloud accounts, subscriptions, projects, clusters and their configurations are durable assets with owners.
  • Tag at creation. Require owner, environment and service tags through infrastructure-as-code policies, and treat untagged resources as findings.
  • Use short "last seen" windows. An instance not seen for a day is probably gone; a physical server not seen for a day may be offline or unreachable — worth investigating.

Measuring completeness

Report inventory quality as a small set of numbers, trended over time:

  • Ownership coverage: share of in-scope assets with a valid, routable owner team.
  • Criticality coverage: share with an agreed criticality tier.
  • Reconciliation gap: assets seen by discovery sources but absent from the inventory (the query above).
  • Stale records: inventory assets not seen by any source within your threshold.
  • Assessment coverage: share of assets with an authenticated scan or agent result within policy — covered in depth in vulnerability management metrics.

A practical starting plan

  1. Export assets from the three sources you trust most — usually EDR, cloud APIs and the CMDB — and reconcile them on strong identifiers.
  2. Run a discovery scan of your address space and your external footprint with attack surface management tooling, and list what is not in the reconciled set.
  3. Assign an owner team to every asset supporting a tier-1 service first, then work outward.
  4. Add scan coverage as an asset attribute and publish the coverage numbers monthly.
  5. Push fixes upstream: missing tags go to cloud owners, missing CMDB records to service owners, unmanaged hosts to the team that owns the network segment.

With a measured inventory in place, the next step is choosing how to assess those assets — the subject of vulnerability scanning strategy.

Related guides

07 · Metrics & Reporting
Define and compute the metrics a VOC needs: time to remediate with percentiles, SLA compliance, coverage, backlog age, KEV exposure windows and reopen rate.
03 · Scanning Strategy
Design a scanning strategy for a VOC: authenticated scans, agents, cloud and container assessment, SCA, DAST, safe scanning and measurable coverage.