Homeβ€Ί Blogβ€Ί AWS Architecture Series #77 β€” The number you sort by does not know where the instance is…
AWS Architecture AWS Architecture Series

AWS Architecture Series #77 β€” The number you sort by does not know where the instance is

A findings list sorted by severity looks like a work queue in priority order. The severity column is derived from the CVSS base score, which AWS describes as reflecting intrinsic characteristics that are constant over time and as assuming the reasonable worst-case impact across different deployed environments. The number that does account for your environment is a different number, on a different tab.

Verified against current vendor documentation on 9 October 2026. Pricing, limits and API behaviour were checked against the official docs on that date. Cloud services change fast — if you are reading this much later, treat the specifics as a starting point and re-check the linked sources.

Business Challenge

#43 put Inspector in the security account and moved on. This is what the severity column on its findings list actually means.

AWS is precise about the derivation, and the precision is the problem: “Amazon Inspector uses the NVD/CVSS score as the basis of severity scoring for software package vulnerabilities”, and that score is “a base score because it reflects the severity of a vulnerability according to its intrinsic characteristics, which are constant over time. This score also assumes the reasonable worst-case impact across different deployed environments.”

Constant over time, and worst-case across environments. Those are not defects — they are what a base score is for. They do mean the column you sort by was computed without reference to your account.

1The environment-aware score is the narrow one

There is a number that knows about your estate. “Amazon Inspector determines the score by correlating CVSS base score information with information from your compute environment, such as network reachability data and exploitability data.”

That is exactly the right idea, and then read its scope. It is for “Amazon Elastic Compute Cloud (Amazon EC2) instance findings”, and “These details are only available for package vulnerability findings.” And:

“Note: The Amazon Inspector score is not available for Linux instances running Ubuntu. Ubuntu uses a custom severity rating system that differs from CVSS scores.”

So container images, Lambda functions, code vulnerabilities, network reachability findings and every Ubuntu instance are ranked by the environment-blind number only. On a lot of estates that is most of it.

Fix

Know which of your resources can produce an Inspector score before building a process that assumes one. Where it is absent, severity is a property of the CVE, not of your exposure — so the exposure has to come from somewhere else.

2A finding outlives the patch, and AWS does not promise a number

"Continuous" is doing a lot of work in the marketing and very little in the documentation: “Amazon Inspector performs network reachability scans once every 12 hours and package vulnerability scans on a variable cadence that depends on the scan method associated with the EC2 instance.”

Twelve hours is a number. The one that matters for patching is the one AWS declines to give — and the reason is in the mechanism. Inspector does not look at the instance; it looks at an inventory of the instance. “Amazon EC2 scanning extracts metadata from your EC2 instance before comparing the metadata against rules collected from security advisories.”

So a finding closes when the inventory says the package changed, not when the package changes. Patch at 09:00 and the finding stands until the next collection — by SSM agent, or by “Amazon EBS snapshots” under agentless scanning. The patch is not the event Inspector observes.

Fix

Measure remediation from the scan that confirms it, not from the change ticket, and treat a persisting finding as unconfirmed rather than unfixed until a collection has run.

3Five scores on one finding, and AWS expects them to disagree

A package vulnerability finding carries, in AWS's own list: “EPSS score”, “Inspector score”, “CVSS 3.1 from Amazon CVE”, “CVSS 3.1 from NVD”, and “CVSS 2.0 from NVD (where applicable)”.

Two of those are the same metric from different publishers, because “Amazon Inspector supports Amazon, Debian, and RHEL vendors. Each vendor provides a CVSS v3.1 base score. For other vendors, Amazon Inspector uses a CVSS base score provided by the National Vulnerability Database (NVD).” Amazon and NVD can score the same CVE differently.

AWS builds a UI around the disagreement rather than resolving it: the finding detail panel “shows the difference between the base score and the Inspector score… If the scores differ this panel shows an explanation of why.” Which is a good design, and is also an admission that the single severity label is a reduction of five numbers.

Fix

Use EPSS for "how likely is this to be exploited" and the Inspector score for "how exposed is this instance". They answer different questions and neither is the severity column.

Architecture

Two inventory paths, a scoring pipeline with an optional environment-aware stage, and a severity label at the end of it.

Diagram: how Amazon Inspector derives the severity of a package vulnerability finding, which of the scores on a finding account for the customer's environment, and what the scan cadence implies for a finding whose package has already been patched. Inspector EC2 scanning extracts metadata from the instance before comparing that metadata against rules collected from security advisories, so the subject of a scan is an inventory of the instance rather than the instance itself. Inventory arrives by one of two methods: agent-based scanning collects software inventory using the EC2 Systems Manager SSM agent, and agentless scanning collects software inventory using Amazon EBS snapshots. On first activating Inspector an account is automatically enrolled in hybrid scanning, which uses both methods, and this setting can be changed at any time. Agent-based scanning carries a prerequisite that the EC2 instance must be managed by SSM in the same AWS account. AWS recommends upgrading to Enhanced EC2 Scanning, performed by the Inspector VM Scanner, because it uses the same scanning mechanism across operating systems and across other supported resources and so produces more consistent findings than the Inspector SSM plugin, and on Windows in particular it avoids the per-query timeouts that can cause the SSM plugin to report findings inconsistently. On cadence, AWS states that network reachability scans run once every 12 hours, which is twice in a 24-hour day, while package vulnerability scans run on a variable cadence that depends on the scan method associated with the instance, with no interval published. The consequence is that a finding closes when the inventory reports the package changed rather than when the package actually changed, so a patched instance retains its finding until the next collection runs and the finding should be read as unconfirmed rather than unfixed in that window. On scoring, severity for software package vulnerabilities is based on the NVD slash CVSS score, which AWS categorises as a base score because it reflects intrinsic characteristics of the vulnerability that are constant over time and because it assumes the reasonable worst-case impact across different deployed environments, making it deliberately blind to the customer's estate. Inspector produces a numerical score from 1 to 10, and the CVSS version 3 standard maps 0 to Informational, 0.1 to 3.9 to Low, 4.0 to 6.9 to Medium, 7.0 to 8.9 to High, and 9.0 to 10.0 to Critical. A finding may instead carry the severity Untriaged, meaning the vendor has not yet set a vulnerability score for the detected vulnerability. Separately, the Amazon Inspector score is the environment-aware number: it is determined by correlating CVSS base score information with information from the customer's compute environment, such as network reachability data and exploitability data. Its availability is narrow, and this is the central finding of the post: it covers EC2 instance findings only, package vulnerability findings only, and AWS notes it is not available for Linux instances running Ubuntu because Ubuntu uses a custom severity rating system that differs from CVSS scores. A single package vulnerability finding therefore carries five scores: an EPSS score, an Inspector score, CVSS 3.1 from Amazon CVE, CVSS 3.1 from NVD, and CVSS 2.0 from NVD where applicable. Two of those are the same metric from different publishers, since Amazon, Debian and RHEL each provide a CVSS version 3.1 base score while other vendors fall back to NVD, so Amazon and NVD can score the same CVE differently. AWS builds a user interface around that disagreement rather than resolving it: the finding detail panel shows the difference between the base score and the Inspector score and, if the scores differ, shows an explanation of why. Due to FedRAMP requirements Inspector uses the CVSS version 3.1 base score as the default, though a CVSS 4.0 base score is included in vulnerability metadata when one is available. Other finding types are scored differently again: code vulnerability findings use severity levels defined by the Amazon Q detectors that generated them, each detector assigned a severity using the CVSS version 3 scoring system, while network reachability severity is determined by the service, ports and protocols exposed and by the type of open path, where the open path rating covers paths from virtual gateways, peered VPCs and AWS Direct Connect networks, and all other exposed services, ports and protocols are rated Informational. In that table SSH on TCP port 22 rates Medium by internet path and Low by open path, while Telnet on TCP port 23 rates High and Medium respectively.
The severity label is a reduction of five numbers, only one of which knows your network.

What a scan actually reads

The sentence that reframes the whole service: “Amazon EC2 scanning extracts metadata from your EC2 instance before comparing the metadata against rules collected from security advisories.”

Inspector is a comparison between two lists — your package inventory and a rules set built from advisories. It does not execute anything, probe anything, or verify that the vulnerable code path is reachable in your application. Both halves can go stale independently: the advisory rules on AWS's side, and the inventory on yours.

The inventory arrives one of two ways, and on first activation both are on: “Agent-based scanning collects software inventory from your instances using the Amazon EC2 Systems Manager (SSM) agent, and agentless scanning collects software inventory using Amazon EBS snapshots”, with “your account is automatically enrolled in hybrid scanning, which uses both scan methods”.

The agent-based prerequisite is a sentence worth auditing against

“For agent-based scanning, the Amazon EC2 instance must be managed by SSM in same AWS account.”

Same account, not the organisation. An estate where SSM management is centralised into a tooling account does not satisfy that for agent-based scanning, and the failure is an instance that simply produces fewer findings rather than an error. Hybrid enrolment softens it β€” agentless can still snapshot β€” which also means the gap is invisible as long as the other method covers it, and appears the moment somebody switches to agent-based only.

The two numbers, side by side

CVSS base score → severityInspector score
What it reflects“intrinsic characteristics, which are constant over time”“information from your compute environment, such as network reachability data and exploitability data”
Environment assumption“reasonable worst-case impact across different deployed environments”Correlated with yours
Resource scopeAll finding typesEC2 instance findings
Finding-type scopeAll“only available for package vulnerability findings”
OS exceptionsNone stated“not available for Linux instances running Ubuntu”
Drives the severity columnYesContributes, where it exists

Read the scope rows together and the asymmetry is the finding. The environment-blind score is universal. The environment-aware score is conditional on three things at once. Any process that says "prioritise by exposure" is, for a container image or an Ubuntu host, prioritising by something else.

The bands, and where they put the weight

ScoreRatingWidth of the band
0Informationala single value
0.1–3.9Low3.8
4.0–6.9Medium2.9
7.0–8.9High1.9
9.0–10.0Critical1.0

The bands narrow as they rise, which is sensible — precision matters more at the top. It also means a 6.9 and a 4.0 share a label while a 6.9 and a 7.0 do not, and the 0.1 between them is the difference between two queues in most organisations' process.

And there is a sixth state that is not a number at all: “Package vulnerability findings can also have a severity of Untriaged. This means that the vendor hasn't yet set a vulnerability score for the detected vulnerability.” AWS recommends “using the reference URLs for the finding to research that vulnerability and respond accordingly” — that is, do it yourself. An Untriaged finding sorts nowhere and is the one most likely to be new.

Other finding types are scored by other systems entirely

Code vulnerabilities. “For code vulnerability findings Amazon Inspector uses the severity levels defined by the Amazon Q detectors that generated the finding. Each detector is assigned a severity using the CVSS v3 scoring system.” So the severity is a property of the detector, fixed in advance, rather than of the instance of the problem it found.

Network reachability. A lookup table on service, port and path type, and the path type matters as much as the port: “The value in the Open path rating column represents open paths from virtual gateways, peered VPCs, and AWS Direct Connect networks.” SSH on 22 is Medium from the internet and Low from an open path; Telnet on 23 is High and Medium. Everything unlisted is “Informational”, which is a design decision worth knowing about before you filter the informational tier out of a dashboard.

Why This Architecture Holds Up

The default is the conservative one, for a stated reason

“Due to FedRAMP requirements, Amazon Inspector uses the CVSS v3.1 base score as the default score. However, a CVSS 4.0 base score will be included in your vulnerability metadata when one is available.”

That is an unusually candid "why": the default is not the newest standard because a compliance regime pins it. The newer score is carried alongside rather than suppressed, which is the right call — and it means a team reporting CVSS 4.0 figures and a team reporting the Inspector default are both reading the same finding correctly and will disagree.

Vendor-supplied scores are a feature, and a source of divergence

“Amazon Inspector supports Amazon, Debian, and RHEL vendors. Each vendor provides a CVSS v3.1 base score. For other vendors, Amazon Inspector uses a CVSS base score provided by the National Vulnerability Database (NVD).”

Preferring the distribution's own score is correct — the distribution knows whether it compiled the vulnerable feature, and backports routinely make an upstream CVE inapplicable. It also means the same CVE on Amazon Linux and on an unsupported distribution in the same account can come out at two severities, from two publishers, both accurate.

Which is why the finding carries both “CVSS 3.1 from Amazon CVE” and “CVSS 3.1 from NVD” rather than one reconciled figure. The divergence is data.

AWS says the older scanner reports findings inconsistently on Windows

In the recommendation to move to Enhanced EC2 Scanning: the VM Scanner “uses the same scanning mechanism across operating systems and across other Amazon Inspector supported resources, which produces more consistent findings than the Amazon Inspector SSM plugin. On Windows in particular, it avoids the per-query timeouts that can cause the Amazon Inspector SSM plugin to report findings inconsistently.”

Inconsistent findings from a timeout is the worst failure shape a scanner has, because it is indistinguishable from a clean result. If you are on the SSM plugin and your Windows fleet looks quieter than your Linux fleet, that sentence is the first thing to rule out. Upgrading is opt-in, under Settings > Scan Settings, so nothing happens by waiting.

The base metrics are published, which makes the ranking arguable

The comparison panel lists the CVSS base metrics, and two of them carry most of the prioritisation argument in practice.

Attack Vector — “for Amazon Inspector findings this can be Network, Adjacent Network, or Local”. A Local vector on an instance nothing logs into is a different problem from a Network vector on a public one, and the base score cannot know which you have. The Inspector score can, where it exists, because reachability is one of its inputs.

Scope — “If this value is Unchanged the affected resource and the impacted resource are the same. If this value is Changed then the vulnerable component can be exploited to impact resources managed by different security authorities.” Changed is the blast-radius flag, and it is the metric worth filtering on when a list of criticals is too long to work through in order.

Two cadences, and only one of them is published

“once every 12 hours” for network reachability — twice a day, so a security group change is reflected within half a day. Package vulnerability scanning gets “a variable cadence that depends on the scan method” and no number.

Declining to publish it is defensible: it genuinely varies by method, instance state and inventory behaviour, and a published figure would become an SLO it is not. The consequence for you is that remediation time cannot be measured against a documented interval, so it has to be measured against observed behaviour in your own account.

Key Architecture Decisions

Decision Choice Reasoning
Sorting a findings queue Severity plus Scope and Attack Vector, not severity alone Severity comes from a base score assuming “worst-case impact across different deployed environments”.
Relying on the Inspector score Confirm it exists for the resource first EC2 instance findings, package vulnerabilities only, and absent on Ubuntu.
Ubuntu fleets Expect the environment-aware score to be missing “not available for Linux instances running Ubuntu” — a stated exception, not a gap.
Likelihood of exploitation Read EPSS, which is on the finding It is a different axis from severity and is already there.
Measuring remediation From the confirming scan, not the change ticket Findings close on inventory, and the package cadence is “variable”.
Scan method Keep hybrid unless you have a reason It is the activation default, and each method has a different blind spot.
Agent-based coverage Audit SSM management per account “must be managed by SSM in same AWS account”, and a miss is quiet.
Windows fleets on the SSM plugin Upgrade to Enhanced EC2 Scanning AWS names per-query timeouts that “report findings inconsistently”.
Untriaged findings Route them to a human, not to the bottom of a sort No vendor score yet, so they sort nowhere and are often the newest.
Reporting CVSS figures State the version and publisher v3.1 is the default “due to FedRAMP requirements”; 4.0 and NVD-vs-Amazon both appear.
Filtering out Informational Know what falls into it For network reachability, everything unlisted is Informational by design.

The audit worth running

Take your critical and high findings and ask how many carry an Inspector score at all. The ones that do can be re-read against reachability; the ones that cannot are ranked on intrinsic severity alone, and splitting the queue on that basis is more useful than sorting it harder.

Then count findings by severity against findings by EPSS. Where a high-severity, low-EPSS item is above a medium-severity, high-EPSS one in your work queue, the queue is ordered by the wrong column for the question "what is likely to be used against us".

Closing Thought

Inspector publishes more about its own scoring than most services publish about anything. Five scores per finding, the base metrics tabulated, a panel that explains the disagreement between two of them, and a note telling you the environment-aware score is missing on Ubuntu. None of it is hidden.

What is easy to miss is that the column the console sorts by is one of the environment-blind ones, by definition rather than by oversight — AWS defines a base score as assuming worst-case impact across deployed environments. It is the right default, because a base score is the one figure available for every finding type. It also answers "how bad is this vulnerability" when the question in front of an on-call engineer is "how bad is this vulnerability here".

Which is where this run of posts ends up. #74, #75 and #76 were each about a number read as answering a question it was not computing. The pattern underneath all four is the same: the figure is correct, the documentation is honest about what it measures, and the reading happens at a glance from a column heading. Sometimes the answer is a better metric — the Inspector score is exactly that, where it exists. More often it is knowing which question the number in front of you is answering.

Next in this series

Security & Identity — Amazon Cognito user pools: what a token actually asserts after a group is removed, why the ID token and the access token expire on different clocks, and how refresh token revocation propagates.

Comments

How was your experience?
Your feedback helps improve this site.
PoorExcellent