Aws/securityhub Findings
Query and manage AWS Security Hub findings from a delegated administrator account. Leverages cross-region aggregation to cover the entire AWS Organization in a single API call.
Complements (does NOT duplicate) the upstream @swamp/aws/securityhub extension which manages Security Hub infrastructure (hubs, rules, policies, controls). This extension focuses on the findings operational lifecycle: query, triage, archive, resolve, and reopen.
Authentication
Uses the default AWS credential chain. Point at the delegated admin account (e.g. via AWS_PROFILE) to query findings across all member accounts.
Required IAM Permissions
securityhub:GetFindings(read)securityhub:BatchUpdateFindings(write — for archive/resolve/reopen)
Usage
# Create model (pointed at delegated admin account)
AWS_PROFILE="my-account/ReadOnlyPlus" \
swamp model create @webframp/aws/securityhub-findings sh-findings --global-arg region=us-east-1
# List all findings from last 24h
swamp model method run sh-findings list_findings --input startTime=24h
# List only HIGH severity GuardDuty findings
swamp model method run sh-findings list_findings --input productName=GuardDuty --input severityLabel=HIGH
# Get severity summary across org
swamp model method run sh-findings get_severity_summary --input startTime=7d
# Archive false positives
swamp model method run sh-findings archive_findings \
--input 'findingArns=["arn:aws:securityhub:..."]' \
--input 'note=Known EKS deployment pattern, suppressing'
# Resolve findings
swamp model method run sh-findings resolve_findings \
--input 'findingArns=["arn:aws:securityhub:..."]' \
--input 'note=Remediated by disabling public access'Methods
- list_findings - Query findings with filters for product, severity, account, time
- get_finding_details - Get full ASFF details for specific finding ARNs
- get_severity_summary - Aggregate findings by severity across all accounts
- archive_findings - Suppress findings (false positive / expected behavior)
- resolve_findings - Mark findings as resolved
- reopen_findings - Reopen previously archived/resolved findings
2026.10.23.1
Fixed: get_severity_summary paged through findings with no sort order.
Under its five-page (500-finding) cap, a busy organization could truncate the
result to an arbitrary slice, which for a count aggregation undercounts the
severity tallies rather than just dropping rows. It now sorts
SeverityNormalized descending like every other query, so a truncated summary
counts the most severe findings first.
Fixed: list_findings and list_all_findings now encode the sort field and
order in their resource instance name. Previously two calls with identical
filters but different sorts hashed to the same resource slot, so a second call
could silently overwrite a prior truncated slice (e.g. replacing the 100 most
severe findings with the 100 oldest) with no signal to any consumer. Sort order
is a correctness property under truncation, so it now participates in instance
identity.
Added: list_findings and list_all_findings accept optional sortField
and sortOrder arguments. sortField is one of SeverityNormalized,
SeverityLabel, UpdatedAt, CreatedAt, FirstObservedAt, LastObservedAt,
Confidence, Criticality, ProductName, Title, or AwsAccountId;
sortOrder is asc or desc. An invalid value is rejected at the swamp
boundary rather than surfacing as an opaque AWS error. The override is
deliberately absent from get_severity_summary, list_findings_by_type, and
diff_findings: those consume the truncated set (diff refuses to diff when
truncated), so their severity-descending order is a correctness guarantee, not
a preference.
Changed: Every GetFindings query now sorts by severity descending by
default.
Upgrade note: Backward compatible. The new arguments are optional and default to the prior severity-descending behavior; existing instances and callers are unaffected and need no changes.
2026.10.21.1
Changed: Documentation only: the README no longer lists environment
variables or a static shared-credentials file as a way to supply AWS
credentials. It now recommends AWS SSO or a named profile
(aws sso login --profile <name>, then --global-arg profile=<name>), or an
IAM role attached to where swamp runs. Credential resolution is unchanged: the
model still uses the AWS SDK default credential chain when profile is unset.
Upgrade note: No code, schema, or behavioral changes. The model version moves to 2026.10.21.1 with an identity upgrade.
Resources
On-demand Security Hub findings triage workflow. Collects severity summary, critical/high findings, and diff since last run from a single Security Hub delegated admin model instance. Usage: AWS_PROFILE="my-account/ReadOnlyPlus" \ swamp workflow run securityhub-triage --input modelName=sh-findings # Custom time window: AWS_PROFILE="my-account/ReadOnlyPlus" \ swamp workflow run securityhub-triage --input modelName=sh-findings --input startTime=7d
Aggregates Security Hub triage workflow data into an actionable summary
2026.10.21.1
Changed: Documentation only: the README no longer lists environment
variables or a static shared-credentials file as a way to supply AWS
credentials. It now recommends AWS SSO or a named profile
(aws sso login --profile <name>, then --global-arg profile=<name>), or an
IAM role attached to where swamp runs. Credential resolution is unchanged: the
model still uses the AWS SDK default credential chain when profile is unset.
Upgrade note: No code, schema, or behavioral changes. The model version moves to 2026.10.21.1 with an identity upgrade.
2026.10.14.1
Added: The manifest now declares license: Apache-2.0 (SPDX). The registry quality rubric scores a declared license separately from the bundled LICENSE.md.
Upgrade note: Metadata only. No code, schema, or behavioral changes.
2026.10.06.1
Changed: Workflow step names are now kebab-case (severity-summary, critical-findings, high-findings, diff-findings, by-type) instead of snake_case, following the direction of swamp-club lab #3060. The triage report matches both forms, so runs recorded before this version still render.
Upgrade note: In a future version the report will be updated to use only the new kebab-case step names, and runs recorded with the old snake_case names will no longer be picked up. Re-run the workflow to produce data under the new names.
2026.09.24.1
Changed: Bump @aws-sdk/* 3.1133.0 → 3.1139.0 (3 packages)
2026.09.18.1
Upgrade note: Normalized npm:zod dependency version to 4.6.5 across the
repo. No behavioral changes in this extension.
2026.10.06.1
Changed: Workflow step names are now kebab-case (severity-summary, critical-findings, high-findings, diff-findings, by-type) instead of snake_case, following the direction of swamp-club lab #3060. The triage report matches both forms, so runs recorded before this version still render.
Upgrade note: In a future version the report will be updated to use only the new kebab-case step names, and runs recorded with the old snake_case names will no longer be picked up. Re-run the workflow to produce data under the new names.
2026.09.24.1
Changed: Bump @aws-sdk/* 3.1133.0 → 3.1139.0 (3 packages)
2026.09.18.1
Upgrade note: Normalized npm:zod dependency version to 4.6.5 across the
repo. No behavioral changes in this extension.
2026.09.24.1
Changed: Bump @aws-sdk/* 3.1133.0 → 3.1139.0 (3 packages)
2026.09.18.1
Upgrade note: Normalized npm:zod dependency version to 4.6.5 across the
repo. No behavioral changes in this extension.
2026.09.18.1
Upgrade note: Normalized npm:zod dependency version to 4.6.5 across the
repo. No behavioral changes in this extension.
2026.09.17.1
Changed: Bump @aws-sdk/* 3.1131.0 → 3.1133.0 (3 packages)
2026.09.15.1
Changed: Bump zod 4.4.3 → 4.6.5
2026.09.14.1
Changed: Bump @aws-sdk/* 3.1126.0 → 3.1131.0 (3 packages)
2026.09.04.1
Changed: Bump @aws-sdk/* 3.1121.0 → 3.1126.0 (3 packages)
2026.08.29.1
Changed: Bump @aws-sdk/* 3.1120.0 → 3.1121.0. Dependency-only update; no schema, API, or behavioral changes.
2026.08.28.2
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.09.15.1
Changed: Bump zod 4.4.3 → 4.6.5
2026.09.14.1
Changed: Bump @aws-sdk/* 3.1126.0 → 3.1131.0 (3 packages)
2026.09.04.1
Changed: Bump @aws-sdk/* 3.1121.0 → 3.1126.0 (3 packages)
2026.08.29.1
Changed: Bump @aws-sdk/* 3.1120.0 → 3.1121.0. Dependency-only update; no schema, API, or behavioral changes.
2026.08.28.2
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.09.04.1
Changed: Bump @aws-sdk/* 3.1121.0 → 3.1126.0 (3 packages)
2026.08.29.1
Changed: Bump @aws-sdk/* 3.1120.0 → 3.1121.0. Dependency-only update; no schema, API, or behavioral changes.
2026.08.28.2
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.29.1
Changed: Bump @aws-sdk/* 3.1120.0 → 3.1121.0. Dependency-only update; no schema, API, or behavioral changes.
2026.08.28.2
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.28.2
Changed: Normalized the extension license to Apache-2.0 and corrected the copyright holder to "Sean Escriva". Extensions that previously shipped an MIT LICENSE.md are now Apache-2.0, consistent with the repository root and every other extension. No code or behavioral changes.
Upgrade note: License text only. No API, schema, or runtime behavior changed.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.28.1
Changed: Bump @aws-sdk/* 3.1114.0 → 3.1120.0 (3 packages)
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.26.3
Fixed: Restored inline npm:zod@4.4.3 import specifiers so the registry
quality scorer can resolve dependencies and score the extension. An earlier
release used a bare "zod" import-map specifier, which published but scored as
unscored.
Changed: Retained explicit compilerOptions.strict in deno.json. No
behavioral or schema changes.
2026.08.26.1
Fixed: Added missing description field to upgrade entry for version
2026.08.24.2. The omission caused swamp extension pull to fail with a catalog
validation error ("upgrades.N.description: Invalid input: expected string,
received undefined").
2026.08.25.1
Changed: Updated labels for improved extension discoverability. Added cross-cutting category labels (security, observability, finops, infrastructure, networking, compliance, devops, ai, incident-response) where applicable.
updated labels
2026.08.24.3
Added: Output metadata attributes for observability.
durationMs: Method execution duration in milliseconds.collectedBy: Extension name that produced the data.fetchedAt: ISO 8601 timestamp when data was fetched (added to resources that previously lacked it).
2026.08.24.2
Added: Troubleshooting section documenting cross-region aggregation
requirements, single-page list_findings vs paginated list_all_findings,
diff_findings truncation suppression, Organizations API region behavior,
hardcoded WorkflowStatus: "NEW" filters, write-permission requirements for
lifecycle methods, and profile configuration options.
2026.08.21.1
Changed: Security Hub and Organizations API failures now surface with the
operation and inputs that were in flight instead of a bare SDK error. Every
GetFindings, BatchUpdateFindings, and ListAccounts call across
list_findings, get_finding_details, get_severity_summary,
list_findings_by_type, diff_findings, resolve_accounts,
list_all_findings, and the shared archive/resolve/reopen update path now
catches failures and rethrows with the method name, the filters or finding
ARNs involved, and the original error preserved as cause. Previously a
throttled or permission-denied call would bubble up as a generic AWS SDK
exception with no indication of which query or update triggered it.
2026.08.20.1
Changed: Bump @aws-sdk/* 3.1111.0 → 3.1114.0 (3 packages)
2026.08.15.1
Changed: Bump @aws-sdk/* 3.1104.0 → 3.1111.0 (3 packages)
2026.08.05.1
Changed: Bump @aws-sdk/* 3.1101.0 → 3.1104.0 (3 packages)
2026.08.02.1
Changed: Bump @aws-sdk/* 3.1100.0 → 3.1101.0 (3 packages)
2026.08.01.1
Fixed: Broken model-upgrade chain. The prior version bump (to 2026.07.31.1) updated version but left the upgrades array terminating one step short, which blocks swamp extension push ("model upgrade chain errors"). That version never actually published — the registry was still serving 2026.07.30.1. This release closes the chain with a no-op upgrade entry and republishes everything that had accumulated since 2026.07.30.1.
2026.07.31.1
Changed: Bump @aws-sdk/* 3.1096.0 → 3.1100.0 (3 packages)
2026.07.30.1
Added: Optional profile global argument for multi-account credential resolution.
When set, credentials resolve via fromIni (supports SSO token cache and shared-config
profiles). When omitted, the default credential chain applies as before. Fully backward
compatible — no changes required for existing instances.
- Has README or module doc2/2earned
- README has a code example1/1earned
- README is substantive1/1earned
- Most symbols documented1/1earned
- No slow types (deprecated)1/1earned
- Dependencies pass trust audit2/2earned
- Docs keep secrets in a vault1/1earned
- Has description1/1earned
- Platform support declared (or universal)2/2earned
- License2/2earned
- Verified public repository2/2earned