Backport of db: honor static role TTL across restarts when skip import rotation i… into release/1.18.x #29540
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport
This PR is auto-generated from #29537 to be assessed for backporting due to the inclusion of the label backport/1.18.x.
The below text is copied from the body of the original PR.
Description
The associated Enterprise PR is here: https://github.com/hashicorp/vault-enterprise/pull/7426
Fix a bug where passwords are rotated across backend restarts when they should not be.
Solution
Use a the field
NextVaultRotation
which is Now + RotationPeriod (or next schedule) to calculate the queue priority in across backend reloads and calculate the TTL on GET /static-cred requests.Background
When skipping auto import rotation is enabled, vault does not rotate the password, leaving role.StaticAccount.LastVaultRotation as a zero value. This is problematic because Vault determines when to rotate a credential using LastVaultRotation + rotationPeriod. If LastVaultRotation is the zero value, adding rotationPeriod causes the credential to be placed at the front of the priority queue, triggering an immediate rotation on unseal.
We currently handle this in memory by setting LastVaultRotation to the current timestamp, ensuring that the credential doesn’t get pushed to the front of the queue. However, this is only done in memory (priority queue) and is not persisted to storage. If the secrets engine gets reinitialized, Vault reloads static roles from storage with LastVaultRotation as the zero value. Vault again adds rotationPeriod, pushing the credential to the front of the queue and immediately rotating it. This unexpected rotation can cause issues for customers who are not expecting their credentials to change.
TODO only if you're a HashiCorp employee
backport/
label that matches the desired release branch. Note that in the CE repo, the latest release branch will look likebackport/x.x.x
, but older release branches will bebackport/ent/x.x.x+ent
.of a public function, even if that change is in a CE file, double check that
applying the patch for this PR to the ENT repo and running tests doesn't
break any tests. Sometimes ENT only tests rely on public functions in CE
files.
in the PR description, commit message, or branch name.
description. Also, make sure the changelog is in this PR, not in your ENT PR.
Overview of commits