R: close exposed-credential remediation (operator machine) #119

Open
opened 2026-10-13 14:25:43 -04:00 by jfraeys · 1 comment
Owner

Status 2026-10-13: no row closed yet; all remaining items need the operator machine. New today: the Vaultwarden/Authelia rotation (PR #125) means any copy of the old values in shell history or transcripts is now stale once deployed, but the exposed-credential rows below still apply.

Track R is separate from the migration; open rows are in docs/secrets-remediation.md.

  • Empty the macOS Trash (old .env / .env.bak copies sit there). Treat any credential never rotated since the cutover as exposed to that disk.
  • Search ~/.zsh_history and Claude Code session transcripts for token prefixes; rotate any hit. Key names only in output; never cat/grep values into the terminal.
  • Delete secrets/backup/ (pre-cutover Ansible Vault ciphertext) at Ansible Vault retirement; deleting the vault password first makes those files unreadable, so decide before retiring.
  • coaching_site_git_deploy_key in inventory/host_vars/staging-web.yml (committed at 42033c6): confirm you do not remember it as a real deploy key (it fails ssh-keygen); keep the gitleaks baseline entry.
  • .env.example finding at 131451e: confirmed false positive; keep the baseline entry.
  • Consider whether to rotate OBJECT_STORAGE_* again: Terraform state and restic still share one key (the CI replica is separate).
  • When all rows are closed, set the R row in the gate table to Met.
**Status 2026-10-13: no row closed yet; all remaining items need the operator machine.** New today: the Vaultwarden/Authelia rotation (PR #125) means any copy of the old values in shell history or transcripts is now stale once deployed, but the exposed-credential rows below still apply. Track R is separate from the migration; open rows are in `docs/secrets-remediation.md`. - [ ] Empty the macOS Trash (old `.env` / `.env.bak` copies sit there). Treat any credential never rotated since the cutover as exposed to that disk. - [ ] Search `~/.zsh_history` and Claude Code session transcripts for token prefixes; rotate any hit. Key names only in output; never cat/grep values into the terminal. - [ ] Delete `secrets/backup/` (pre-cutover Ansible Vault ciphertext) at Ansible Vault retirement; deleting the vault password first makes those files unreadable, so decide before retiring. - [ ] `coaching_site_git_deploy_key` in `inventory/host_vars/staging-web.yml` (committed at `42033c6`): confirm you do not remember it as a real deploy key (it fails `ssh-keygen`); keep the gitleaks baseline entry. - [ ] `.env.example` finding at `131451e`: confirmed false positive; keep the baseline entry. - [ ] Consider whether to rotate `OBJECT_STORAGE_*` again: Terraform state and restic still share one key (the CI replica is separate). - [ ] When all rows are closed, set the R row in the gate table to Met.
Author
Owner

R update 2026-10-14: unchanged: no row closed. The shell-history/transcript search was not run (auto mode refused decrypting the vault to compare current values against ~/.zsh_history and the Claude Code transcripts, even with a names-and-counts-only script); it needs you to run it or to allow a script that does it. Still open: empty the macOS Trash, decide on secrets/backup/ (delete the password first makes the files unreadable), coaching_site_git_deploy_key confirmation, whether to rotate OBJECT_STORAGE_* again. New: the recovery key's offline copy for forge-agent is in ~/Documents/recovery_codes (the Mac's own disk); move it to real offline media.

**R update 2026-10-14:** unchanged: no row closed. The shell-history/transcript search was not run (auto mode refused decrypting the vault to compare current values against `~/.zsh_history` and the Claude Code transcripts, even with a names-and-counts-only script); it needs you to run it or to allow a script that does it. Still open: empty the macOS Trash, decide on `secrets/backup/` (delete the password first makes the files unreadable), `coaching_site_git_deploy_key` confirmation, whether to rotate `OBJECT_STORAGE_*` again. New: the recovery key's offline copy for forge-agent is in `~/Documents/recovery_codes` (the Mac's own disk); move it to real offline media.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jfraeys/infra#119
No description provided.