Skip to content

Commit

Permalink
fix(vault): let vault entity cache key not containing workspace id (#…
Browse files Browse the repository at this point in the history
…13610)

This PR modifies the `cache_key` function of the vault entity to always generate a cache key without workspace id.

Vault entity is workspace-able, but our secret rotation timer always run without workspace settings(thus the default workspace is being used), so during secret rotation, the code https://github.com/Kong/kong/blob/4e38b965b922f57febe8652fb96b7d74aeab591a/kong/pdk/vault.lua#L620-L621 will generate a duplicate vault cache with default workspace id for each non-default workspace vault entity, and those cache will never be refreshed. The result of this issue is that when you update a vault entity's configuration inside a non-default workspace, it will never take effect in the secret rotation.

Since the prefix of vault entity is unique across workspaces, it should be safe to only use one cache key without workspace id, so that the correct cache is used during secret rotation.

FTI-6152

(cherry picked from commit 3455151)
  • Loading branch information
windmgc authored and ms2008 committed Sep 14, 2024
1 parent c983384 commit 0c78b36
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 0 deletions.
4 changes: 4 additions & 0 deletions changelog/unreleased/kong/fix-vault-cache-workspace-id.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
message: |
**Vault**: Fixed an issue where updating a vault entity in a non-default workspace will not take effect.
type: bugfix
scope: Core
10 changes: 10 additions & 0 deletions kong/db/dao/vaults.lua
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,14 @@ function Vaults:load_vault_schemas(vault_set)
end


function Vaults:cache_key(prefix)
if type(prefix) == "table" then
prefix = prefix.prefix
end

-- Always return the cache_key without a workspace because prefix is unique across workspaces
return "vaults:" .. prefix .. ":::::"
end


return Vaults
5 changes: 5 additions & 0 deletions spec/02-integration/13-vaults/01-vault_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -175,5 +175,10 @@ for _, strategy in helpers.each_strategy() do
assert.is_equal("{vault://unknown/missing-key}", certificate.key_alt)
assert.is_nil(certificate["$refs"])
end)

it("generate correct cache key", function ()
local cache_key = db.vaults:cache_key("test")
assert.equal("vaults:test:::::", cache_key)
end)
end)
end

0 comments on commit 0c78b36

Please sign in to comment.