feat(mcp): reference fragments + vault key naming schema + guard fixtures
README: add vault key naming schema (<server-name>-<verwendungszweck>,
kebab-case) and a key-exception example to the mcp/ guard rules.
Reference fragments in mcp/: zugferd-service.yaml (OAuth standard case,
no credential field) and az-zoll-service.yaml (documented key exception
using ${VAULT:az-zoll-service-api-key} placeholder) — neither contains
any secret.
Five invalid mcp fixtures under tests/fixtures/mcp/invalid/ covering all
README-documented failure modes: inline secret, missing server-name
fragment structure, missing url, missing type, wrong placeholder syntax.
Closes az-agent-defaults-95y
This commit is contained in:
@@ -182,6 +182,10 @@ Layer, nicht auf die nutzerbeschreibbare Ebene.
|
||||
`` ${VAULT:<key-name>} ``; der echte Key liegt im Vault des Fleet-Repos und
|
||||
wird erst beim Merge auf dem Controller substituiert. Im Repo bleibt nie ein
|
||||
Secret.
|
||||
- **Vault-Key-Namensschema:** `<server-name>-<verwendungszweck>` in
|
||||
kebab-case — z. B. `${VAULT:az-zoll-service-api-key}` für den API-Key
|
||||
des Servers `az-zoll-service`. Ein Key pro Credential, im Vault der IT
|
||||
eindeutig zuordenbar.
|
||||
|
||||
**Minimalbeispiel (OAuth-Standardfall):**
|
||||
|
||||
@@ -193,6 +197,18 @@ zugferd-service:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
**Beispiel (dokumentierte Key-Ausnahme):**
|
||||
|
||||
```yaml
|
||||
# mcp/az-zoll-service.yaml — kein OAuth verfügbar: statischer Key aus dem Vault
|
||||
az-zoll-service:
|
||||
type: remote
|
||||
url: https://mcp.example.az.local/zoll
|
||||
headers:
|
||||
Authorization: Bearer ${VAULT:az-zoll-service-api-key}
|
||||
enabled: true
|
||||
```
|
||||
|
||||
**Typische Fehler:** Server-Name fehlt (Datei ist keine Fragment-Struktur),
|
||||
fehlende `url`, `type` fehlt bei remote, ein Secret im Klartext (Guard bricht
|
||||
ab — auch in Kommentaren), Platzhalter in anderer Syntax als `${VAULT:…}`.
|
||||
|
||||
Reference in New Issue
Block a user