Skip to content

Credential version history and rollback for the built-in credential store #330

Description

@wankhede04

Problem

Per the credentials doc: "If STRIPE_KEY already exists, it is overwritten." There's no history and no rollback for the built-in credential store — if an operator (or an agent proposing a value back into a credential slot) overwrites a key with a bad value, the previous value is just gone. The only recovery path is remembering it yourself.

This stands out because Infisical's own core platform explicitly ships secret versioning and point-in-time recovery as a headline feature — Agent Vault's built-in store doesn't have an equivalent yet, even though it's conceptually the same "encrypted key/value with mutation history" problem.

(Vaults backed by the Infisical credential store are out of scope here — Infisical is already the source of truth and has its own versioning. This is specifically for the built-in store.)

Proposal

  • Add an append-only credential_versions table: on every set/overwrite of a built-in credential, write the previous encrypted value + timestamp + actor before applying the new one. Same AES-256-GCM-at-rest treatment as live credentials — no change to the encryption model.
  • Bound retention the same way request logs already are (AGENT_VAULT_LOGS_MAX_AGE_HOURS / _MAX_ROWS_PER_VAULT — following that existing pattern rather than inventing a new one), e.g. AGENT_VAULT_CREDENTIAL_HISTORY_MAX_VERSIONS (default something small like 10).
  • New CLI/API surface:
    • agent-vault vault credential history <key> --vault my-vault — list past versions with timestamp + actor (not the value, unless --reveal and sufficient permissions, mirroring credential list --reveal's existing access rule).
    • agent-vault vault credential rollback <key> --version N --vault my-vault — restores a prior version as the current value (itself recorded as a new version, so rollback is never destructive).
  • Delete (credential delete) could optionally also just be a version-preserving soft-delete rather than a hard delete, to match — happy to scope that separately if it adds too much surface to the first PR.

Why this is worth doing

This is a real "oops" risk today with zero mitigation, and it's a natural feature-parity gap with a capability Infisical already knows works well on the main platform — this isn't proposing something novel, just extending an existing, proven pattern down into Agent Vault's simpler built-in store.

Happy to implement — would start with the versions table + history/rollback CLI and API endpoints, gated behind the same permission model as credential get/--reveal (member/admin only, never proxy-role agents).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions