Sign in
Menu
Start free trial
Annex G: FedRAMP Moderate

FedRAMP Moderate controls built into your Terraform modules. Enforced before apply.

Your 3PAO assesses the infrastructure controls of the FedRAMP Moderate baseline on AWS. The modules enforce these controls before apply and list the baseline control ID each one maps to, where the catalog names one.

Modules enforce 71 of 96 FedRAMP Moderate controls in the catalog. Of the 65 that cite a FedRAMP Moderate clause, they enforce 44. The controls they do not enforce stay with your team, with your SSP, POA&M, continuous monitoring and the 3PAO assessment.

No credit card or AWS account needed to start. By Anton Babenko, maintainer of terraform-aws-modules, more than 2 billion provisions.

Annex G: FedRAMP Moderate

Framework
FedRAMP Moderate baseline, Rev 4
For
Your team, on Terraform
G.1

Scope for FedRAMP Moderate

If you sell cloud services to US federal agencies, you need FedRAMP authorization. The Moderate baseline covers most SaaS that handles non-classified government data.

G.1.1

Covers

  • Infrastructure controls on AWS resources that map to FedRAMP Moderate baseline control IDs, by control family in G.3.
  • terraform-aws-modules through the FedRAMP Moderate framework host or your org endpoint, and resources written by hand outside modules once your team switches to the compliance.tf provider.
G.1.2

Stays with your team

  • 3PAO assessment engagement and coordination.
  • System Security Plan (SSP) documentation.
  • Plan of Action and Milestones (POA&M) management.
  • Continuous monitoring program.
  • Incident response and reporting to the FedRAMP PMO.
  • Personnel security and access authorization.
  • Physical and environmental protection.
  • Resources outside compliance.tf module coverage, and every control G.4 lists as Mapped: 21 with a FedRAMP Moderate clause and 4 without one.
G.2

The source line

Point a module at the FedRAMP Moderate framework host. Same inputs and outputs, no state migration. Terraform 1.0 or later.

-  source  = "terraform-aws-modules/s3-bucket/aws"
+  source  = "fedrampmoderate.compliance.tf/terraform-aws-modules/s3-bucket/aws"
   version = "~> 5.0"

With an org endpoint, the source names your org host instead, and FedRAMP Moderatecomes from your org's configuration.

G.3

Enforced and mapped, by control family

Of the 65 FedRAMP Moderate controls in the documented catalog that cite a clause, modules enforce 44. A control appears once under each control family it maps to.

SC30 of 38
AC12 of 16
AU9 of 13
SI8 of 11
IA0 of 9
CM5 of 6
CP5 of 5
CA3 of 3
RA1 of 1

The catalog maps 31 more controls to FedRAMP Moderate without naming a clause, 27 of them enforced. They are listed apart at the end of G.4 and left out of these counts.

Every row is a control your 3PAO can look up.

Filter the register, or search by control name or clause, for example SC-28.

65 of 65 shown

Each control links to its public docs page.

Enforced
Modules set this control before anything is deployed.
Mapped
Documented on its docs page, not set by modules. Your team owns it.
G.4

Control register

ControlStatusFedRAMP Moderate clauses
CloudWatch alarms should have an action configuredEnforcedAU-7
CloudWatch log groups should have retention period of at least 365 daysEnforcedAU-6(1)(3), AU-11, SI-12
DynamoDB tables should have point-in-time recovery enabledEnforcedCP-9(b)), SC-5, SI-12, CP-10
Attached EBS volumes should have encryption enabledEnforcedSC-28
EC2 instances should have EBS optimization enabledEnforcedSC-5
EC2 instances should not have a public IP addressEnforcedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, AC-6, SC-7(3)
EC2 instances should use IMDSv2EnforcedAC-3, CA-7(a)(b), AC-6, SI-4(2), SI-4(4), SI-4(5), SI-4(a)(b)(c)
ECR repositories should have image scan on push enabledEnforcedRA-5
EFS file systems should have encryption at rest enabledEnforcedSC-28
ElastiCache Redis clusters should have automatic backups enabled with a retention period of 15 days or greaterEnforcedSI-12
ELB application and classic load balancer logging should be enabledEnforcedAU-2(a)(d), AU-6(1)(3), AU-12(a)(c), AU-3
ELB application load balancer deletion protection should be enabledEnforcedSC-5, CP-10
ELB classic load balancers should have cross-zone load balancing enabledEnforcedSC-5
ELB network load balancers should have TLS listener security policy configuredEnforcedSC-8(1), SC-8
ELB listeners should use approved SSL/TLS protocol versionsEnforcedSC-8(1), SC-8
KMS CMK rotation should be enabledEnforcedSC-12
Lambda functions should restrict public URLEnforcedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, SC-4, AC-6, SC-7(3)
Log groups should have encryption at rest enabledEnforcedAU-9, SC-28
OpenSearch domains should have encryption at rest enabledEnforcedSC-28
OpenSearch domains should have logging to CloudWatch Logs enabledEnforcedAC-2(g)
OpenSearch domains node-to-node encryption should be enabledEnforcedSC-7, SC-8(1), SC-23, SC-8
RDS DB instances and clusters should have enhanced monitoring enabledEnforcedCA-7(a)(b)
RDS DB instance backup should be enabledEnforcedCP-9(b)), SI-12, CP-10
RDS DB instances should be integrated with CloudWatch logsEnforcedAC-2(4), AC-2(g), AU-2(a)(d), AU-6(1)(3), AU-12(a)(c), AU-3
RDS DB instances should have deletion protection enabledEnforcedSC-5
RDS DB instance encryption at rest should be enabledEnforcedSC-28
RDS DB instances should have multiple AZ enabledEnforcedSC-5, CP-10
Redshift clusters should have audit logging enabledEnforcedAC-2(4), AC-2(g), AU-2(a)(d), AU-6(1)(3), AU-12(a)(c), CA-7(a)(b), AU-3, SC-28, SI-4(2), SI-4(4), SI-4(5), SI-4(16)
Redshift clusters should have automatic snapshots enabledEnforcedSI-12
Redshift cluster encryption in transit should be enabledEnforcedSC-23
Redshift clusters should have KMS encryption enabledEnforcedSC-28
S3 buckets should have cross-region replication enabledEnforcedSC-5
S3 buckets should have default encryption enabledEnforcedSC-28
S3 buckets should have default encryption enabled using KMSEnforcedSC-28
S3 buckets should have logging enabledEnforcedAC-2(4), AC-2(g), AU-2(a)(d), AU-6(1)(3), AU-12(a)(c), AU-3
S3 buckets should not be accessible to all authenticated usersEnforcedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, SC-4, AC-6, SC-7(3)
S3 buckets should have object lock enabledEnforcedSC-28
S3 buckets should prohibit public read accessEnforcedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, SC-4, AC-6, SC-7(3)
S3 buckets should prohibit public write accessEnforcedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, SC-4, AC-6, SC-7(3)
S3 buckets with versioning enabled should have lifecycle policies configuredEnforcedAU-11
S3 buckets should have versioning enabledEnforcedAU-9(2), CP-9(b)), SC-5, SI-12, CP-10
SNS topics should be encrypted at restEnforcedSC-28, SC-13
VPC Security groups should only allow unrestricted incoming traffic for authorized portsEnforcedAC-4, SC-7
VPC security groups should restrict ingress from 0.0.0.0/0 or ::/0 to cassandra ports 7199 or 9160 or 8888EnforcedAC-4
API Gateway REST API stages should have a client certificate configuredMappedSC-8(1), SC-23, SC-8
API Gateway stages should have cache encryption at rest enabledMappedSC-28
API Gateway stages should have logging enabledMappedAC-2(g), AU-2(a)(d), AU-6(1)(3), AU-12(a)(c), AU-3
Backup plan rules should retain recovery points for at least 35 daysMappedSI-12
CloudTrail trails should be integrated with CloudWatch logsMappedAC-2(4), AC-2(g), AU-2(a)(d), AU-6(1)(3), AU-7(1), AU-12(a)(c), AU-3, SI-4(a)(b)(c)
CloudTrail trails should have logs encrypted using a customer managed KMS keyMappedAU-9, SC-28
CloudTrail trails should have log file validation enabledMappedAU-9, SI-7(1), SI-7
ES domain encryption at rest should be enabledMappedSC-28
Elasticsearch domain node-to-node encryption should be enabledMappedSC-7, SC-8(1), SC-23, SC-8
IAM password policies should have minimum length set to 14 or greaterMappedAC-2, AC-2(1), AC-2(f), AC-2(j), AC-5(c), IA-5, IA-5(1)(a)(d)(e), IA-5(4), IA-2
IAM password policies should require at least one lowercase letterMappedIA-5
IAM password policies should require at least one numberMappedIA-5
IAM password policies should require at least one symbolMappedIA-5
IAM password policies should require at least one uppercase letterMappedIA-5
IAM password policies should prevent password reuseMappedIA-5
IAM password policies should have strong configurations with minimum length of 8 or greaterMappedIA-5
IAM password policies should have strong configurationsMappedIA-5
IAM password policies should expire passwords within 90 days or lessMappedIA-5
SageMaker endpoint configuration encryption should be enabledMappedSC-28
SageMaker notebook instances should not have direct internet accessMappedAC-17(1), AC-21(b), AC-3, CM-2, SC-7, AC-4, SC-4, AC-6, SC-7(3)
SageMaker notebook instance encryption should be enabledMappedSC-28, SC-13

Enforced or mapped without a named FedRAMP Moderate clause

The catalog lists these 31 controls under FedRAMP Moderate but names no FedRAMP Moderate clause for them, so the register and the counts in G.3 leave them out. Each still links to its docs page.

ControlStatus
CloudFront distributions should use the recommended TLS security policyEnforced
DMS replication instances should not be publicly accessibleEnforced
EC2 instances should have detailed monitoring enabledEnforced
EC2 instances should be in a VPCEnforced
EFS file systems should be encrypted with CMKEnforced
ELB application and network load balancers should use recommended security policiesEnforced
ELB application and network load balancer listeners should use ACM certificatesEnforced
ELB application and network load balancer listeners should use secure protocolsEnforced
Lambda functions should have concurrent execution limit configuredEnforced
Lambda functions should be configured with a dead-letter queueEnforced
Lambda functions should be in a VPCEnforced
RDS clusters should have deletion protection enabledEnforced
RDS DB instances backup retention period should be greater than or equal to 7Enforced
RDS DB instances should have logging enabledEnforced
RDS for MariaDB DB instances should publish logs to CloudWatch LogsEnforced
RDS DB instances should not use public subnetEnforced
RDS for PostgreSQL DB instances should publish logs to CloudWatch LogsEnforced
RDS DB instances should prohibit public accessEnforced
RDS for SQL Server DB instances should publish logs to CloudWatch LogsEnforced
Redshift clusters should have audit logging and encryption enabledEnforced
Redshift clusters should have required maintenance settingsEnforced
Redshift clusters should prohibit public accessEnforced
S3 buckets should have lifecycle policies configuredEnforced
S3 buckets should have policies that prohibit public accessEnforced
S3 public access should be blocked at account levelEnforced
S3 public access should be blocked at bucket levelEnforced
VPC subnet auto assign public IP should be disabledEnforced
CloudTrail trails should have at least one enabled trail present in a regionMapped
ES domains should be in a VPCMapped
Elasticsearch domain should send logs to CloudWatchMapped
S3 buckets should have object logging enabledMapped

Clause IDs for the 3PAO. Your stack stays as it is.

Compliance.tf works alongside your scanners, plan policy, CSPM and GRC tool. It sets the controls in the modules and lists the clause each one is there for.

G.5

Evidence

G.5.1

What compliance.tf gives your 3PAO

  • The FedRAMP Moderate clause IDs behind each enforced setting, with stable control IDs and public docs pages.
  • The config snapshot bound to each environment, and the per-action audit log of promotions between environments.
G.5.2

What comes from your AWS account and GRC tool

Evidence of what actually runs comes from your own account, for example AWS Config and your CSPM. Your GRC tool keeps tracking policies and audit workflows.

G.5.3

Related reading

Make Non-Compliant Terraform Impossible, the comparisons with other tools, and the FedRAMP Moderate framework registry at fedrampmoderate.compliance.tf.

G.6

Plans for FedRAMP Moderate

FedRAMP Moderate is in the 30-day trial and in Full Access, $1,000 a year on AWS Marketplace. Schedule of fees.

G.7

Questions about FedRAMP Moderate

G.7.1

Which FedRAMP baseline does this cover?

Compliance.tf maps controls to the FedRAMP Moderate baseline (Rev 4), which includes 325 controls from NIST 800-53. We cover the subset of those controls that map to AWS resource configuration, for example in the Access Control (AC), Audit and Accountability (AU), System and Communications Protection (SC), and Contingency Planning (CP) families.

G.7.2

Can I adopt this gradually, or is it all-or-nothing?

Fully incremental. Start with one module in one environment. Your existing modules continue working untouched. If you use Terragrunt or Terramate to orchestrate your runs, nothing changes - you're only swapping the module source line. There is no global policy agent to deploy, no wrapper binary, no sidecar. Each module source line is independent.

G.7.3

What if we want to switch back?

Each module keeps the inputs and outputs of its terraform-aws-modules counterpart and needs no state migration, so switching back is the same source line change in reverse.