{"adoption": {"forks": 208, "observed_at": "2026-08-28T04:04:19.459252+00:00", "stars": 1309}, "canonical_url": "https://ross.abutalabs.com/products/cfn_nag", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Linting tool for CloudFormation templates", "domain": ["security", "infrastructure-as-code", "cloud-computing", "developer-tools"], "enriched": true, "function": ["linter", "security", "vulnerability-scanning", "testing", "ci-cd"], "health_score": 20, "homepage": null, "language": "Ruby", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["stelligent/cfn_nag"], "name": "stelligent/cfn_nag", "platform": ["cli", "ruby"], "pushed_at": "2024-08-01T23:27:46+00:00", "repo": "stelligent/cfn_nag", "stars": 1309, "tags": ["cloudformation", "aws", "infrastructure-as-code", "security-linting", "iam", "compliance", "static-analysis", "devops", "macos", "linux", "docker"], "topics": ["continuous-testing", "unit-testing", "cloudformation", "aws", "devops", "iam-rules", "cloudformation-templates", "cfn-nag", "open-source", "static-analysis", "stelligent", "cfn", "lint", "linting", "amazon", "security", "security-automation", "cloudformation-security", "hacktoberfest", "compliance"], "urls": [], "use_cases": ["lint cloudformation templates for security issues", "find overly permissive IAM policies in cfn templates", "check that security groups don't allow wildcard access", "detect missing encryption in cloudformation resources", "scan cfn templates for hardcoded passwords", "run cloudformation security checks in CI pipeline", "audit infrastructure-as-code for compliance violations"], "what_it_is": "cfn_nag is a command-line linting tool that scans AWS CloudFormation templates for insecure infrastructure patterns such as overly permissive IAM and security group rules, missing encryption, disabled access logs, and hardcoded passwords. It is written in Ruby, installable via gem/brew/Docker, and integrates into CI/CD pipelines with non-zero exit codes on violations.", "when_to_avoid": ["you use Terraform, Pulumi, or other non-CloudFormation IaC tools", "you need full static analysis or runtime security scanning rather than pattern-based linting", "you need actively developed features, as the project appears to be in maintenance mode"], "when_to_choose": ["you use AWS CloudFormation and want automated security linting before deployment", "you need to enforce IAM and security group best practices in CI/CD", "you want a simple CLI or Docker-based scanner with JSON output for tooling integration"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/cfn_nag", "repo": "stelligent/cfn_nag", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "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:04:19.459252+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:19.459252+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:50:01.246836+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b36f4e5471e27ed3240fa972cc9abc0025f60cc2aae40891334214e2e7775934", "fetched_at": "2026-08-28T04:04:19.459252+00:00", "kind": "readme", "missing": false, "url": "https://github.com/stelligent/cfn_nag"}], "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": 3856, "days_push": 762, "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}}