Originally created by: kumaakh
Today a credential stored via credential_store_set can be used for all fleet members equally. While the user may want to keep some security boudaries, e.g a rogue machine may log all wrong password attempts as a means to steal passwords.
Add member-scoped credentials: at credential_store_set time, the caller specifies which members are allowed to resolve the credential. The fleet MCP server enforces this at resolution time and rejects any {{secure.NAME}} substitution from a member outside the allowed set.
```
credential_store_set name=github_pat members=fleet-dev # single member
credential_store_set name=shared_key members=fleet-dev,fleet-rev # N members
credential_store_set name=pub_token members=* # all (current default)
```
When {{secure.NAME}} is resolved in any tool (execute_command, register_member, etc.):
"Credential 'github_pat' is not accessible to member 'fleet-rev'. Allowed: fleet-dev"Default when members is omitted: * (all members) — same as current behaviour.
credential_store_list should show the allowed members for each credentialcredential_store_set on an existing credential name replaces the scope too
Originally posted by: kumaakh
Technical direction:
The member identity must come from the fleet server's request context — not from anything the LLM passes in the prompt — to prevent spoofing. The * default preserves full backward compatibility.
Originally posted by: kumaakh
Addressed in PR [#183] (sprint/session-lifecycle-oob-fix → main).
Changes shipped: Credential scoping — secrets can be restricted to specific members via comma-separated names or wildcard.
PR is open for testing — will be merged once testing is complete.
Related
Tickets:
#183Ticket changed by: kumaakh