ข้ามไปยังเนื้อหา

บทความ

ความปลอดภัย Agentic AI: MCP OAuth, VPN และ HashiCorp Vault Leases

เอกสารอ้างอิงองค์กร: MCP OAuth 2.1 + EMA, การผสาน VPN, Vault dynamic secrets, การหมุนเวียนอัตโนมัติ, การเพิกถอน lease และเมทริกซ์การตั้งค่าผู้ขาย

  • อ่าน 5 นาที
  • AI
  • ความปลอดภัย
  • DevOps

เอกสารสรุปทางเทคนิคของ TenthMatrix ฉบับนี้ครอบคลุมความปลอดภัยและการยืนยันตัวตนของ agentic AI: การปกป้อง enterprise agent ที่เรียกใช้เครื่องมือผ่าน MCP (Model Context Protocol) ด้วย OAuth 2.1 การวาง MCP endpoint ความเสี่ยงสูงไว้หลัง VPN / เครือข่ายส่วนตัว และการจัดการ credential ของเครื่องมือด้วย HashiCorp Vault — dynamic secrets, leases, การหมุนเวียนอัตโนมัติ และการเพิกถอนทันที พร้อมแนะนำการตั้งค่าที่สอดคล้องกับมาตรฐานอุตสาหกรรมสำหรับ Claude, OpenAI และ Cursor

ความปลอดภัย Agentic AI: MCP OAuth, VPN, Vault leases

การนำทาง บล็อกคู่ขนาน: สรุปสั้น หัวข้อที่เกี่ยวข้อง: ระบบ deep learning, Bedrock agents, ทีม multi-agent
Related reading. Edge WAF on the same live-config OpenResty proxy: WSL Proxy WAF blog · explainable edge WAF article · product overview · wslproxy.org/waf · tour youtu.be/r10XSonA5JE.
สรุปสำหรับ agent (อ่านด้วยเครื่องได้)
  • ปัญหา: Agent ที่ใช้คีย์เครื่องมืออายุยาวแบบคงที่ + MCP สาธารณะ = การกระจาย credential และการเคลื่อนที่ด้านข้าง
  • Auth: Remote MCP = OAuth 2.1 resource server + RFC 9728 PRM + RFC 8707 audience; PKCE เป็นข้อบังคับ
  • องค์กร: ควรใช้ MCP Enterprise-Managed Authorization (EMA / ID-JAG) ผ่าน IdP ขององค์กร
  • เครือข่าย: MCP และ Vault ภายในอยู่บน VPN/private link; egress allowlist ตามเครื่องมือ
  • Secrets: Vault dynamic secrets + lease TTL; หมุนเวียน static roles อัตโนมัติ; เพิกถอนเมื่อจบเซสชัน
  • แยกชั้น: LLM provider API keys != MCP access tokens != backend tool secrets

แหล่งข้อมูล: MCP Authorization, Vault leases, Vault AI agent validated pattern, Claude connector auth ตรวจสอบเอกสารผู้ขายปัจจุบันก่อนนำไปใช้งานจริง

1. Threat model สำหรับ enterprise agents

Agent คือ principal ของระบบอัตโนมัติที่มีสิทธิพิเศษ รูปแบบความล้มเหลวทั่วไป:

  • Secret sprawl — API keys ใน MCP JSON, .env ที่ commit ลง git หรือวางในพรอมต์
  • Token substitution — access token ที่ออกสำหรับเซิร์ฟเวอร์ A ถูกเซิร์ฟเวอร์ B ยอมรับ (ขาด audience binding)
  • เครื่องมือที่ขอบเขตกว้างเกิน — MCP เดียวสามารถเขียนฐานข้อมูล prod และเปิด firewall ในเซสชันเดียวกัน
  • OBO ที่ไม่ถูกตรวจสอบ — agent ทำงานโดยไม่เชื่อมโยงการกระทำกับตัวตนของมนุษย์
  • Public MCP — เครื่องมือภายในเข้าถึงได้จากอินเทอร์เน็ตโดยไม่มี VPN หรือ private link

การควบคุมต้องครอบคลุมตัวตน (ใคร), การอนุญาต (เครื่องมือใด), secrets (ด้วย credential อะไร) และเครือข่าย (จากที่ใด)

2. การยืนยันตัวตน MCP: มาตรฐานอุตสาหกรรม

สำหรับ remote MCP แบบ HTTP สเปกสอดคล้องกับ OAuth 2.1:

  • MCP server = OAuth resource server; ไคลเอนต์ส่ง Authorization: Bearer
  • PKCE เป็นข้อบังคับ; ห้ามใช้ implicit grant
  • เซิร์ฟเวอร์ MUST เผยแพร่ Protected Resource Metadata (RFC 9728) เพื่อให้ไคลเอนต์ค้นพบ authorization server
  • ใช้ Resource Indicators (RFC 8707) เพื่อให้โทเค็นผูก audience กับ MCP server นั้น
  • Authorization Server Metadata (RFC 8414) และ/หรือ OIDC discovery สำหรับความสามารถของ AS
  • แนะนำ Dynamic Client Registration (RFC 7591) เมื่อไคลเอนต์ต้อง onboard โดยไม่มี client ID แบบแมนนวล
# Protected Resource Metadata (conceptual)
{
  "resource": "https://mcp.internal.example/mcp",
  "authorization_servers": ["https://auth.example.com"],
  "scopes_supported": ["mcp:tools", "mcp:resources"]
}

STDIO / local MCP แตกต่าง: ควรใช้ environment credentials ที่ฉีดโดย Vault Agent — อย่าบังคับ browser OAuth กับเครื่องมือเดสก์ท็อปทุกตัว Remote/public MCP ควรใช้งาน OAuth 2.1

2.1 Enterprise-Managed Authorization (zero-touch)

ส่วนขยาย MCP Enterprise-Managed Authorization ให้ IdP ขององค์กร (Okta, Entra ID ฯลฯ) มอบสิทธิ์เข้าถึง MCP servers ที่อนุมัติแล้วตอน SSO โดยใช้ ID-JAG (Identity Assertion JWT Authorization Grant) หลีกเลี่ยงความเหนื่อยล้าจากการยินยอมทีละเซิร์ฟเวอร์ นำ EMA มาใช้กับ Claude / IDE / กองเรือ agent ทั้งองค์กร

3. การผสาน VPN และ private MCP

OAuth ยืนยันตัวตนไคลเอนต์; มันไม่ได้แทนที่การแยกเครือข่าย

  • โฮสต์ MCP servers ภายในและ Vault บน private CIDR (VPN, PrivateLink, เมช Tailscale/WireGuard หรือ service mesh mTLS)
  • ผูก MCP listeners กับอินเทอร์เฟซส่วนตัว; บล็อกพอร์ต 443 สาธารณะ เว้นแต่ผลิตภัณฑ์ตั้งใจเปิดสู่สาธารณะ
  • ใช้ egress allowlists จาก agent runtime: เฉพาะ API/MCP hosts ที่อนุมัติ
  • แยกระนาบ: แล็ปท็อปนักพัฒนาบน corp VPN สำหรับ Cursor; agent ฝั่งเซิร์ฟเวอร์ใน VPC โดยไม่มี internet MCP ยกเว้น SaaS ที่อนุมัติ

รูปแบบ: VPN สำหรับการเข้าถึง + OAuth สำหรับการอนุญาต + Vault สำหรับ secrets

รูป A: สถาปัตยกรรม IdP MCP Vault VPN

4. HashiCorp Vault สำหรับ agent secrets

คีย์เครื่องมืออายุยาวแบบคงที่ไม่เข้ากับรัศมีความเสียหายของ agent Vault ให้:

4.1 Dynamic secrets + leases

ทุก dynamic secret คืนค่า lease_id และ TTL ผู้บริโภคต้องต่ออายุ (หากอนุญาต) หรือขอทดแทนก่อนหมดอายุ เมื่อ lease สิ้นสุด Vault สามารถเพิกถอน credential ที่ผู้ให้บริการได้ สิ่งนี้บังคับการเช็คอิน ปรับปรุงบันทึก audit และลดช่วงการเปิดเผย

4.2 การหมุนเวียนอัตโนมัติ

สำหรับ static roles (เช่น รหัสผ่านฐานข้อมูลที่มี rotation_period) Vault หมุนเวียนตามกำหนดเวลา เทมเพลต Vault Agent ดึงใหม่ใกล้สิ้นอายุ (ค่าเริ่มต้น lease_renewal_threshold ~0.9 ของ TTL) และสามารถรีสตาร์ตโพรเซสลูกเมื่อ credential เปลี่ยน

4.3 TTL ที่แนะนำสำหรับ agents

ระดับความเสี่ยง ตัวอย่าง แนวทาง TTL
การเขียนวิกฤตแก้ไขฐานข้อมูล Prod, IAM admin5–15 นาที; เพิกถอนเมื่อจบเครื่องมือ
อ่าน / stagingรีดเรพลิกา, ticket APIs30–60 นาที
คีย์ LLM providerคีย์องค์กร OpenAI / Anthropicจัดการด้วย Vault; หมุนเวียนตามกำหนด; ห้ามใส่ใน MCP JSON

รูป B: วงจรชีวิต Vault lease

4.4 Vault + การระบุผู้ใช้ (validated pattern)

Validated pattern ของ HashiCorp: ผู้ใช้ยืนยันตัวตน; agent ได้รับโทเค็น on-behalf-of (OBO); เครื่องมือยืนยันตัวตนกับ Vault ด้วย JWT; Vault แมป claims เป็นนโยบายและออกdynamic secrets ที่มีขอบเขต เส้นทาง audit เชื่อมโยงการออก secret กับมนุษย์ ไม่ใช่บัญชีหุ่นยนต์ร่วม

Vault Enterprise เพิ่ม Agent Registry และโปรไฟล์ OAuth resource server เพื่อให้ agent ที่ลงทะเบียนแสดง OAuth JWTs โดยไม่ต้องล็อกอิน Vault แยก — พร้อมข้อจำกัดเฉพาะ agent สำหรับการมอบหมาย / 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. การตั้งค่าที่แนะนำตามผู้ขาย

รูป C: รูปแบบ Claude OpenAI Cursor

5.1 Claude (Anthropic)

  • ควรใช้ OAuth สำหรับ remote MCP connectors; คืน 401 พร้อม WWW-Authenticate ที่ชี้ไปยัง PRM เพื่อให้ไคลเอนต์ค้นพบ auth
  • ห้ามใส่โทเค็น/API keys ใน query string ของ URL คอนเนกเตอร์ (ถูกบันทึก แคช และห้ามตามกฎโทเค็น MCP)
  • Claude Code: local OAuth พร้อมที่เก็บโทเค็นที่ปลอดภัยและการรีเฟรช; ปลั๊กอินต้องไม่อ่านโทเค็น
  • Hosted Claude: client credentials ที่ Anthropic จัดการสำหรับผู้ใช้ที่ยินยอม; ยังคงเก็บ secrets ของเครื่องมือใน Vault หลัง MCP ของคุณ
  • องค์กร: จัด IdP ให้สอดคล้องกับ MCP EMA สำหรับการเข้าถึงเซิร์ฟเวอร์แบบ zero-touch

5.2 OpenAI (Agents / tools)

  • แยก model API keys จาก tool credentials; การหมุนเวียนและรัศมีความเสียหายต่างกัน
  • รัน agent runtimes ใน VPC; เรียก private MCP ผ่านเครือข่ายส่วนตัว
  • ส่งโทเค็นที่ระบุผู้ใช้เข้าไปในเครื่องมือ; ยืนยันตัวตนกับ Vault ด้วย JWT; สร้าง dynamic secrets ต่อการเรียกใช้
  • บันทึกทุกการเรียกเครื่องมือพร้อมผู้ใช้ + agent + lease_id เพื่อการปฏิบัติตามข้อกำหนด

5.3 Cursor

  • การตั้งค่า MCP server: อ้างอิงเฉพาะตัวแปรสภาพแวดล้อม — ห้าม hardcode secrets ใน mcp.json
  • STDIO servers: รันภายใต้ Vault Agent (เทมเพลตหรือ env) เพื่อให้ leases หมุนเวียนโดยนักพัฒนาไม่ต้องคัดลอกรหัสผ่าน
  • Remote MCP: OAuth เมื่อเซิร์ฟเวอร์รองรับ; ไม่เช่นนั้นใช้ corp VPN + bearer อายุสั้นจาก Vault
  • นโยบายทีม: allowlist MCP servers ที่อนุมัติ; บล็อก community MCPs ที่ไม่น่าเชื่อถือบนโค้ดเบส prod
  • เก็บไฟล์ .env / secret ออกจากบริบทด้วยกฎ ignore; กฎโปรเจกต์: ห้ามวาง secrets ในแชท

6. เมทริกซ์การควบคุมอ้างอิง

ชั้น การควบคุม รูปแบบที่ควรหลีกเลี่ยง
ตัวตนSSO IdP + EMA / OAuth PKCEรหัสผ่านหุ่นยนต์ร่วม
MCPPRM + โทเค็นผูก audienceโทเค็นใน URL; ไม่มีวันหมดอายุ
เครือข่ายVPN / PrivateLink + egress ACLPublic MCP สำหรับเครื่องมือ prod
SecretsVault lease + หมุนเวียน + เพิกถอนคีย์อายุปีใน mcp.json
OpsAudit IdP+MCP+Vault; ประตูมนุษย์ดีพลอย / ชำระเงิน prod โดยไม่มีเกต

7. รายการตรวจสอบการนำไปใช้

  1. สำรวจ MCP server ทุกตัวและจำแนกสาธารณะกับส่วนตัว
  2. ใช้ OAuth 2.1 + PRM บน remote MCP ทั้งหมด; เปิด EMA กับ IdP ขององค์กร
  3. ย้าย MCP + Vault ไปหลัง VPN/เครือข่ายส่วนตัว; บันทึกวิธีที่ Cursor/Claude เข้าร่วมเครือข่าย
  4. แทนที่คีย์เครื่องมือคงที่ด้วย Vault dynamic secrets; ตั้ง TTL ตามระดับความเสี่ยง
  5. เชื่อม Vault Agent (หรือ SDK renew/revoke) เข้ากับ agent runtimes; เพิกถอน leases เมื่อจบเซสชัน
  6. แยกคีย์ LLM provider; เก็บและหมุนเวียนใน Vault — ห้ามใส่ในพรอมต์หรือการตั้งค่า MCP
  7. เพิ่มเกตอนุมัติโดยมนุษย์สำหรับเงิน การเปลี่ยนตัวตน และการดีพลอย production
  8. ทดสอบ: lease หมดอายุล้มแบบปิดสนิท; โทเค็น audience ผิดถูกปฏิเสธ; เส้นทางสาธารณะถูกบล็อก
กฎการกำหนดเส้นทางของ TenthMatrix ประตูหน้า = MCP OAuth (ใครเรียกเครื่องมือได้) ประตูเครือข่าย = VPN/เมช (จากที่ใด) ประตู secret = Vault leases (ด้วยอะไร) หากประตูใดถูกค้ำเปิดด้วยคีย์คงที่ ให้ถือว่าเป็นเหตุการณ์ที่รอเกิด

เผยแพร่โดย TenthMatrix — ระบบอัตโนมัติองค์กร แพลตฟอร์ม multi-agent และการส่งมอบที่ปลอดภัยบน Kubernetes