WAF-SOV-080 – Dependency & Subprocessor Inventory
Description
An inventory of all dependencies and subprocessors MUST be maintained: managed cloud services, third-party SaaS tools, CI/CD platforms, observability providers, and data processors. Changes to this inventory MUST be versioned, reviewed, and approved.
Provider version constraints in Terraform MUST be pinned to prevent silent upgrades. Module sources MUST reference approved registries with version-locked references.
Rationale
Cloud sovereignty cannot be assessed without knowing which third parties process data, from which jurisdiction, and on what legal basis. A Datadog agent sending logs to US servers, a GitHub Actions runner with production access, or an unreviewed Terraform module from an untrusted source can each independently compromise the sovereignty posture. Supply chain awareness is the prerequisite for supply chain control.
Threat Context
| Risk | Description |
|---|---|
SaaS tool outside approved jurisdiction |
Monitoring, ticketing, or CI/CD tool processes sovereign data outside the approved region. |
Unpinned Terraform provider |
Unpinned provider version is silently updated to a version with breaking changes or changed behavior. |
Unreviewed Terraform module |
Terraform module from an unknown author with malicious resource configurations. |
Subprocessor without DPA |
New subprocessor added without a GDPR Art. 28-compliant DPA. |
CI/CD as unrecognized subprocessor |
CI/CD platform (GitHub, GitLab, CircleCI) with production access not listed as a subprocessor. |
Regulatory Mapping
| Framework | Controls |
|---|---|
GDPR |
Art. 28 – Data processors; Art. 30 – Records of processing activities; Art. 44–46 – Transfers to third countries |
BSI C5:2020 |
SCA-01 – Supply chain management; OPS-04 – Data management |
EUCS (ENISA) |
SCA-01 – Supply chain; IAM-04 – Third-party access |
ISO 27001:2022 |
A.5.19 – Information security in supplier relationships; A.5.20 – Information security in supplier agreements; A.5.21 – Information security in the ICT supply chain |
SLSA |
L2 – Build integrity; L3 – Source integrity |
Requirement
-
All
required_providersin Terraform MUST include a version constraint -
required_versionMUST be set in the Terraform block -
Terraform module versions MUST be pinned (Registry:
version = "x.y.z"; Git:?ref=vX.Y.Z) -
Module sources MUST NOT reference unapproved public Git repositories
-
The dependency register MUST be machine-readable (YAML/JSON) and versioned in the repository
-
A DPA reference MUST exist in the register for all subprocessors handling personal data
-
The register MUST be reviewed at least quarterly
-
terraform.lock.hclMUST be committed to the repository
Implementation Guidance
-
Create dependency register: YAML/JSON in Git; all external services with name, purpose, processed data, hosting region, and legal basis.
-
Pin provider versions: All entries in
required_providerswith~>constraint (e.g.~> 5.40for AWS Provider v5.x). -
Pin module versions: Registry modules with
version = "x.y.z"; Git modules with?ref=v1.2.3. -
DPA for data processors: DPA agreement for every subprocessor with personal data; reference in the register.
-
Quarterly review: Review subprocessor list quarterly; record changes in changelog.
-
Commit lock file:
terraform.lock.hclin repository; CI blocks if lock file is missing. -
CI/CD as subprocessor: List the CI/CD platform itself as a subprocessor when secrets or data flow through it.
Maturity Levels
| Level | Name | Criteria |
|---|---|---|
1 |
No formal inventory, provider versions unpinned |
Some knowledge of main dependencies; no structured documentation. |
2 |
Dependency inventory documented, providers pinned |
Dependency register exists (even as a table); Terraform provider versions pinned in |
3 |
Versioned inventory with DPA references |
Machine-readable dependency register in Git; every subprocessor has a DPA reference and data class annotation; quarterly review process with documented evidence. |
4 |
Automated supply chain monitoring |
Automatic alerts on new/changed providers or modules in PRs; SBOM generated for infrastructure deployments; subprocessor changes trigger review workflow. |
5 |
Full supply chain attestation |
SLSA compliance for critical supply chain components; automated DPA status verification integrated into deployment gate; cryptographic attestation for module provenance. |
Terraform Checks
waf-sov-080.tf.any.required-providers-version-pinned
Checks: All required_providers must include version constraints.
| Compliant | Non-Compliant |
|---|---|
|
|
waf-sov-080.tf.any.required-terraform-version
Checks: required_version must be set in the terraform block.
| Compliant | Non-Compliant |
|---|---|
|
|
waf-sov-080.tf.any.module-source-version-pinned
Checks: Terraform modules must reference a pinned version (no ref=main/ref=master).
| Compliant | Non-Compliant |
|---|---|
|
|
waf-sov-080.tf.any.no-untrusted-registry-modules
Checks: Module sources must reference approved registries or internal Git.
# Non-Compliant: Unauthorized public GitHub repository
module "custom" {
source = "github.com/unknown-user/terraform-aws-module.git"
# ⚠️ Unapproved public repository without registry validation
}
# Compliant: Official Terraform Registry
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.5.3"
}
Evidence
| Type | Required | Description |
|---|---|---|
Governance |
✅ Required |
Dependency/subprocessor register (versioned; covering all external services with data flows). |
IaC |
✅ Required |
Terraform |
Process |
Optional |
Quarterly review records of the subprocessor inventory. |
Governance |
Optional |
DPA agreement reference list for all data-processing subprocessors. |