skip to content

Amazon Inspector is enabled in your AWS account, but it reports no findings for a fleet of long-running EC2 instances. What are the likely causes, and what does Inspector need in order to scan an instance at all?

level: seniorimportance: nice to knowfreq 32%

answer

  1. zero findings is a hypothesis, not a result
  2. the scanner needs a way in
  3. managed node first, CVEs after
  4. enabled per Region, per scan type
  5. alarm on coverage, not just findings

basics

~20 s

Almost always it is a coverage gap, not a clean fleet. Inspector scans EC2 through the SSM Agent, so instances that are not managed by Systems Manager, or that run an unsupported OS, or sit in a Region or account where scanning is off, are simply never assessed.

solid answer

~50 s

Treat zero findings as a coverage question first. Inspector's EC2 scanning normally works through the **SSM Agent**: the instance must be running the agent, have an instance profile granting Systems Manager permissions, and be able to reach the SSM endpoints — directly or through VPC endpoints — so it shows as a managed node. Any of those missing and the instance never appears in Inspector's coverage. Other causes are an unsupported operating system or platform, EC2 scanning not being enabled for that account and Region (Inspector is per-account, per-Region, with separate switches for EC2, ECR and Lambda), or the account not being enabled at all under the delegated administrator. Check coverage explicitly with `aws inspector2 list-coverage` and cross-check with `aws ssm describe-instance-information` rather than trusting an empty findings list. Only after coverage shows the instances as scanned is "no findings" a real result — and even then, Inspector re-evaluates continuously as new CVEs are published, so it rarely stays empty for long on a long-running fleet.

code

bash · 8 lines
bash
aws inspector2 batch-get-account-status

aws inspector2 list-coverage \
  --filter-criteria '{"resourceType":[{"comparison":"EQUALS","value":"AWS_EC2_INSTANCE"}]}'

aws ssm describe-instance-information \
  --query 'InstanceInformationList[].[InstanceId,PingStatus,PlatformName]' \
  --output table

go deeper

for a junior

Know that Amazon Inspector finds known CVEs in EC2 instances, container images in ECR and Lambda functions, and that it must be enabled in the account and Region.

for a middle

Explain that EC2 scanning depends on the instance being a Systems Manager managed node — agent, instance profile and a network path to the SSM endpoints — and that scan types are enabled separately.

for a senior

Debug the empty-findings scenario by checking coverage before findings, and argue for alarming on coverage divergence because silent non-coverage is indistinguishable from a clean fleet on a dashboard.

for a principal

Decide how vulnerability findings are prioritised and owned across teams, including what happens to criticals with no vendor fix, and how coverage is guaranteed as accounts and Regions are added.

## Why an empty findings list is a smell A fleet of long-running EC2 instances almost certainly has *some* vulnerable package, because CVEs are published constantly against exactly the base images those instances were built from. So the first hypothesis is never "we are clean"; it is "Inspector cannot see them". ## What Inspector needs on EC2 Inspector builds a software inventory and matches it against vulnerability data. On EC2 that inventory comes through **AWS Systems Manager**. For an instance to be scanned it must: - run the **SSM Agent** (pre-installed on Amazon Linux and recent Windows AMIs, but not on every image), - have an **instance profile** with the Systems Manager permissions the agent needs, - have **network reachability** to the SSM service endpoints — a route through a NAT gateway, or interface VPC endpoints for `ssm`, `ssmmessages` and `ec2messages` in a private subnet with no egress, - and run a **supported operating system and platform**. If the agent cannot register, the instance is not a managed node, Inspector has no inventory, and it never enters coverage. Inspector also offers agentless EC2 scanning based on EBS snapshots for supported cases, which removes the agent dependency but has its own eligibility rules — so the practical check is always the coverage list, not an assumption about mode. ## The other layers of "enabled" Inspector's enablement is more granular than a single switch: - It is **per account and per Region**. Instances in an unmonitored Region are invisible. - **Scan types are enabled independently**: EC2, ECR container images, and Lambda functions. Someone may have enabled only ECR. - In an Organization, a **delegated administrator** enables Inspector for members, with auto-enable for new accounts. Without it, an account created last month may never have been switched on. ## Diagnosing it in order ```bash # 1. Is the account/Region actually scanning, and for what? aws inspector2 batch-get-account-status # 2. Which resources are in coverage, and with what status? aws inspector2 list-coverage \ --filter-criteria '{"resourceType":[{"comparison":"EQUALS","value":"AWS_EC2_INSTANCE"}]}' # 3. For instances missing from coverage: are they managed by SSM at all? aws ssm describe-instance-information ``` An instance that is absent from `list-coverage` and absent from `describe-instance-information` is an SSM problem — agent, instance profile, or network path — not an Inspector problem. An instance present in coverage but with an inactive status usually points at a stale agent or an unsupported platform. ## What Inspector actually reports when it is working Findings carry the CVE identifier, a severity and score, the affected package and version, and whether a fix is available — which is the field that makes remediation triage tractable, since "critical with no vendor fix" needs a different response from "critical, patched upstream last week". Scanning is **continuous**: Inspector re-evaluates existing inventory when new vulnerability data lands, so findings appear on instances nobody has deployed to in months. For ECR it can scan on push and re-scan images for a configured window; for Lambda it assesses function packages and, with code scanning, the function code itself. ## The wider lesson Every agent- or inventory-based security service has the same class of failure: silent non-coverage that looks identical to good news on a dashboard. The operational discipline is to alarm on **coverage**, not only on findings — compare the count of scanned instances against the count of running instances from EC2 or from your Auto Scaling groups, and treat a divergence as an incident. A clean scoreboard from a scanner nobody verified is the most expensive kind of false comfort.

  • How would you monitor for this class of gap continuously rather than discovering it during an interview scenario?
    Compare Inspector's coverage count for EC2 against the number of running instances from EC2 or your Auto Scaling groups, and alarm when they diverge beyond a small tolerance. The same idea applies to Systems Manager managed-node counts. Coverage is the metric that fails silently, so it deserves an alarm of its own rather than being inferred from the absence of findings.
  • An instance sits in a private subnet with no NAT gateway. How do you get it scanned?
    Give it a private path to Systems Manager with interface VPC endpoints for `ssm`, `ssmmessages` and `ec2messages`, plus security-group rules allowing HTTPS to them. The agent then registers without any internet egress, the instance becomes a managed node, and Inspector picks it up. This is the standard pattern for scanning isolated workloads.
  • Inspector reports a critical CVE with no available fix. What do you do with it?
    Treat it as a risk-management item rather than a patch task: confirm whether the vulnerable code path is reachable in your usage, apply compensating controls such as removing the package, restricting network exposure or tightening the instance's role, and track the finding until the vendor ships a fix. Suppress it deliberately with a recorded rationale, never by ignoring the queue.

saying these in an interview costs you the question

  • Reads an empty findings list as proof the fleet is patched
  • Does not know EC2 scanning depends on the SSM Agent
  • Forgets Inspector is enabled per Region and per scan type
  • Assumes one enablement covers every account in the Organization
  • Thinks Inspector needs a redeploy before it can report new CVEs

context