Help us improve
Share bugs, ideas, or general feedback.
From pm-engineering
Writes a structured infrastructure-as-code review report with severity-categorized findings, remediation steps, and a reusable review checklist for Terraform, CloudFormation, Pulumi, or Ansible.
npx claudepluginhub mohitagw15856/pm-claude-skills --plugin pm-engineeringHow this skill is triggered — by the user, by Claude, or both
Slash command
/pm-engineering:infra-as-code-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Produce a structured infrastructure-as-code review that applies security, reliability, and operational quality standards to a specific body of IaC code. The output serves two purposes: an actionable review report for the code at hand (with findings by severity and specific remediation steps), and a reusable checklist the team can apply to every future IaC change. If the user provides actual cod...
Analyzes Terraform, CloudFormation, and Pulumi IaC for module structure, state management, drift prevention, and security posture. Use when reviewing configs, auditing modules, or PRs adding cloud resources.
Orchestrates AWS Well-Architected Framework reviews of IaC code in Terraform, CloudFormation, CDK, and Pulumi across 6 pillars for infrastructure and architecture assessments.
Verifies DevOps/infrastructure code like Terraform and Ansible YAML against best practices, security, simplicity, maintainability, and documentation. Scores readiness and generates reports.
Share bugs, ideas, or general feedback.
Produce a structured infrastructure-as-code review that applies security, reliability, and operational quality standards to a specific body of IaC code. The output serves two purposes: an actionable review report for the code at hand (with findings by severity and specific remediation steps), and a reusable checklist the team can apply to every future IaC change. If the user provides actual code, analyze it and populate the findings table with real issues. If no code is provided, produce the checklist and a template findings report.
Ask for these if not already provided:
Reviewer: [Name / Claude] IaC Tool: [Terraform / CloudFormation / Pulumi / Ansible / CDK] Cloud Provider: [AWS / GCP / Azure] Code Location: [Repo path or PR link] Review Date: [Date] Overall Risk: [Critical / High / Medium / Low]
| Severity | Finding Count | Resolved in This Review | Carry-Over Risk |
|---|---|---|---|
| Critical | [n] | [n] | [Yes/No — explain] |
| High | [n] | [n] | [Yes/No — explain] |
| Medium | [n] | [n] | [Yes/No — explain] |
| Low | [n] | [n] | [Yes/No — explain] |
| Total | [n] | [n] |
Recommendation: [Approve / Approve with Required Changes / Block — one sentence rationale]
| Field | Detail |
|---|---|
| Severity | Critical |
| Category | [IAM / Secrets / Encryption / Network / State / Naming / Cost] |
| Resource | [resource_type.resource_name] |
| File / Line | [path/to/file.tf:42] |
| Risk | [What can go wrong — be specific about the attack vector or failure mode] |
Current code:
# [paste the problematic snippet]
resource "aws_s3_bucket" "data" {
bucket = "my-bucket"
acl = "public-read" # PROBLEM: public read access
}
Remediation:
resource "aws_s3_bucket" "data" {
bucket = "my-bucket"
}
resource "aws_s3_bucket_public_access_block" "data" {
bucket = aws_s3_bucket.data.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
Why this matters: [One sentence linking the specific risk to business impact — data exposure, compliance violation, etc.]
| Field | Detail |
|---|---|
| Severity | High |
| Category | [Category] |
| Resource | [resource_type.resource_name] |
| File / Line | [path/to/file.tf:line] |
| Risk | [Specific risk description] |
Current code:
# [problematic snippet]
Remediation:
# [fixed snippet]
| Field | Detail |
|---|---|
| Severity | Medium |
| Category | [Category] |
| Resource | [resource_type.resource_name] |
| File / Line | [path/to/file.tf:line] |
| Risk | [Specific risk description] |
Remediation: [Prose or code snippet — choose whichever is clearer for this finding]
| Field | Detail |
|---|---|
| Severity | Low |
| Category | [Category] |
| Resource | [resource_type.resource_name] |
| File / Line | [path/to/file.tf:line] |
| Suggestion | [What to improve and why] |
Use this checklist on every IaC pull request. Check every item; mark N/A only when the item genuinely does not apply to the resources being provisioned.
"*") in IAM policies — policies follow least-privilege"*") in IAM policies unless explicitly justified with a commentaws:RequestedRegion, sts:ExternalId)"*".tf, .yaml, or .json filesensitive = true is set on all output values and variables that contain secrets (Terraform).gitignore or equivalent excludes *.tfvars, terraform.tfstate, and any file that may contain resolved secretsencrypted = false or equivalentrequire_ssl = true or equivalent parameter)Deny on non-TLS requests (aws:SecureTransport: false)0.0.0.0/0 ingress except on ports 80/443 for public-facing services0.0.0.0/0publicly_accessible = false on RDS instances unless explicitly required and documented[env]-[team]-[resource-type]-[identifier]Environment (e.g., prod / staging / dev)Team or OwnerService or ApplicationCostCenter (if required by finance policy)ManagedBy: terraform (or equivalent IaC tool tag)default-vpc, launch-wizard-1)terraform.tfstate and *.tfstate.backup are in .gitignoresource = "git::...?ref=main"required_providers — no unconstrained >= x.yrequired_versionfor_each, count)r5.16xlarge) or storage allocations are justified in a commentlifecycle { prevent_destroy = true } is set on stateful resources in production (databases, state buckets)ignore_changes is used sparingly and each instance is documented with a rationale comment| ID | Title | Severity | Category | File | Status |
|---|---|---|---|---|---|
| CRIT-01 | [Title] | Critical | [Category] | [file:line] | Open |
| HIGH-01 | [Title] | High | [Category] | [file:line] | Open |
| MED-01 | [Title] | Medium | [Category] | [file:line] | Open |
| LOW-01 | [Title] | Low | [Category] | [file:line] | Open |
List only Critical and High findings that must be resolved before this code is merged:
Medium and Low findings should be tracked as follow-up issues with a committed resolution date.
Review conducted by [Reviewer] on [Date] — checklist version [1.0]