Skip to content

Add Inspector ECR findings evidence and vulnerability intake fetchers - #323

Merged
21tmccauley merged 2 commits into
mainfrom
inspector-ecr-fetchers
Nov 11, 2026
Merged

21tmccauley merged 2 commits into
mainfrom
inspector-ecr-fetchers

Conversation

@21tmccauley

Copy link
Copy Markdown
Collaborator

Split from #300, contributed by Lucid (co-authored by Rocky Olsen). This takes the two new Inspector fetchers. The aws_ecr_image_scanning changes from #300 stay out because they have a severity-count bug on enhanced scanning (details on #300), and will follow separately.

What's added

  • aws_inspector_ecr_findings (EVD-INSPECTOR-ECR-FINDINGS): evidence of active Inspector findings per ECR image, the image inventory and scan coverage. When calls fail it keeps the partial evidence (partial_failure, api_failures, collection_complete: false) and exits nonzero.
  • aws_inspector_ecr_report (issue report, VULNERABILITY): builds a CSV from the same Inspector APIs for the existing paramify issues upload path, with no S3/KMS export. It is all-or-nothing: it refuses incomplete pagination, missing coverage and inventory mismatches.
  • Issue-report guide: a fetcher may now build its report from a tool's API when no practical native export exists, under documented requirements (stable row identity, complete pagination, documented columns). This replaces the one-off exception from Fix enhanced ECR scanning and add Inspector findings intake #300 with a general rule. Reviewed and approved by @21tmccauley.

Tested end to end

Against a live AWS account (Inspector enabled, 5 real images, about 10k findings) and Paramify stage:

  • Evidence fetcher: correct findings and coverage; partial failure verified with a least-privilege role.
  • Built a CSV preset in the app from the documented columns, then went through the real uploader and API:
    • First upload: 30 created.
    • Re-upload of the same findings: 0 created, 30 updated (no duplicates). The CSV is byte-identical across runs.
    • After deleting an image: the report refused while Inspector still listed its findings, then after Inspector caught up, closing the cycle auto-closed exactly that image's 14 issues.
  • The same CVE on two images stays as two issues.
  • Full suite: 8,754 passed, 102 skipped. ruff and mypy pass on framework/.

Known follow-ups (not blocking)

  • An INACTIVE artifact in scope (for example a Helm chart, UNSUPPORTED_MEDIA_TYPE) blocks the whole report. Expected exclusions should be recorded as gaps, not blockers.
  • The evidence size grows with findings (about 47 MB for 10k findings), so it may need trimming.
  • The error after an image is deleted says "changed during collection" when the cause is Inspector lag.
  • Intake presets need mappings for INFORMATIONAL and UNTRIAGED severities.

🤖 Generated with Claude Code

21tmccauley and others added 2 commits November 10, 2026 18:27
Split from #300 (contributed by Lucid). Adds two fetchers on a shared
Inspector collector:

- aws_inspector_ecr_findings (EVD-INSPECTOR-ECR-FINDINGS): active
  Inspector findings per ECR image, image inventory and scan coverage,
  with partial-failure evidence (partial_failure, api_failures,
  collection_complete: false) when calls fail.
- aws_inspector_ecr_report (issue_report, VULNERABILITY): converts the
  same APIs to a CSV for the existing pipeline intake uploader, with no
  S3/KMS export. All-or-nothing: refuses incomplete pagination, missing
  coverage and inventory mismatches.

The aws_ecr_image_scanning changes from #300 are left out; they have a
severity-count bug on enhanced scanning and will follow separately.

Co-authored-by: Rocky Olsen <rolsen@lucidchart.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Native exports are still sent byte for byte. When a tool has no
practical export, a fetcher may build the CSV from read APIs, provided
it documents its columns, gives rows stable identities, refuses
incomplete collection and doesn't pose as a native export. Replaces the
one-off exception for aws_inspector_ecr_report with a general rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@21tmccauley
21tmccauley merged commit 309280b into main Nov 11, 2026
18 checks passed
@21tmccauley
21tmccauley deleted the inspector-ecr-fetchers branch November 11, 2026 01:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant