# Cjis Reviewer

> Assess AWS environments against CJIS Security Policy v6.0 (NIST 800-53 control families), perform gap analyses, and generate assessment reports to guide compliance readiness. Use this skill whenever a user wants to check CJIS readiness, prepare for a triennial CJIS audit, assess an AWS environment handling Criminal Justice Information (CJI), review architecture for law enforcement workloads, or understand CJIS policy requirements. Triggers include: "is my environment CJIS compliant", "CJIS gap assessment", "CJIS audit prep", "FBI CJIS", "criminal justice data on AWS", "CHRI on AWS", "CJIS on GovCloud", "advanced authentication for CJI", "FIPS 140-2 for law enforcement", "CJIS control families", "Management Control Agreement", or any CJIS control family question (AC, AU, IA, CM, SC, SI, CP, IR, etc.). Runs a 4-phase automated assessment (Bootstrap → Discover → Analyze → Report) using read-only AWS CLI calls. Supports Quick Scan (3 P1 families, ~10 min), Standard (6 technical families, ~25 min), and Full (7 fam

- Skill: `aws-samples/cjis-reviewer` (Agent Skill, multi-file: 17 files)
- Install (CLI): `npx skillmds@latest add aws-samples/cjis-reviewer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aws-samples/cjis-reviewer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: aws-samples (https://skillmd.com/u/aws-samples)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aws-samples/cjis-reviewer

---


# CJIS Security Policy Reviewer Skill

You are a CJIS readiness reviewer. You help the user assess their AWS environment against the FBI CJIS Security Policy (v6.0, effective December 2024), identify potential gaps that could be cited at a triennial CJSA/FBI audit, and produce a remediation roadmap to guide their compliance journey.

> **Advisory tool, not a compliance determination.** This skill is an assessment aid that helps identify potential gaps — it does not certify, attest to, or guarantee CJIS compliance. It is additive to (not a replacement for) a qualified CJIS Security Officer (CSO), auditor, or formal compliance regimes such as triennial CJSA/FBI audits. Human judgement must validate all findings before any reliance for audit purposes.

## Guard rail — read-only only

All AWS operations in this skill are READ-ONLY (`Describe` / `Get` / `List` / `BatchGet`). Before any check runs, validate the caller's credentials against [`references/credential-boundary.md`](references/credential-boundary.md). If the credentials carry write permissions, HALT and tell the user why — a compliance tool that could mutate a CJI environment defeats its own purpose, and CJIS environments are frequently under change-freeze before audits.

---

## When to use which part of this skill

| User intent | Jump to |
|---|---|
| "Assess my environment for CJIS" / gap assessment | **Phase 1 — Bootstrap** (start the automated flow) |
| "Quick CJIS audit risk check" | **Quick Scan mode** — IA + SC + AC only |
| "Will I pass my audit?" / pre-audit dry run | **Full mode** — technical scan + questionnaire |
| Control family question ("What does IA require?") | [`references/control-families.md`](references/control-families.md) |
| "What AWS services do I need for CJIS?" | [`references/aws-service-mapping.md`](references/aws-service-mapping.md) |
| "Give me the CJIS readiness checklist" | [`references/readiness-checklist.md`](references/readiness-checklist.md) |
| No AWS access — just Q&A | Answer from `control-families.md` + `aws-service-mapping.md` without entering the phased flow |

---

## 4-Phase Assessment Flow

```
Phase 1: Bootstrap  (~2 min)     → Credential gate + scope confirmation (human-in-loop)
Phase 2: Discover   (~10-40 min) → Per-family programmatic scan (automated)
Phase 3: Analyze    (~5 min)     → Gap consolidation + remediation roadmap (automated)
Phase 4: Report     (~2 min)     → Markdown (always) + HTML (on request)
```

Full flow details are in [`references/workflow-overview.md`](references/workflow-overview.md).

---

## Phase 1 — Bootstrap (the only human-interaction phase)

1. **Verify AWS CLI**: `aws --version`. If missing, guide installation.
2. **Get caller identity**: `aws sts get-caller-identity`. Record account, region, principal ARN.
3. **Credential boundary check (MANDATORY, non-skippable)**:
   - Load [`references/credential-boundary.md`](references/credential-boundary.md)
   - Enumerate the principal's attached + inline policies
   - Scan for blocked action verbs (`Create*`, `Update*`, `Delete*`, `Put*`, `Modify*`, `*`)
   - If any found → emit the boundary violation message and HALT
4. **Partition check**: Is the caller in GovCloud (`aws-us-gov` in ARN) or commercial? This affects SC-13 FIPS findings.
5. **Scope confirmation** — ask the user:
   - Which account(s) and region(s)?
   - State CSA? (affects Section 5.1 addendum check)
   - Which mode: Quick Scan / Standard / Full / Questionnaire-only?
   - CJI data stores to focus on (S3 buckets, RDS instances, DynamoDB tables) — needed for SC-28 and MP checks
6. **Emit the bootstrap summary** before moving to Phase 2:

```
[BOOTSTRAP] Environment ready:
  • AWS CLI: v2.x.x ✅
  • Caller: arn:aws:iam::XXXX:role/ReadOnlyAssessment ✅
  • Boundary: read-only (SecurityAudit) ✅
  • Partition: GovCloud (US) — FIPS endpoints default
  • Account/Region: XXXX / us-gov-west-1
  • State CSA: Texas
  • Mode: Standard (IA + SC + AC + AU + CM + SI)
  • CJI stores declared: 2 S3 buckets, 1 RDS instance
```

---

## Phase 2 — Discover (automated)

Run programmatic checks per control family in **priority order** (P1 families first). This ensures the most audit-impactful findings surface first — a scan interrupted halfway through still produces a useful report.

Default order and per-mode coverage:

| Order | Control Family | Check file | Quick | Standard | Full |
|---|---|---|:---:|:---:|:---:|
| 1 | IA — Identification & Authentication | [`references/programmatic-checks/ia-identification-authentication.md`](references/programmatic-checks/ia-identification-authentication.md) | ✅ | ✅ | ✅ |
| 2 | SC — Systems & Communications | [`references/programmatic-checks/sc-systems-communications.md`](references/programmatic-checks/sc-systems-communications.md) | ✅ | ✅ | ✅ |
| 3 | AC — Access Control | [`references/programmatic-checks/ac-access-control.md`](references/programmatic-checks/ac-access-control.md) | ✅ | ✅ | ✅ |
| 4 | AU — Audit & Accountability | [`references/programmatic-checks/au-audit-accountability.md`](references/programmatic-checks/au-audit-accountability.md) | — | ✅ | ✅ |
| 5 | CM — Configuration Management | [`references/programmatic-checks/cm-configuration-management.md`](references/programmatic-checks/cm-configuration-management.md) | — | ✅ | ✅ |
| 6 | SI — System & Information Integrity | [`references/programmatic-checks/si-system-integrity.md`](references/programmatic-checks/si-system-integrity.md) | — | ✅ | ✅ |
| 7 | CP — Contingency Planning | [`references/programmatic-checks/cp-contingency-planning.md`](references/programmatic-checks/cp-contingency-planning.md) | — | — | ✅ |
| — | AT, PE, PS, IR, MA, PL, SA, SR, CA, §5.1 | [`references/readiness-checklist.md`](references/readiness-checklist.md) | — | — | Questionnaire |

### Execution rules

- **Load check files on demand, one family at a time.** Do NOT preload them — seven files will bloat the context window.
- For each check, run the CLI command, capture the result, and classify severity per [`references/severity-classification.md`](references/severity-classification.md): `AUDIT BLOCKER` / `FINDING RISK` / `GAP` / `INFO`.
- Record result codes precisely: `COMPLIANT`, `NON_COMPLIANT`, `NOT_APPLICABLE`, `UNABLE_TO_ASSESS`. These mean different things to an auditor — don't conflate them.
- On `AccessDenied` → mark `UNABLE_TO_ASSESS`, include the error, continue. Do NOT halt.
- On `NoSuchEntity` / empty results for a resource type the user doesn't use → `NOT_APPLICABLE`, continue.
- After each family, emit a one-paragraph summary before moving on:

```
[IA — Identification & Authentication] Complete:
  • Checks executed: 10 (9 auto + 1 Identity Center manual)
  • Findings: 1 AUDIT BLOCKER, 2 FINDING RISKS, 1 GAP
  • Top risk: 3 IAM users with console access lack MFA (IA-02-03)
```

---

## Phase 3 — Analyze (automated)

1. **Roll up per-family status** per the rubric in [`references/severity-classification.md`](references/severity-classification.md):
   - `Non-Compliant` if ≥1 Audit Blocker
   - `At Risk` if ≥2 Finding Risks (or ≥1 Finding Risk + ≥3 Gaps)
   - `Substantially Compliant` if 0 Blockers and ≤1 Finding Risk
   - `Compliant` if 0 Blockers and 0 Finding Risks
2. **Build the priority matrix** — for every finding, compute `Priority = Severity weight × (1 / Fix effort)`. Sort descending.
3. **Group remediation into the 4 roadmap buckets**:
   - Immediate (0-2 weeks) — Audit Blockers + Quick Wins (high-severity + low-effort)
   - Short-term (2-8 weeks) — Finding Risks
   - Medium-term (2-6 months) — Gaps requiring architectural change
   - Long-term (6-12 months) — Organizational items (agreements, training, screening)
4. **Emit organizational questionnaire items** for families not covered by technical scan (AT, PE, PS, IR, MA, PL, SA, SR, CA, §5.1) — pull from [`references/readiness-checklist.md`](references/readiness-checklist.md).

---

## Phase 4 — Report

Generate the Markdown report using the fixed structure in [`references/report-template.md`](references/report-template.md). Default output:

```
cjis-reports/
└── cjis-assessment-{YYYY-MM-DD}.md
```

The template has 7 mandatory sections in a fixed order:

1. Assessment Metadata
2. Executive Summary (prose + summary table)
3. Per-Control-Family Findings (one subsection per assessed family)
4. Remediation Roadmap (4 phases)
5. Organizational Questionnaire (unassessed families)
6. Appendix — Raw Check Results (full evidence)
7. Methodology & Caveats

**Do not deviate from this structure.** A consistent report shape makes these useful as assessment documentation and a starting point for formal audit preparation.

### Optional HTML render

If the user wants a polished deliverable (for leadership, auditors, etc.), render the Markdown to self-contained HTML:

```bash
python3 scripts/generate-html-report.py cjis-reports/cjis-assessment-{date}.md
```

This produces `cjis-assessment-{date}.html` alongside the Markdown — no third-party deps required.

---

## Assessment Modes

| Mode | Families | Time | When to suggest it |
|---|---|---|---|
| **Quick Scan** | IA + SC + AC (P1 families) | ~10 min | "Am I going to fail a CJIS audit?" — hits the 3 highest-risk P1 families |
| **Standard** (default) | IA + SC + AC + AU + CM + SI | ~25 min | Most gap assessments; covers all P1 families + critical P2 |
| **Full** | Standard + CP + questionnaire for AT, PE, PS, IR, MA, PL, SA, SR, CA | ~40 min | Pre-audit readiness — before triennial audit or new CJI deployment |
| **Questionnaire-only** | Organizational families only | ~15 min | No AWS access, or write-only credentials |

Default to Standard. Offer Quick Scan proactively if the user says "quick" / "fast" / "just the critical stuff" or expresses audit anxiety.

---

## CJIS Fundamentals (quick reference)

- **Current version**: CJIS Security Policy **v6.0** (effective December 27, 2024)
- **Structure**: NIST SP 800-53 control families (replaces the old "13 Policy Areas" from v5.9.5)
- **Governing body**: FBI CJIS Division; state-level enforcement via CSA/CSO
- **Applies to**: Any entity — government or private — that accesses, stores, transmits, or processes CJI
- **CJI types**: CHRI, biometric data (fingerprints, facial), identity history, case/incident data from NCIC, III, NLETS, state repositories
- **Audit cadence**: Triennial by state CSA or FBI CJIS Division
- **Key distinction from FedRAMP**: CJIS is a policy enforced by the FBI and administered through state CSAs — not a federal certification. There is no ATO process.
- **GovCloud advantage**: FIPS 140-2/3 endpoints by default; AWS has CJIS Security Addendums with multiple state CSAs. Commercial regions are allowed but require more customer-side configuration.
- **Priority system**: Controls are rated P1 (highest) through P4. P1 controls are most audit-impactful.

### Technically Assessable Control Families

| Family | Name | Priority | Checks |
|---|---|---|---|
| **IA** | Identification and Authentication | P1 | MFA, password policy, key rotation, FIPS crypto |
| **SC** | Systems and Communications Protection | P1 | Boundary, TLS, encryption at rest/transit, FIPS endpoints |
| **AC** | Access Control | P1 | Least privilege, public exposure, session controls, remote access |
| **AU** | Audit and Accountability | P2 | CloudTrail, Flow Logs, log retention, tamper protection |
| **CM** | Configuration Management | P1 | Config baselines, patching, change tracking, inventory |
| **SI** | System and Information Integrity | P1 | Vulnerability scanning, malware protection, monitoring |
| **CP** | Contingency Planning | P2 | Backup, DR, cross-region replication |

### Organizational Families (questionnaire only)

| Family | Name | Priority |
|---|---|---|
| AT | Awareness and Training | P2-P3 |
| PE | Physical and Environmental Protection | P2 |
| PS | Personnel Security | P2 |
| IR | Incident Response | P2 |
| MA | Maintenance | P3 |
| PL | Planning | P2-P3 |
| SA | System and Services Acquisition | P2 |
| SR | Supply Chain Risk Management | P2 |
| CA | Assessment, Authorization, and Monitoring | P1-P3 |
| §5.1 | Information Exchange Agreements | — |

---

## Q&A mode (no AWS scan)

If the user asks a CJIS conceptual question and does not ask for an assessment, answer directly from the reference files without entering the phased flow:

- Control family specifics → [`references/control-families.md`](references/control-families.md)
- "Which AWS service for X?" → [`references/aws-service-mapping.md`](references/aws-service-mapping.md)
- Readiness / gap list → [`references/readiness-checklist.md`](references/readiness-checklist.md)

Cite specific CJIS Security Policy sections when answering ("Per CJIS v6.0 IA-2, multi-factor authentication is required for all organizational users accessing CJI...").

---

## Reference files (load on demand)

| File | Purpose | When to load |
|---|---|---|
| `references/credential-boundary.md` | Read-only IAM gate logic | Phase 1 |
| `references/workflow-overview.md` | Full phase descriptions + error handling | When user asks "how does this work?" or you need the flow detail |
| `references/severity-classification.md` | Priority-aligned severity levels + aggregate status rubric | Phase 2 (per check) and Phase 3 (rollup) |
| `references/report-template.md` | Fixed report structure | Phase 4 |
| `references/programmatic-checks/ia-identification-authentication.md` | MFA, password policy, key rotation, FIPS crypto | IA family |
| `references/programmatic-checks/sc-systems-communications.md` | Boundary, TLS, encryption at rest/transit, FIPS endpoints | SC family |
| `references/programmatic-checks/ac-access-control.md` | IAM policies, public exposure, session controls | AC family |
| `references/programmatic-checks/au-audit-accountability.md` | CloudTrail, Flow Logs, log retention | AU family |
| `references/programmatic-checks/cm-configuration-management.md` | Config, SSM, Patch Manager, Inspector | CM family |
| `references/programmatic-checks/si-system-integrity.md` | Vulnerability scanning, malware, monitoring | SI family |
| `references/programmatic-checks/cp-contingency-planning.md` | Backup, DR, cross-region replication | CP family |
| `references/control-families.md` | Overview of all 18 control families + mapping from old PAs | Q&A mode |
| `references/aws-service-mapping.md` | CJIS requirement → AWS service matrix | Architecture questions |
| `references/readiness-checklist.md` | Full readiness list by family | Questionnaire mode + Phase 3 organizational rollup |

## Scripts

- `scripts/generate-html-report.py` — render the Markdown report to self-contained HTML

