SSM zones: three KMS keys (ssm-public/private/admin) + kapwing IAM principal #233
Labels
No labels
burndown-2026-06
coherence-core
consult
headless
interactive
P0
P1
P2
P3
P4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
coilyco-flight-deck/infrastructure#233
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Sibling of coilyco-bridge/agentic-os-kai#403 (SSM zone migration). KMS half of the work.
Goal
Back the three SSM sensitivity zones with three distinct KMS keys, so the public/private boundary is a real cryptographic wall (not an SSM-IAM speed bump). The zone lives in the parameter path's 3rd segment —
/coilysiren/<repo>/<zone>/<tail>,zone ∈ {public, private, admin}— and selects--key-idat write time.Why keys, not tags: KMS key policies cannot read SSM resource tags.
get-parameter --with-decryptionmakes SSM callkms:Decrypton the caller's behalf; KMS authorizes on the caller + key ARN, never the param's tags. So avisibility=privatetag is invisible to KMS — if public and private params share one key, nothing crypto-level stops a work laptop from decrypting a private secret. One key per zone is the only design where the wall is real. This is already the doctrine interraform/admin-kms/README.md("the KMS key policy is the only resource-layer gate available").Deliverable (extend
terraform/admin-kms/)Three keys + aliases:
publicalias/ssm-publicprivatealias/ssm-privateadminalias/ssm-adminalias/ssm-admin= today'salias/admin-onlykey. Add the new alias pointing at the existing key (keepalias/admin-onlytoo until consumers —terraform/tailscale/admin OAuth — are repointed, or keep both permanently).admin-kms/main.tf(groups can't be KMS principals directly).kms:Encrypt+Decrypt+GenerateDataKey+DescribeKeyonssm-publiconly, plusssm:GetParameter+PutParameteronparameter/coilysiren/*/public/*. Explicitly no grant onssm-private/ssm-admin. Personal principal gets public + private; admins group adds admin.Out of scope (other siblings)
check-ssm-zonevalidator (path conformance + key↔zone drift) → sibling incoilyco-flight-deck/agentic-os.put-parameter --overwrite --key-id …) → migration step, gated on the audit YAML landing.Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag:
burndown-2026-06.