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
  • Loading branch information
windmgc authored Sep 5, 2024
1 parent e4c0e85 commit 3455151
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

1 comment on commit 3455151

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bazel Build

Docker image available kong/kong:34551516b47d2d84b90587b570e018f47f54f788
Artifacts available https://github.com/Kong/kong/actions/runs/10712987442

Please sign in to comment.