{"adoption": {"forks": 197, "observed_at": "2026-08-28T04:05:05.880116+00:00", "stars": 1576}, "canonical_url": "https://ross.abutalabs.com/products/pmapper", "card": {"archived": false, "artifact_type": "cli-tool", "description": "A tool for quickly evaluating IAM permissions in AWS.", "domain": ["cloud-computing", "security", "infrastructure-as-code"], "enriched": true, "function": ["security", "vulnerability-scanning", "developer-tools"], "health_score": 20, "homepage": null, "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["nccgroup/PMapper"], "name": "nccgroup/PMapper", "platform": ["python", "cli", "cross-platform"], "pushed_at": "2024-08-02T15:38:29+00:00", "repo": "nccgroup/PMapper", "stars": 1576, "tags": ["aws", "iam", "privilege-escalation", "cloud-security", "graph-analysis", "botocore", "docker"], "topics": ["aws", "iam", "python", "botocore", "cloudsecurity"], "urls": [], "use_cases": ["audit AWS IAM permissions for an account or organization", "find privilege escalation paths in AWS IAM configuration", "check which IAM users or roles can perform a specific action", "identify alternate attack paths to access an AWS resource", "generate a graph visualization of IAM relationships", "run preset queries for common IAM misconfigurations"], "what_it_is": "Principal Mapper (PMapper) is a Python CLI tool and library that models AWS IAM users and roles as a directed graph to identify privilege escalation risks and unintended access paths. It simulates AWS authorization locally to answer queries about which principals can perform actions or access resources.", "when_to_avoid": ["you need continuous cloud security monitoring rather than point-in-time analysis", "you need multi-cloud IAM auditing beyond AWS", "you want automated remediation of IAM issues rather than detection"], "when_to_choose": ["you need to audit IAM privilege escalation risks in an AWS account", "you want to simulate AWS authorization locally without making live calls", "you need to trace indirect access paths through role assumption chains", "you want a scriptable CLI or Python library for IAM analysis"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pmapper", "repo": "nccgroup/PMapper", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "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:05:05.880116+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:05.880116+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:57:25.608662+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "37b471fe4f428021a61a4dd2ad6fe9162bd88e4538077bd4a5b50bc64e5c4549", "fetched_at": "2026-08-28T04:05:05.880116+00:00", "kind": "readme", "missing": false, "url": "https://github.com/nccgroup/PMapper"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3025, "days_push": 761, "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}}