Skip to content

Refuse nested secret ids looked up with no team in multi-team mode - #73789

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:secrets-backend-global-scope-guard
Oct 4, 2026
Merged

potiuk merged 1 commit into
apache:mainfrom
potiuk:secrets-backend-global-scope-guard

Conversation

@potiuk

@potiuk potiuk commented Sep 27, 2026

Copy link
Copy Markdown
Member

In multi-team mode with team-scoped paths, the Vault and Akeyless secrets backends build a team's secret names under the same base path that a lookup with no team resolves in. A connection or variable id containing the path separator, looked up with no team, could therefore name a team's secret: team1/db_password resolved {base_path}/team1/db_password.

Such ids are now refused for a caller with no team, the same way both backends already refuse them for a caller with a team:

  • Vault — refused when the id's path part (below the mount point) contains /, in multi-team mode with use_team_secrets_path enabled.
  • Akeyless — refused under the same conditions unless global_secrets_path is set, which gives secrets used outside any team a namespace of their own; nested ids keep working there.

The Amazon, Azure and Yandex backends already refuse ids containing their team separator for every caller, so they need no change. Outside multi-team mode, or with use_team_secrets_path=False, nothing changes. Both provider changelogs carry a note, since nested ids looked up with no team stop resolving in the affected configuration.

🤖 Generated with Claude Code

@hussein-awala hussein-awala left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Looks good, LGTM!

In multi-team mode with team-scoped paths, the Vault and Akeyless
secrets backends build a team's secret names under the same base path
that a lookup with no team resolves in. A connection or variable id
containing the path separator, looked up with no team, could therefore
name a team's secret: ``team1/db_password`` resolved
``{base_path}/team1/db_password``.

Refuse such ids for a caller with no team, the same way both backends
already refuse them for a caller with a team. Akeyless keeps resolving
them when ``global_secrets_path`` gives secrets used outside any team a
namespace of their own. The Amazon, Azure and Yandex backends already
refuse ids containing their team separator for every caller.

Generated-by: Claude Opus 5
@potiuk
potiuk force-pushed the secrets-backend-global-scope-guard branch from be47a72 to 00f8790 Compare October 4, 2026 22:10
@potiuk
potiuk merged commit 2a274ab into apache:main Oct 4, 2026
79 of 80 checks passed
@potiuk
potiuk deleted the secrets-backend-global-scope-guard branch October 4, 2026 23:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants