This post provides a practical, step-by-step checklist to implement FAR 52.204-21 / CMMC 2.0 Level 1 control AC.L1-B.1.IV — controlling what information is placed on publicly accessible systems — with specific, actionable advice for small businesses following the Compliance Framework.
What this control requires (brief)
At a high level, FAR 52.204-21 and CMMC 2.0 Level 1 require contractors to limit the posting of information on publicly accessible systems that could reveal sensitive information about contracts, operations, or personnel. For organizations following the Compliance Framework, that means establishing an inventory, applying classification and redaction processes, enforcing technical access controls, and monitoring public-facing assets to prevent inadvertent exposure.
Step-by-step implementation checklist
1) Inventory and classify all public-facing assets
Start by discovering every publicly accessible system: web servers, object storage (S3/GCS/Azure Blob) with public ACLs, Git repos, CI/CD artifacts, public test endpoints, DNS records, and third-party services (e.g., documentation sites, marketing platforms). Record the owner, purpose, and type of content hosted. For each asset, classify content as Public, Internal, or Restricted under your Compliance Framework classification scheme.
- Tools: use automated discovery — nmap, masscan for IP space; cloud inventory APIs (AWS Config, Azure Resource Graph); GitHub/GitLab search for secrets/README with credentials.
- Output: a CSV or CMDB entry with asset name, URL, owner, content classification, last review date.
2) Remove, redact, or re-host sensitive content
For any content classified Internal or Restricted, remove it from public buckets/servers or redact sensitive fields before publishing. Small businesses frequently publish invoices, configuration files, or internal PDFs by mistake — these must be removed promptly.
Practical edits and commands:
# Remove public-read ACL on an S3 bucket
aws s3api put-public-access-block --bucket my-public-bucket \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
# Turn off directory listing in nginx
# in server block:
autoindex off;
Use redaction scripts or manual review to strip contract numbers, internal IP addresses, procurement terms, or personal data before posting. Maintain a "no-post" list (e.g., contract identifiers, CAGE codes, order numbers) and scan new content with simple regex or DLP tools in CI.
3) Enforce access controls and prevent accidental public exposure
Where content must be restricted, require authentication and authorization (e.g., OAuth, SSO, IP allowlists). For cloud storage, prefer private buckets and signed URLs for occasional public access. For web servers, ensure ACLs and firewall rules deny unnecessary inbound access.
- S3 example: use Block Public Access + bucket policies that deny s3:GetObject unless condition matches principal or request is via presigned URL.
- Git example: make repos private and use branch protections; run repo scans to detect secrets (git-secrets, truffleHog) before merge.
4) Harden servers, storage, and CDN configurations
Harden public-facing infrastructure with standard controls: TLS 1.2+/strong ciphers, HSTS, content-security-policy, X-Content-Type-Options, and strict cookie flags. Disable unnecessary server features (directory listings, TRACE method). Keep software patched and minimize installed packages.
# Recommended nginx headers (example)
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
If you use a CDN, enforce origin access controls so objects cannot be fetched directly from storage without passing CDN policies.
5) Monitor, detect, and respond
Enable logging on all public systems: web access logs, S3 access logs, CDN logs, and cloud audit logs (CloudTrail, Azure Activity Log). Feed logs into a lightweight SIEM or cloud-native monitoring and set alerts for anomalous accesses or newly exposed public resources. Schedule automated scans for exposed S3 buckets, open ports, and sensitive keywords on public pages.
Example detections: an alert for "bucket policy changed to public" or "sensitive keyword found on page" that triggers an incident where the owner must remove or remediate the content within a defined SLA (e.g., 4 hours).
6) Governance, change control, and training
Implement a content approval workflow: marketing, engineering, or support teams must route public content through a checklist that includes a classification field and an explicit privacy check. Use pull requests and automated checks (linters, regex scans) in CI/CD pipelines so nothing reaches production without review. Provide short periodic training for staff who publish content (how to redact, examples of unacceptable posting).
Small-business scenario: "Acme Widgets" requires marketing to request a 'public posting approval' tag in their CMS; the security owner receives automatic notification and verifies no contract IDs or PII are present before publishing.
Risk of not implementing this requirement
Failure to control information on public systems can lead to unintentional disclosure of contract details, procurement data, system architecture, or personal data. Risks include loss of contracts, reputational damage, social engineering and phishing attacks against staff, and regulatory fines. For companies working with the government, noncompliance with FAR/CMMC can result in contract suspension or removal from bidding.
Compliance tips and best practices
Keep the process lightweight for small businesses: automate discovery and remediation where possible, use templates for policies and approvals, and require minimal but effective controls (private-by-default storage, presigned URLs for sharing, and CI checks for public content). Maintain an audit trail of approvals and removals (who approved, when content was changed) to demonstrate compliance during assessments.
In summary, implement a simple, repeatable program: inventory public assets; apply classification and redaction; enforce access controls and hardening; monitor and alert; and embed governance with training. These steps align with the Compliance Framework and let small businesses meet FAR 52.204-21 / CMMC 2.0 Level 1 AC.L1-B.1.IV while minimizing operational burden.