Summary
Support an external secrets backend (starting with AWS Secrets Manager) so Connections and Variables can be resolved directly from the backend, instead of only living in the control-plane vault.
Today
Leoflow stores Variables/Connections in the control plane (encrypted at rest by secretKey, ADR 0019/0021), created via the Airflow-compatible UI (Admin → Variables/Connections) or the API (POST /api/v2/connections). There is no configurable external secrets backend — I checked the reference/helm/docs and found none. The concept only appears as a planning note (project/planning/airflow-connector-compatibility.md, "not yet ADR 0036 ... before any code lands").
Gap vs Airflow
Airflow 3.x ships secrets backends (e.g. SecretsManagerBackend, Vault), so a Connection/Variable can be sourced directly from the external store — single source of truth, no duplication, no bootstrap step.
Use case (real)
A platform that provisions all secrets in AWS Secrets Manager via Terraform (values never in git; ESO delivers the chart secrets). Connections like a Databricks serverless warehouse (used by dbt_group) already live in SM. Today that connection has to be re-created in leoflow's vault (manually in the UI, or a bootstrap that reads SM and POSTs to the API). An external SM backend would let leoflow resolve it from SM directly — no duplication, fully declarative/IaC.
Proposal
- An Airflow-compatible secrets backend chain for Connection/Variable resolution, configurable via
leoflow.yaml/Helm (e.g. LEOFLOW_SECRETS_BACKEND + backend_kwargs), starting with AWS Secrets Manager (keyless auth via IRSA/Pod Identity, matching ADR 0035/0056).
- Resolution order: cache → external backend(s) → control-plane vault (parity with Airflow's default chain).
- Feeds ADR 0036.
Benefit
SM as single source of truth; no secret duplication in the vault; IaC-friendly (secret lives only in SM + Terraform state); parity with the Airflow secrets-backend model.
Summary
Support an external secrets backend (starting with AWS Secrets Manager) so Connections and Variables can be resolved directly from the backend, instead of only living in the control-plane vault.
Today
Leoflow stores Variables/Connections in the control plane (encrypted at rest by
secretKey, ADR 0019/0021), created via the Airflow-compatible UI (Admin → Variables/Connections) or the API (POST /api/v2/connections). There is no configurable external secrets backend — I checked the reference/helm/docs and found none. The concept only appears as a planning note (project/planning/airflow-connector-compatibility.md, "not yet ADR 0036 ... before any code lands").Gap vs Airflow
Airflow 3.x ships secrets backends (e.g.
SecretsManagerBackend, Vault), so a Connection/Variable can be sourced directly from the external store — single source of truth, no duplication, no bootstrap step.Use case (real)
A platform that provisions all secrets in AWS Secrets Manager via Terraform (values never in git; ESO delivers the chart secrets). Connections like a Databricks serverless warehouse (used by
dbt_group) already live in SM. Today that connection has to be re-created in leoflow's vault (manually in the UI, or a bootstrap that reads SM andPOSTs to the API). An external SM backend would let leoflow resolve it from SM directly — no duplication, fully declarative/IaC.Proposal
leoflow.yaml/Helm (e.g.LEOFLOW_SECRETS_BACKEND+backend_kwargs), starting with AWS Secrets Manager (keyless auth via IRSA/Pod Identity, matching ADR 0035/0056).Benefit
SM as single source of truth; no secret duplication in the vault; IaC-friendly (secret lives only in SM + Terraform state); parity with the Airflow secrets-backend model.