Dit technische Workstation-brief behandelt beveiliging en authenticatie van agentische AI: enterprise-agents beveiligen die tools aanroepen via MCP (Model Context Protocol) met OAuth 2.1, MCP-endpoints met hoog risico achter VPN / privénetwerk plaatsen, en toolcredentials beheren met HashiCorp Vault — dynamische secrets, leases, auto-rotatie en directe revoke. Het beveelt industriegealigneerde setups aan voor Claude, OpenAI en Cursor.
- Probleem: Agents met statische langlevende toolkeys + publieke MCP = credential sprawl en laterale beweging.
- Auth: Remote MCP = OAuth 2.1 resource server + RFC 9728 PRM + RFC 8707 audience; PKCE verplicht.
- Enterprise: Geef de voorkeur aan MCP Enterprise-Managed Authorization (EMA / ID-JAG) via corporate IdP.
- Netwerk: Interne MCP en Vault op VPN/private link; egress-allowlists per tool.
- Secrets: Dynamische Vault-secrets + lease-TTL; auto-rotatie van statische roles; revoke bij sessie-einde.
- Scheiding: LLM-provider API-keys != MCP-access tokens != backend toolsecrets.
Bronnen: MCP Authorization, Vault leases, Vault AI agent validated pattern, Claude connector auth. Controleer actuele vendor-docs vóór productierollout.
1. Threat model voor enterprise-agents
Een agent is een bevoorrechte automatiseringsprincipal. Typische faalmodi:
- Secret sprawl — API-keys in MCP-JSON,
.envgecommit naar git, of geplakt in prompts. - Token substitution — access token voor server A geaccepteerd door server B (ontbrekende audience-binding).
- Te ruim gescoapte tools — één MCP kan prod-DB’s schrijven en firewalls openen met dezelfde sessie.
- Onaudit OBO — agent handelt zonder acties te koppelen aan een menselijke identiteit.
- Publieke MCP — interne tools bereikbaar vanaf internet zonder VPN of private link.
Controls moeten identiteit (wie), autorisatie (welke tools), secrets (met welke credentials) en netwerk (vanaf waar) afdekken.
2. MCP-authenticatie: industriestandaard
Voor HTTP-gebaseerde remote MCP sluit de specificatie aan op OAuth 2.1:
- MCP-server = OAuth resource server; clients sturen
Authorization: Bearer. - PKCE is verplicht; implicit grant is verboden.
- Servers MUST Protected Resource Metadata (RFC 9728) publiceren zodat clients de authorization server ontdekken.
- Gebruik Resource Indicators (RFC 8707) zodat tokens audience-gebonden zijn aan die MCP-server.
- Authorization Server Metadata (RFC 8414) en/of OIDC discovery voor AS-mogelijkheden.
- Dynamic Client Registration (RFC 7591) wordt aanbevolen waar clients moeten onboarden zonder handmatige client-ID’s.
# Protected Resource Metadata (conceptual)
{
"resource": "https://mcp.internal.example/mcp",
"authorization_servers": ["https://auth.example.com"],
"scopes_supported": ["mcp:tools", "mcp:resources"]
}
STDIO / lokale MCP is anders: geef de voorkeur aan omgevingscredentials geïnjecteerd door Vault Agent — forceer geen browser-OAuth op elke desktoptool. Remote/publieke MCP moet OAuth 2.1 implementeren.
2.1 Enterprise-Managed Authorization (zero-touch)
De MCP-extensie Enterprise-Managed Authorization laat de corporate IdP (Okta, Entra ID, enz.) toegang tot goedgekeurde MCP-servers verlenen bij SSO via een ID-JAG (Identity Assertion JWT Authorization Grant), waarmee consent-fatigue per server wordt vermeden. Neem EMA aan voor org-brede Claude- / IDE- / agent-fleets.
3. VPN- en private MCP-integratie
OAuth authenticeert de client; het vervangt geen netwerkisolatie.
- Host interne MCP-servers en Vault op private CIDR (VPN, PrivateLink, Tailscale/WireGuard-mesh of service mesh mTLS).
- Bind MCP-listeners aan privé-interfaces; blokkeer publiek 443 tenzij het product bewust internetgericht is.
- Pas egress-allowlists toe vanuit de agent-runtime: alleen goedgekeurde API’s/MCP-hosts.
- Splits vlakken: developer-laptops op corp VPN voor Cursor; server-side agents in VPC zonder internet-MCP behalve goedgekeurde SaaS.
Patroon: VPN voor bereikbaarheid + OAuth voor autorisatie + Vault voor secrets.
4. HashiCorp Vault voor agent-secrets
Statische langlevende toolkeys zijn onverenigbaar met de blast radius van agents. Vault biedt:
4.1 Dynamische secrets + leases
Elke dynamische secret retourneert een lease_id en TTL. De consument moet vernieuwen (indien toegestaan) of vóór expiry een vervanging aanvragen. Wanneer de lease eindigt, kan Vault de credential bij de provider intrekken. Dit forceert check-in, verbetert auditlogs en verkleint exposure-vensters.
4.2 Auto-rotatie
Voor statische roles (bijv. databasewachtwoord met rotation_period) roteert Vault volgens een schema. Vault Agent-templates herhalen fetch nabij end of life (standaard lease_renewal_threshold ~0,9 van TTL) en kunnen een child process herstarten wanneer credentials wijzigen.
4.3 Aanbevolen TTL’s voor agents
| Risicoklasse | Voorbeeld | TTL-richtlijn |
|---|---|---|
| Kritische write | Prod-DB muteren, IAM-admin | 5-15 minuten; revoke bij tool-einde |
| Read / staging | Read-replicas, ticket-API’s | 30-60 minuten |
| LLM-providerkey | OpenAI- / Anthropic-orgkey | Vault-beheerd; roteer volgens schema; nooit in MCP-JSON |
4.4 Vault + gebruikersattributie (validated pattern)
HashiCorp’s validated pattern: gebruiker authenticeert; agent ontvangt een on-behalf-of (OBO)-token; tools authenticeren bij Vault met JWT; Vault mapt claims naar policies en geeft gescoapte dynamische secrets uit. Audittrails koppelen secret-uitgifte aan de mens, niet aan een gedeeld robotaccount.
Vault Enterprise voegt Agent Registry en OAuth resource server-profielen toe zodat enrolled agents OAuth-JWT’s presenteren zonder aparte Vault-loginstap — met agent-specifieke constraints voor delegatie / OBO.
# Conceptual agent tool hook (do not ship secrets to the model)
vault_token = login_jwt(obo_token) # Vault auth
secret = vault.read("database/creds/agent-ro")
lease_id, ttl = secret["lease_id"], secret["lease_duration"]
try:
run_tool(db_url=secret["data"]) # use within TTL
finally:
vault.lease.revoke(lease_id) # or let TTL expire
5. Aanbevolen setups per vendor
5.1 Claude (Anthropic)
- Geef de voorkeur aan OAuth voor remote MCP-connectors; retourneer 401 met
WWW-Authenticatedie naar PRM wijst zodat clients auth kunnen ontdekken. - Zet nooit tokens/API-keys in connector-URL-querystrings (gelogd, gecached, verboden door MCP-tokenregels).
- Claude Code: lokale OAuth met veilige tokenstore en refresh; plugins mogen geen tokens lezen.
- Hosted Claude: door Anthropic beheerde clientcredentials voor toestemmende gebruikers; houd tool-secrets toch in Vault achter uw MCP.
- Enterprise: stem IdP af op MCP EMA voor zero-touch servertoegang.
5.2 OpenAI (Agents / tools)
- Scheid model-API-keys van toolcredentials; andere rotatie en blast radius.
- Draai agent-runtimes in VPC; roep private MCP aan over privénetwerk.
- Geef user-geattribueerde tokens door aan tools; authenticatieer bij Vault met JWT; mint dynamische secrets per invocatie.
- Log elke toolaanroep met user + agent + lease_id voor compliance.
5.3 Cursor
- MCP-serverconfig: verwijs alleen naar omgevingsvariabelen — hardcode nooit secrets in
mcp.json. - STDIO-servers: draai onder Vault Agent (template of env) zodat leases roteren zonder dat developers wachtwoorden kopiëren.
- Remote MCP: OAuth wanneer de server het ondersteunt; anders corp VPN + kortlevende bearer uit Vault.
- Teambeleid: allowlist goedgekeurde MCP-servers; blokkeer onbetrouwbare community-MCP’s op prod-codebases.
- Houd
.env/ secretbestanden buiten context via ignore-regels; projectregels: verbied secrets in chat te plakken.
6. Referentie-controlmatrix
| Laag | Control | Anti-patroon |
|---|---|---|
| Identiteit | SSO IdP + EMA / OAuth PKCE | Gedeeld robotwachtwoord |
| MCP | PRM + audience-gebonden tokens | Tokens in URL; geen expiry |
| Netwerk | VPN / PrivateLink + egress-ACL | Publieke MCP voor prod-tools |
| Secrets | Vault-lease + rotatie + revoke | Jaarlange keys in mcp.json |
| Ops | Audit IdP+MCP+Vault; menselijke gates | Ongatede prod-deploys / betalingen |
7. Implementatiechecklist
- Inventariseer elke MCP-server en classificeer publiek vs privé.
- Implementeer OAuth 2.1 + PRM op alle remote MCP; schakel EMA in met corporate IdP.
- Plaats MCP + Vault achter VPN/privénetwerk; documenteer hoe Cursor/Claude het netwerk joinen.
- Vervang statische toolkeys door dynamische Vault-secrets; stel TTL’s in per risicoklasse.
- Koppel Vault Agent (of SDK renew/revoke) aan agent-runtimes; revoke leases bij sessie-einde.
- Scheid LLM-providerkeys; bewaar en roteer ze in Vault — nooit in prompts of MCP-config.
- Voeg menselijke goedkeuringsgates toe voor geld, identiteitswijzigingen en productie-deploys.
- Test: verlopen lease faalt fail-closed; token met verkeerde audience geweigerd; publiek pad geblokkeerd.
Gepubliceerd door Workstation — enterprise-automatisering, multi-agentplatforms en veilige delivery op Kubernetes.