Moving to a Declarative Platform Workflow #
This is a simplified, representative pattern. Details have been generalised and do not reproduce a client’s internal architecture, commercial arrangements, or implementation.
An anonymised case study in reducing platform cost without giving up secure self-service, auditability, or isolation between teams and environments.
The Problem #
An organisation used separate commercial platforms for infrastructure state and secrets. They provided useful capabilities, but the cost and operating model were no longer a good match for how the platforms were being used.
The replacement still needed to preserve:
- secure, self-service infrastructure delivery;
- strict identity boundaries around Terraform state and secrets;
- repeatable workflows across multiple cloud environments;
- auditable access and changes; and
- a migration path that teams could adopt without each designing its own solution.
Architecture: Before and After #
The important change was moving platform configuration from separately administered web tooling into a reviewed, version-controlled definition. The diagrams show the general design shift rather than the original environment.
Before #
flowchart LR
ADMIN(["π± Web administration
Configuration split across portals"])
GH(["β Git repository
Infrastructure source"])
GHA(["β CI/CD workflow
Plan and apply"])
TFC(["β Managed state platform
Workspaces and remote state"])
HV(["π Managed secrets platform
Secrets and identities"])
CLOUD(["β Cloud environments
Provisioned resources"])
ADMIN -->|Manual setup| TFC
ADMIN -->|Manual setup| HV
GH ==>|Push / pull request| GHA
TFC <-.->|Terraform state| GHA
HV -.->|Credentials| GHA
GHA ==>|Provision| CLOUD
classDef core fill:#e0f2fe,stroke:#0284c7,color:#0f172a,stroke-width:1.5px;
classDef service fill:#ecfdf5,stroke:#059669,color:#0f172a,stroke-width:1.5px;
class GH,GHA,CLOUD core;
class ADMIN,TFC,HV service;
State and secret-management objects were administered separately, creating multiple configuration surfaces for teams to maintain.
After #
flowchart TB
GH(["β Git repository
Infrastructure source"])
YAML(["β€ YAML platform definition
Environments, state, secrets and identities"])
GHA(["β Reusable CI/CD
Platform workflows"])
subgraph PLATFORM["Declaratively managed platform services"]
direction LR
ID(["β Workload identities
Federation and RBAC"])
SA(["β£ Object storage
Isolated Terraform state"])
KV(["π Managed secrets store
Secrets and access"])
end
CLOUD(["β Cloud environments
Provisioned resources"])
GH ==>|Push / pull request| GHA
YAML ==>|Desired platform configuration| GHA
GHA -->|Create / reconcile| ID
GHA -->|Create / reconcile| SA
GHA -->|Create / reconcile| KV
ID -.->|Federated identity| GHA
SA <-.->|Read / write state| GHA
KV -.->|Credentials| GHA
GHA ==>|Plan, apply and provision| CLOUD
classDef core fill:#e0f2fe,stroke:#0284c7,color:#0f172a,stroke-width:1.5px;
classDef service fill:#ecfdf5,stroke:#059669,color:#0f172a,stroke-width:1.5px;
class GH,YAML,GHA,CLOUD core;
class ID,SA,KV service;
The YAML definition became the source of truth for platform configuration. A reviewed change could create or update the required identity boundaries, state locations, secret access, and target-cloud resources through the same reusable workflow.
The Approach #
The replacement was a cloud-native, configuration-driven platform built around:
- version-controlled YAML definitions for environments, state, secrets, identities, and access boundaries;
- reusable CI/CD workflows for delivery and cloud authentication;
- cloud object storage for Terraform state;
- a managed secrets service for secrets; and
- workload identity and least-privilege access to isolate state and secrets.
Security and Platform Design #
Access to state and secrets was scoped to the appropriate workload, environment, and automation identity, supporting defence in depth while keeping routine use straightforward for developers.
Outcome #
The migration:
- significantly reduced recurring licensing costs;
- retained secure, auditable infrastructure and secrets workflows;
- provided application teams with reusable self-service automation; and
- established identity-based isolation for Terraform state across multi-cloud environments.