{"adoption": {"forks": 108, "observed_at": "2026-08-28T04:03:14.796103+00:00", "stars": 1018}, "canonical_url": "https://ross.abutalabs.com/products/awspx", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A graph-based tool for visualizing effective access and resource relationships in AWS environments.", "domain": ["security", "cloud-computing", "penetration-testing", "developer-tools"], "enriched": true, "function": ["security", "data-visualization", "web-scraping", "cli"], "health_score": 20, "homepage": null, "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["ReversecLabs/awspx"], "name": "ReversecLabs/awspx", "platform": ["python", "cli"], "pushed_at": "2022-10-04T10:27:47+00:00", "repo": "ReversecLabs/awspx", "stars": 1018, "tags": ["aws", "graph-database", "attack-paths", "iam", "bloodhound-style", "pentesting", "linux", "macos", "docker"], "topics": ["aws", "aws-security", "graph-theory", "pentesting"], "urls": [], "use_cases": ["visualize effective access and resource relationships in an AWS account", "find privilege escalation attack paths in AWS IAM", "audit AWS IAM policies as a graph", "map which principals can access which AWS resources", "pentest an AWS environment with valid credentials", "explore AWS security posture in a BloodHound-like web UI"], "what_it_is": "awspx is a graph-based security tool that visualizes effective access and resource relationships in AWS environments. It resolves IAM policy information to determine which actions affect which resources and identifies how permissions combine into attack paths, exposed via a web interface.", "when_to_avoid": ["you have no AWS permissions - awspx requires credentials to function", "you need actively maintained tooling - the latest release dates to 2022", "you want a multi-cloud or Azure/GCP equivalent tool"], "when_to_choose": ["you have valid AWS credentials and want to analyze effective permissions and attack paths", "you need a graph view of IAM relationships rather than raw policy JSON", "you are doing authorized AWS security assessment or red teaming"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/awspx", "repo": "ReversecLabs/awspx", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:14.796103+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:09:26.652798+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f4807ea764bc37a52a61d158de248f01bc7709209fd24c4fc8f0833655d2445c", "fetched_at": "2026-08-28T04:03:14.796103+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ReversecLabs/awspx"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2464, "days_push": 1429, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}