🚨 CMMC Phase One started November 10! Here's everything you need to know →

How to Configure AWS VPC Subnets and Security Groups to Meet FAR 52.204-21 / CMMC 2.0 Level 1 - Control - SC.L1-B.1.XI

Step-by-step guidance to design AWS VPC subnets and security groups that satisfy FAR 52.204-21 and CMMC 2.0 Level 1 SC.L1-B.1.XI requirements for protecting controlled unclassified information.

•
April 03, 2026
•
5 min read

Share:

Schedule Your Free Compliance Consultation

Feeling overwhelmed by compliance requirements? Not sure where to start? Get expert guidance tailored to your specific needs in just 15 minutes.

Personalized Compliance Roadmap
Expert Answers to Your Questions
No Obligation, 100% Free

Limited spots available!

This post explains how to design AWS VPC subnets and security groups to meet the intent of FAR 52.204-21 and the CMMC 2.0 Level 1 control SC.L1-B.1.XI by implementing network separation, least-privilege access, and auditable controls—providing practical steps, example configs, and small-business scenarios you can implement today.

Design and implementation approach for Compliance Framework

At a high level, the Compliance Framework expects contractors to protect Federal Contract Information (FCI) and basic CUI handling by limiting network exposure, segregating public-facing and internal resources, and controlling inbound/outbound flows. Your VPC should implement a tiered network: public subnets for load balancers and bastion endpoints (if used), private subnets for application servers, and isolated subnets for databases and backups. Route tables, NAT gateways, and VPC endpoints should be used to keep private resources from direct Internet exposure while still allowing necessary outbound access for updates and APIs.

Subnet layout and routing

Use clear CIDR planning (for a small business a single VPC such as 10.0.0.0/16 is typical) and split into smaller subnets per Availability Zone (AZ) for resiliency, e.g., public subnets 10.0.0.0/24 and 10.0.2.0/24, private app subnets 10.0.1.0/24 and 10.0.3.0/24, and database subnets 10.0.4.0/26 per AZ. Attach an Internet Gateway (IGW) only to the route tables for the public subnets. For private subnets, route Internet-bound traffic through a NAT Gateway deployed in the public subnet to avoid public IP assignment to private instances. If your systems interact with AWS services (S3, Secrets Manager) for backups or configuration, create VPC endpoints (Gateway/Interface) to avoid egress to the public Internet and reduce the attack surface.

Security groups: rules and patterns

Security Groups (SGs) are stateful and should be your primary mechanism for host-to-host access control. Adopt these patterns: 1) default-deny inbound (no 0.0.0.0/0 except where explicitly required), 2) allow only required ports—e.g., ALB -> app on 80/443 or app-specific ports, app -> db on database port (e.g., 5432 for Postgres) using SG references rather than CIDR, and 3) restrict outbound traffic where appropriate (do not leave egress wide-open if endpoints/processes don't need it). Use SG references so the application SG is the only allowed source for the DB SG (source = sg-application) rather than opening the DB to a CIDR block.

Example CLI and IaC snippets

Below are short examples you can adapt. CLI to create a security group and allow application SG to reach DB port:

# Create a security group for the app
aws ec2 create-security-group --group-name app-sg --description "App servers" --vpc-id vpc-01234567

# Create a security group for the DB
aws ec2 create-security-group --group-name db-sg --description "Database servers" --vpc-id vpc-01234567

# Allow app-sg to access PostgreSQL on db-sg (replace IDs)
aws ec2 authorize-security-group-ingress --group-id sg-db --protocol tcp --port 5432 --source-group sg-app

For Infrastructure-as-Code use Terraform to enforce reviewable changes; example (condensed):

resource "aws_security_group" "app" {
  name   = "app-sg"
  vpc_id = var.vpc_id

  ingress { from_port=80 to_port=80 protocol="tcp" cidr_blocks=["10.0.0.0/16"] } # internal ALB only
  egress  { from_port=0  to_port=0  protocol="-1"  cidr_blocks=["0.0.0.0/0"] } # tighten if needed
}

resource "aws_security_group" "db" {
  name   = "db-sg"
  vpc_id = var.vpc_id

  ingress {
    from_port       = 5432
    to_port         = 5432
    protocol        = "tcp"
    security_groups = [aws_security_group.app.id]
  }
}

Access control, logging, and automation

To meet compliance and auditability expectations, avoid manual SG edits in the console. Enforce SG changes via a source-controlled IaC pipeline (Terraform/CloudFormation) and require code review. Use AWS Systems Manager Session Manager for administrative access to instances rather than opening SSH/RDP to the Internet—this removes the need for public bastions and reduces port exposure. Enable CloudTrail for API auditing, VPC Flow Logs for traffic monitoring, and AWS Config rules (e.g., restricted-common-ports, restricted-security-group-ingress) to detect wide-open security groups. Forward logs to a centralized, immutable store (S3 with MFA Delete or an encrypted log archive) for retention policies required by contract.

Real-world small business example

Example: a 12-person MSP hosts a web app containing limited CUI for a DoD contractor. They deploy an ALB in public subnets, app servers in private subnets, and a PostgreSQL RDS in isolated DB subnets. The ALB allows 0.0.0.0/0 only for HTTP/HTTPS; app servers accept traffic only from the ALB SG. RDS accepts traffic only from the app SG and is not publicly accessible. Patch management is performed through an SSM Automation document via SSM endpoints (no direct Internet access), and all backups go to an S3 bucket through a VPC Gateway endpoint with a bucket policy limiting access to the VPC endpoint principal. The company enforces SG changes via Terraform PRs to ensure every change is reviewed and logged.

Compliance tips and best practices

Concrete tips: 1) Implement a baseline SG template and require PRs for changes, 2) Use SG descriptions and consistent tags (Environment, Owner, Purpose) for audits, 3) Use VPC endpoints where possible to avoid crossing the public Internet, 4) Restrict egress for workloads processing CUI to approved destinations, 5) Schedule quarterly reviews of security groups and NACLs and keep an audit trail, and 6) Automate detection of risky SGs (0.0.0.0/0 on admin ports) with AWS Config, Security Hub, or a simple Lambda that emails Slack/Teams on detection.

Risk of not implementing the requirement

Failing to implement subnet isolation and restrictive security groups increases the likelihood of data exposure, lateral movement after compromise, and unauthorized access to sensitive information. Operationally this can mean ransomware propagation from a web server into private databases or exfiltration of FCI. From a compliance perspective, nonconformance with FAR 52.204-21 and CMMC Level 1 practices can result in contract penalties, disqualification from future bids, and reputational damage—risks that are disproportionate for small businesses working with government customers.

Summary: Implementing a clear VPC subnet architecture combined with least-privilege security groups, VPC endpoints, SSM-based access, automated IaC workflows, and monitoring satisfies the intent of FAR 52.204-21 / CMMC 2.0 Level 1 SC.L1-B.1.XI and materially reduces risk for small businesses—start with a baseline design, enforce changes through code review, enable logging, and periodically validate configurations with AWS Config and manual audits to maintain continuous compliance.

 

Quick & Simple

Discover Our Cybersecurity Compliance Solutions:

Whether you need to meet and maintain your compliance requirements, help your clients meet them, or verify supplier compliance we have the expertise and solution for you

 CMMC Level 1 Compliance App

CMMC Level 1 Compliance

Become compliant, provide compliance services, or verify partner compliance with CMMC Level 1 Basic Safeguarding of Covered Contractor Information Systems requirements.
 NIST SP 800-171 & CMMC Level 2 Compliance App

NIST SP 800-171 & CMMC Level 2 Compliance

Become compliant, provide compliance services, or verify partner compliance with NIST SP 800-171 and CMMC Level 2 requirements.
 HIPAA Compliance App

HIPAA Compliance

Become compliant, provide compliance services, or verify partner compliance with HIPAA security rule requirements.
 ISO 27001 Compliance App

ISO 27001 Compliance

Become compliant, provide compliance services, or verify partner compliance with ISO 27001 requirements.
 FAR 52.204-21 Compliance App

FAR 52.204-21 Compliance

Become compliant, provide compliance services, or verify partner compliance with FAR 52.204-21 Basic Safeguarding of Covered Contractor Information Systems requirements.
 
Hello! How can we help today? 😃

Chat with Lakeridge

We typically reply within minutes