ATO Readiness Checklist
On this page
This checklist helps deploying agencies prepare for an Authority to Operate (ATO) assessment. Each section covers a category of requirements that must be satisfied before submitting a System Security Plan (SSP) to the authorizing official.
CRAIG tracks NIST SP 800-53 control implementation status via GET /v1/security/nist.
Use this endpoint (or craig security nist list) to generate a baseline control assessment report.
|
1. Infrastructure Prerequisites
These items must be in place before CRAIG services can operate in a production environment.
-
TLS termination configured for all public-facing endpoints (reverse proxy or load balancer with valid certificates)
-
DNS records configured for all CRAIG services and Keycloak
-
Keycloak deployed and configured with the agency’s identity provider (SAML or OIDC federation)
-
PostgreSQL databases provisioned for each service (
craig_rules,craig_cases,craig_placement,craig_exchange,craig_financial,craig_reporting,craig_security,craig_composition;craig_intakeis pre-created but stays empty — the intake edge is stateless per ADR-017) -
RabbitMQ cluster deployed with TLS and access control
-
S3-compatible object storage provisioned (e.g., AWS S3, MinIO, Garage) with encryption at rest
-
Container runtime environment configured (Kubernetes, Docker Swarm, or equivalent)
-
Network segmentation: backend services not directly accessible from the internet (BFF pattern enforced)
-
Log aggregation infrastructure configured (syslog, ELK, or cloud-native logging)
2. Security Configuration
These CRAIG-specific settings must be configured for production security.
-
CRAIG_WEB__SESSION_SECRETset from your secret store (≥64 bytes,openssl rand -hex 32); service refuses to start otherwise (ADR-013) -
CRAIG_WEB__SESSION_MAX_AGE_SECSreviewed against agency idle-timeout policy (default: 1800 s / 30 min) -
SESSION_SECURE=true— enforces Secure flag on session cookies -
CRAIG_WEB__CORS_ORIGINSset to specific production origin(s) — not wildcard (*) -
CRAIG_INTAKE__PUBLIC_RATE_LIMITset to an appropriate per-hour value for expected intake volume (default 5/hour is deliberately conservative for production) -
CRAIG_INTAKECAPTCHA_SECRETset to a valid Cloudflare Turnstile secret (or literaldisabledonly for internal/dev environments);CRAIG_INTAKECAPTCHA_SITE_KEYset on the client/template side -
Keycloak
craig-uiclient redirect URIs restricted to production domain only -
Keycloak
craig-apiclient ROPC grant disabled (or restricted to service accounts) in production -
Keycloak password policy configured: minimum 12 characters, complexity requirements, password history
-
Keycloak brute-force protection enabled: account lockout after 5 failed attempts
-
Keycloak session timeouts configured: idle timeout (15 min), max session (8 hr)
-
API key rotation policy established for partner intake integrations
3. Compliance Documentation
These documents and assessments must be completed.
-
NIST SP 800-53 control assessment completed using
/v1/security/nist— all controls reviewed and status updated -
NIST architecture mapping reviewed (see NIST Architecture Mapping) and agency-specific controls documented
-
Security review schedule established — biennial reviews per 45 CFR 95.621(f), tracked via
POST /v1/security/reviews -
Data classification policy documented — identify PII, PHI, and CUI categories handled by CRAIG
-
Privacy Impact Assessment (PIA) completed for child welfare data processing
-
Records retention schedule defined and configured in
craig-securityarchive policies -
Vulnerability disclosure policy published (based on
SECURITY.mdtemplate) -
Remediation SLA commitments documented per Security Operations
-
CycloneDX SBOM published as a GitLab Release asset on every tagged release (generated by
cargo xtask sbom— wired in.gitlab-ci.ymlsbom:+release:jobs; asset namecraig-sbom-<tag>.cdx.json). Provides third-party supply-chain attestation for dependency review during authorization.
4. Data Exchange
These items are required for agencies that will exchange data with external partners.
-
Data sharing agreements executed with all exchange partners (per ACF Technical Bulletin #8)
-
Partner endpoint URLs configured in
craig-exchange -
Partner authentication credentials provisioned (API keys or mutual TLS)
-
JWS signing keys generated and registered for intake report integrity verification (ECDSA P-256)
-
ICPC interstate compact agreements in place for participating states
-
Exchange adapter configurations tested for each active partner (CWCA, court, education, health, tribal)
-
Data format mapping validated — AFCARS element codes, NCANDS codes, FIPS codes
5. Testing and Validation
These verification steps confirm the deployment is secure and functional.
-
Penetration test commissioned and completed (see Penetration Test Process)
-
All Critical and High penetration test findings remediated and re-tested
-
E2E test suite (
cargo xtask e2e) passes against the production-like environment (the Playwright report gives live counts) -
Integration test suite (
cargo nextest run --workspace --locked --profile integration) passes against production databases -
Accessibility conformance: the axe-core blocking pre-push gate covers the enumerated page set with zero WCAG 2.1 A/AA or Section 508 violations (page counts and dates live in the VPAT 2.5)
-
Performance baseline established — response times under expected concurrent user load
-
Disaster recovery test completed — full restore from backup verified
-
RBAC boundary testing completed — each role verified to access only authorized endpoints
-
Public intake form tested: rate limiting, CAPTCHA, honeypot, and HTML sanitization verified
6. Operational Readiness
These operational procedures must be in place before go-live.
-
Backup schedule configured — PostgreSQL (daily full, continuous WAL archiving), RabbitMQ definitions, Keycloak realm, object storage
-
Disaster recovery plan documented — RPO and RTO targets defined, restoration procedures tested
-
Incident response plan documented — roles, communication channels, escalation procedures (see Incident Response Overview)
-
On-call rotation established for Critical and High severity incidents
-
Monitoring and alerting configured — service health checks, database connection pools, disk usage, certificate expiry
-
Log retention policy configured — minimum 1 year for audit logs per federal requirements
-
Patch management process documented — how CRAIG updates are evaluated, tested, and deployed
-
User training completed — caseworkers, supervisors, administrators trained on CRAIG web UI and procedures
-
Help desk procedures established for password resets, account lockouts, and access requests
7. Authorization
These are the final steps to obtain the Authority to Operate.
-
System Security Plan (SSP) drafted — references CRAIG’s NIST architecture mapping, documents agency-specific controls, identifies inherited controls from hosting provider
-
Plan of Action and Milestones (POA&M) prepared for any partially implemented or planned controls
-
Security Assessment Report (SAR) from an independent assessor or the agency’s security team
-
Authorizing Official (AO) identified — typically the agency CISO or delegated authority
-
ATO package submitted to the AO: SSP, SAR, POA&M, penetration test report, risk assessment
-
Continuous monitoring plan established — quarterly vulnerability scans, annual penetration tests, biennial security reviews, ongoing audit log review
-
ATO granted with conditions documented — expiration date, POA&M milestones, continuous monitoring requirements
Post-ATO Continuous Compliance
After ATO is granted, the following ongoing activities maintain compliance:
-
Quarterly: Run vulnerability scans (dependency scanning, container scanning). Review and update POA&M.
-
Biennial: Conduct security review per 45 CFR 95.621(f). Record via
POST /v1/security/reviews. -
Annually: Commission penetration test. Review and update SSP. Verify backup and DR procedures.
-
On change: Re-assess controls affected by major CRAIG upgrades, infrastructure changes, or new integrations.
-
Continuously: Monitor audit logs via
GET /v1/security/audit. Review breach detection alerts. Apply security patches per remediation SLAs.
Related Pages
-
NIST Architecture Mapping — how CRAIG implements each NIST SP 800-53 control
-
Security Operations — remediation SLAs, penetration testing, incident response
-
Deployment Guide — production deployment procedures
-
Configuration Reference — all environment variables including security settings