Sign in
Menu
Start free trial
Annex E: GDPR

GDPR controls built into your Terraform modules. Enforced before apply.

Article 32 asks for technical measures that protect personal data: encryption at rest and in transit, access controls and audit logging. The modules enforce these controls before apply and list the GDPR article each one maps to, where the catalog names one.

Modules enforce 30 of 50 GDPR controls in the catalog. Of the 39 that cite a GDPR clause, they enforce 22. The controls they do not enforce stay with your team, with consent, DPIAs, data subject requests and breach notification.

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

Annex E: GDPR

Framework
GDPR (EU 2016/679)
For
Your team, on Terraform
E.1

Scope for GDPR

GDPR applies when you process personal data of people in the EU, wherever your company is based. A US product with European users is in scope.

E.1.1

Covers

  • Infrastructure controls on AWS resources that map to GDPR articles, by article in E.3.
  • terraform-aws-modules through the GDPR framework host or your org endpoint, and resources written by hand outside modules once your team switches to the compliance.tf provider.
E.1.2

Stays with your team

  • Data Protection Officer appointment.
  • Data Protection Impact Assessments.
  • Consent management and the legal basis for processing.
  • Data subject requests: access, rectification and erasure (Art. 15 to 22).
  • Breach notification to supervisory authorities (Art. 33 and 34).
  • Data processing agreements (Art. 28).
  • Privacy policies and the organizational records of processing (Art. 30).
  • Resources outside compliance.tf module coverage, and every control E.4 lists as Mapped: 17 with a GDPR clause and 3 without one.
E.2

The source line

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

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

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

E.3

Enforced and mapped, by article

Of the 39 GDPR controls in the documented catalog that cite a clause, modules enforce 22. A control appears once under each article it maps to.

Art. 3220 of 28
Art. 251 of 12
Art. 303 of 5

The catalog maps 11 more controls to GDPR without naming a clause, 8 of them enforced. They are listed apart at the end of E.4 and left out of these counts.

Every row is a control your auditor can look up.

Filter the register, or search by control name or clause, for example Art. 32.

39 of 39 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.
E.4

Control register

ControlStatusGDPR clauses
CloudFront distributions should require encryption in transitEnforcedArt. 32
DynamoDB tables should have AWS KMS encryption enabledEnforcedArt. 32
DynamoDB tables should have encryption enabledEnforcedArt. 32
Attached EBS volumes should have encryption enabledEnforcedArt. 32
EFS file systems should have encryption at rest enabledEnforcedArt. 32
ELB application and classic load balancer logging should be enabledEnforcedArt. 30
ELB application load balancers should drop invalid HTTP headersEnforcedArt. 32
KMS CMK rotation should be enabledEnforcedArt. 25, Art. 30
Log groups should have encryption at rest enabledEnforcedArt. 32
OpenSearch domains should have encryption at rest enabledEnforcedArt. 32
OpenSearch domains node-to-node encryption should be enabledEnforcedArt. 32
RDS DB instance backup should be enabledEnforcedArt. 32
RDS DB instances should be integrated with CloudWatch logsEnforcedArt. 32
RDS DB instance encryption at rest should be enabledEnforcedArt. 32
RDS DB instances should have logging enabledEnforcedArt. 32
Redshift clusters should have audit logging enabledEnforcedArt. 30, Art. 32
Redshift clusters should have automatic snapshots enabledEnforcedArt. 32
Redshift cluster encryption in transit should be enabledEnforcedArt. 32
Redshift clusters should have audit logging and encryption enabledEnforcedArt. 32
S3 buckets should have default encryption enabledEnforcedArt. 32
S3 buckets should have default encryption enabled using KMSEnforcedArt. 32
SNS topics should be encrypted at restEnforcedArt. 32
API Gateway stages should have cache encryption at rest enabledMappedArt. 32
CloudTrail trails should be integrated with CloudWatch logsMappedArt. 25, Art. 30
CloudTrail trails should have logs encrypted using a customer managed KMS keyMappedArt. 25, Art. 30, Art. 32
CloudTrail trails should have log file validation enabledMappedArt. 25, Art. 32
DynamoDB Accelerator (DAX) clusters should be encrypted at restMappedArt. 32
ES domain encryption at rest should be enabledMappedArt. 32
Elasticsearch domain node-to-node encryption should be enabledMappedArt. 32
IAM password policies should have minimum length set to 14 or greaterMappedArt. 25
IAM password policies should require at least one lowercase letterMappedArt. 25
IAM password policies should require at least one numberMappedArt. 25
IAM password policies should require at least one symbolMappedArt. 25
IAM password policies should require at least one uppercase letterMappedArt. 25
IAM password policies should prevent password reuseMappedArt. 25
IAM password policies should have strong configurationsMappedArt. 25
IAM password policies should expire passwords within 90 days or lessMappedArt. 25
SageMaker endpoint configuration encryption should be enabledMappedArt. 32
SageMaker notebook instance encryption should be enabledMappedArt. 32

Clause IDs for the auditor. 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.

E.5

Evidence

E.5.1

What compliance.tf gives your auditor

  • The GDPR 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.
E.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.

E.6

Plans for GDPR

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

E.7

Questions about GDPR

E.7.1

Does this make me GDPR compliant?

No. GDPR compliance requires organizational measures that no infrastructure tool can handle: appointing a DPO, conducting DPIAs, managing consent, responding to data subject requests, and notifying authorities of breaches within 72 hours. Compliance.tf handles the Article 32 technical measures layer. You still need the rest.

E.7.2

We're a US company. Do we need GDPR modules?

If you process personal data of people in the EU, yes. GDPR applies based on whose data you handle, not where your company is located. A US SaaS product with European users is in scope.

E.7.3

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.

E.7.4

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.