Add Hetzner edge node secrets to Salt GPG pillar #421
No reviewers
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/pal-e-platform!421
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "hetzner-edge-secrets"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
hetzner_api_tokenandedge_ssh_public_keyintosalt/pillar/secrets/platform.slstofu applyof the hetzner-edge module (PR #420)Changes
salt/pillar/secrets/platform.sls— add two GPG-encrypted entries:hetzner_api_token(Hetzner Cloud API token) andedge_ssh_public_key(SSH public key for edge VPS)Test Plan
make tofu-secretsgeneratessecrets.auto.tfvarswith both valuestofu planshows expected resources (server, SSH key, firewall)Review Checklist
Related Notes
ldraney/pal-e-platform #420— Terraform module this enablesPR #421 Review
DOMAIN REVIEW
Tech stack: Salt pillar (GPG-encrypted YAML), Terraform/OpenTofu secrets pipeline.
GPG encryption correctness:
Both encrypted blocks begin with
hQIMA4GgPRz4dNyQAQ/, which encodes recipient key ID81A03D1CF874DC90-- this matches the documented Salt Master GPG key inarch-secrets-pipelineandsop-secrets-management. Correct key used.Pillar structure:
The new entries are properly indented under the
secrets:top-level key, use YAML literal block scalars (|), and include complete-----BEGIN/END PGP MESSAGE-----delimiters. Formatting is consistent with the existing 505 lines of the file.Naming:
hetzner_api_token-- clear, follows existingsnake_caseconvention.edge_ssh_public_key-- clear, descriptive.Both names are appropriate for
TF_SECRET_VARSallowlist consumption.BLOCKERS
1. Missing
secrets_registry.slsmetadata entry (SOP step 4 -- always required)Per
sop-secrets-management, Steps 1-4 are the "canonical backup layer" and are always required regardless of delivery path:The registry tracks origin, rotation schedule, and provider for every secret. This PR adds two new secrets to the pillar but does not update the registry. The SOP is explicit: "Full metadata for every secret (origin, rotation schedule, provider) lives in
salt/pillar/secrets_registry.sls. Check there before creating new secrets."Both
hetzner_api_tokenandedge_ssh_public_keyneed registry entries with at minimum: origin (External - Hetzner console / Generated), rotation_days, and purpose.2. Missing
TF_SECRET_VARSMakefile allowlist updatePer
arch-secrets-pipeline, the rendering pipeline filters secrets through theTF_SECRET_VARSallowlist in the Makefile before writingsecrets.auto.tfvars. If these two keys are not added to the allowlist,make tofu-secretswill NOT render them to tfvars, making the PR body's test plan (make tofu-secretsgenerates both values) impossible to pass without a Makefile change.Unless the Hetzner edge module uses a separate rendering path not documented in the architecture note, this is a missing change.
NITS
Plaintext backup (SOP step 2): The SOP requires storing plaintext in
~/secrets/{service}/{name}.env. Not verifiable from PR diff, but worth confirming this was done before merge.Woodpecker CI sync: Per the SOP section "Keeping Salt and CI in Sync," if the Hetzner edge module will eventually run via CI (Woodpecker
tofu plan/apply), corresponding Woodpecker repo secrets (tf_var_hetzner_api_token,tf_var_edge_ssh_public_key) will need to be created. If this is host-side only (manual apply), this can be deferred, but should be noted.SOP update (step 10): The SOP itself should be updated with these two new secrets in the registry tables once they are finalized.
SOP COMPLIANCE
secrets_registry.slsmetadata entry (SOP step 4) -- MISSINGTF_SECRET_VARSMakefile allowlist -- likely MISSING (needed formake tofu-secretsto render these values)PROCESS OBSERVATIONS
arch-secrets-pipelinesecret inventory (currently 15 entries) will need updating to reflect these two new secrets once the full pipeline is in place. The architecture note should also document the Hetzner edge module as a new consumer alongside the existing k3s Terraform.VERDICT: NOT APPROVED
Two SOP compliance gaps must be addressed:
salt/pillar/secrets_registry.slsfor both secrets.TF_SECRET_VARSMakefile allowlist (or document the alternative rendering path if the Hetzner module uses a different mechanism).The encryption itself is correct and the PR is well-scoped. These are process completeness items, not security or correctness issues.