上一篇提到的 Secret versioning 是 KV Secure Engine 在 Version2 新加入的功能,它提供了完善且類似於 git 的版本控制功能,除此之外,只要針對對應Key加入對應的tag,便能產生如Soft Delete、Version count limitation等實用功能:
vault kv metadata put \ -delete-version-after=30d \ secret/myapp
代表這個 Secret 的每個版本在建立後,經過 30 天會自動進入刪除狀態。
這裡有一個很重要、也很容易誤解的地方,delete_version_after 是自動 Delete,不是自動 Destroy,所以紀錄在 Vault 裡仍然可以 Query 到。
vault kv metadata put \ -max-versions=5 \ secret/myapp
代表只保留有限數量的歷史版本,當版本數超過限制時,最舊版本會被永久移除。
所謂的Recovery 即是 當 Secret 被誤刪或錯誤修改時,利用 KV v2 保留的歷史版本將 Secret 找回。
例如目前有三個版本:
Version 1 → password=123456
Version 2 → password=abcdef
Version 3 → password=qwerty ← Current
如果不小心執行:vault kv delete secret/myapp
Version 3 會被標記為 deleted:
Version 1 → password=123456
Version 2 → password=abcdef
Version 3 → [Deleted]
這時候資料還沒有被永久 Destroy,因此可以執行:vault kv undelete -versions=3 secret/myapp
Version 3 就可以重新被讀取。