Bezpieczne agenty AI dla przedsiębiorstw w MCP Toolbox: zestawy narzędzi oparte na intencjach, autoryzacja i logi
Zasady projektowania agentów MCP do produkcji w GCS, PostgreSQL i BigQuery: zestawy narzędzi oparte na intencjach, powiązywanie parametrów URL, zakresy OIDC oraz strukturyzowana obserwowalność.
Źródła: **Architecting Secure Enterprise AI Agents with MCP Toolbox**
Przeniesienie agenta AI z uporządkowanego lokalnego prototypu do chaotycznego środowiska produkcyjnego przedsiębiorstwa jest trudne. Poproszenie LLM o odpowiedź na proste pytania w ramach ustrukturyzowanych tabel jest prostą sprawą, ale poproszenie go o samodzielne zbadanie incydentu bezpieczeństwa wśród terabajtów fragmentarycznych danych, bez tworzenia błędnych informacji czy uszkodzenia czegokolwiek, to zupełnie inny problem.
Model Context Protocol stał się otwartym standardem do łączenia modeli z narzędziami i źródłami danych przedsiębiorstw. Sam protokół jest prosty, jednak jego skuteczne wykorzystanie w produkcji wymaga dyscypliny architektonicznej, która wykracza daleko poza zwykłe udostępnianie kilku surowych API. Poniżej przykładowy scenariusz ilustruje praktyczne lekcje wynikające z tworzenia agentów pracujących z danymi przedsiębiorstw za pomocą MCP Toolbox.
Scenariusz agenta
Współczesne agenty rzadko rozwiązują złożone problemy przedsiębiorstwa przy użyciu jednej tylko funkcji narzędzia. Rzeczywiste operacje wymagają wieloetapowych procesów: pobierania metadanych, weryfikacji stanu, izolowania anomalii, pozyskiwania surowych dowodów oraz syntetyzacji działań. W tym scenariuszu PostgreSQL i BigQuery pełnią rolę ustrukturyzowanych indeksów, które kierują agenta do odpowiednich nieustrukturyzowanych danych w Google Cloud Storage.
- Weryfikacja stanu w PostgreSQL. Agent najpierw wysyła zapytanie do bazy danych, aby sprawdzić metadane przypadku klienta, poziomy usług oraz identyfikatory aktywnych incydentów.
- Analiza telemetryczna w BigQuery. Celowe zapytania analityczne pozwalają wyizolować nietypowo wysokie natężenia ruchu oraz pobrać odpowiednie ścieżki plików lub daty zapisu sesji.
- Szeroki kontekst diagnostyczny w GCS. Posiadając dokładne daty zapisu i klucze obiektów, agent korzysta z narzędzi GCS w celu pobrania pełnych zapisów pakietów oraz nieredagowanych dokumentów dotyczących zagrożeń do dalszej analizy.
Trzy zasady projektowania utrzymują całość w spójności.
1. Tworzenie zestawów narzędzi projektowych wokół intencji
Oferowanie modelowi ogólnych narzędzi takich jak execute_sql, read_file lub describe_schema rzadko przynosi dobry agent. Narzędzia niskiego poziomu zmuszają LLM do wydawania tokenów na domyślanie się struktury przechowywania, kluczy obiektów i schematów, zanim w ogóle rozpocznie się prawdziwy problem. Wiele aplikacji AI zawodzi nie dlatego, że model jest słaby, ale dlatego, że agent nie miał odpowiedniego kontekstu w momencie jego potrzeby. Pomagają trzy praktyki:
- Nadawaj priorytet intencji nad mechaniką. Zamiast surowych elementów przechowywania, udostępniaj specjalnie stworzone narzędzia w rodzaju
fetch_threat_intel_reportlubget_incident_summary.
incident-triage, sprawiają, że wybór narzędzi jest deterministyczny i powtarzalny, a niewielka grupa dobrze zaprojektowanych narzędzi biznesowych zawsze przewyższa rozległą kolekcję narzędzi ogólnych.tools.yaml, który definiuje taki zestaw narzędzi w GCS i bazach danych, wygląda następująco:
# tools.yaml - Intent-Driven GCS & DB Toolset Definition
sources:
my-agent-gcs-source:
kind: cloud-storage
my-agent-pg-source:
kind: cloud-sql-postgres
project: my-agent-sec-prod
instance: customer-db
toolsets:
incident-triage:
- get_incident_summary
- fetch_threat_intel_report
tools:
- kind: tool
name: fetch_threat_intel_report
type: cloud-storage-read-object
source: my-agent-gcs-source
description: "Fetch and extract parsed indicators of compromise (IoCs) from a GCS-hosted threat intelligence dossier."
bucket: customer-diagnostics-vault # Hardcoding prevents cross-bucket traversal attacks
- kind: tool
name: get_incident_summary
type: postgres-sql
source: my-agent-pg-source
description: "Retrieve active incident metadata and active session IDs."
statement: |
SELECT incident_id, severity, session_id FROM incidents WHERE status = 'ACTIVE'
# BigQuery sources and tools have been omitted to maintain the example's clarity and brevity
2. Zabezpiecz perymetr za pomocą kontekstu zero-trust
Dostęp do pojemników produkcyjnych oraz baz danych przedsiębiorstw wiąże się z poważnymi obowiązkami bezpieczeństwa. Agenty przetwarzają dane niestrukturyzowane, takie jak komentarze do zgłoszeń czy opisy alertów, dlatego są naturalnie narażone na ataki typu prompt injection. Atak typu confused-deputy może polegać na zignorowaniu wcześniejszych instrukcji i otwarciu zamiast nich magazynu diagnostycznego Klienta B. Dwie wbudowane funkcje MCP Toolbox pomagają utrzymać ścisłe granice bezpieczeństwa.
Wiązanie parametrów URL
Aby zapobiec temu, by model językowy AI został przekonany do zmiany wrażliwych parametrów, deweloperzy mogą umieścić parametry aplikacji w adresie URL połączenia z serwerem. Narzędzie to wykrywa te parametry zapytania, wiąże je na warstwie transportu i usuwa je ze schematu narzędzia, który otrzymuje model. Model językowy AI nigdy nie widzi parametrów takich jak bucket czy project, więc żadna podmieniona instrukcja nie może nic zmienić:
import asyncio
from toolbox_core import ToolboxClient, Protocol
async def run_incident_triage():
# Sensitive GCS bucket and GCP project parameters are bound at connection time.
# The LLM never sees or modifies 'project' or 'bucket' arguments.
async with ToolboxClient(
"https://mcp.internal.demo.net/mcp?project=my-agent-sec-prod&bucket=customer-diagnostics-vault",
protocol=Protocol.MCP_v20260728 # Stateless MCP transport
) as toolbox:
# The Client SDK automatically forwards bound parameters across toolsets
incident_tools = await toolbox.load_toolset("incident-triage")
# The agent invokes the tool with only the necessary business argument
threat_tool = await toolbox.load_tool("fetch_threat_intel_report")
result = await threat_tool(report_id="INC-89211")
print("Triage analysis complete:", result)
if __name__ == "__main__":
asyncio.run(run_incident_triage())
Dokładna autorizacja narzędzi
Konto usługi współdzielonej z szerokimi uprawnieniami to niewłaściwe rozwiązanie. Zamiast tego Toolbox może integrować się z dostawcą tożsamości przedsiębiorstwa za pośrednictwem OAuth2 lub OIDC, dzięki czemu agent działa pod dokładnie tymi danymi tożsamościowymi, które posiada analityk, który rozpoczął proces pracy:
# auth.yaml - MCP Server Auth & Scoped Tools
kind: authServices
name: my-agent-okta-auth
type: generic
audience: my-agent-mcp-toolbox
authorizationServer: https://identity.demo.com/oauth2/default
mcpEnabled: true
scopesRequired:
- openid
- profile
---
kind: tool
name: fetch_threat_intel_report
type: cloud-storage-read-object
source: my-agent-gcs-source
description: "Fetch parsed indicators of compromise from GCS"
# Enforce fine-grained tool-level scopes
authRequired:
- my-agent-okta-auth
scopesRequired:
- read:gcs_threat_intel
- tier:enterprise_support
Jeśli operator bez uprawnień read:gcs_threat_intel uruchomi agenta, Toolbox odpowie błędem HTTP 403 Forbidden jeszcze przed pobraniem jakiegokolwiek obiektu przechowywanego.
3. Obserowalność od pierwszego dnia
Debiugowanie autonomicznego agenta różni się od debiugowania aplikacji deterministycznej, ponieważ wymaga możliwości zobaczenia całego łańcucha rozumowania modelu oraz jego interakcji z narzędziami. Serwery MCP powinny być traktowane jako infrastruktura produkcyjna pierwszej klasy, a nie jako tymczasowe skrypty pomocnicze. Wykorzystanie w Toolbox strukturyzowanego logowania oraz metryk wykonywania umożliwia zespołowi inżynieryjnemu monitorowanie częstotliwości wywołań, opóźnień, rozmiarów danych przekazywanych oraz wzorców błędów w czasie:
# Configure MCP Toolbox for structured logging
./toolbox --config "tools.yaml" --log-level info --logging-format json
# Configure MCP Toolbox to export traces and metrics
./toolbox --telemetry-gcp
Każde wywołanie może również wytwarzać ustrukturyzowany zapis wykonania:
# Structured execution log emitted by the MCP Server runtime
logger.info(
"Tool invoked",
extra={
"tool": "fetch_threat_intel_report",
"storage_source": "gcs://customer-diagnostics-vault",
"report_id": "INC-89211",
"bytes_streamed": 1048576,
"latency_ms": 142.5,
"request_id": "req-01HX89Z2A",
"user_email": "analyst@demo.com"
}
)
Wysyłanie tych strukturyzowanych danych do Cloud Logging oraz śledzenie ich w ramach wieloetapowego procesu szybko pokazuje, czy nagły wzrost opóźnienia wynika z bardzo dużego obiektu w GCS, zapytania w BigQuery bez indeksu, czy też z powolnej pracy samego modelu.
Wniosek
Agent jest tak skuteczny, jak tylko pozwala na to bezstrukturyzowany kontekst umieszczony w jego dyspozycji. Połączenie Google Cloud Storage z MCP Toolbox tworzy zespół agentów, który jest szybki, posiada bogaty kontekst i charakteryzuje się standardem korporacyjnym. Projektowanie narzędzi oparte na intencjach, powiązywanie parametrów URL oraz natywna autoryzacja OIDC umożliwiają modelom dostęp do kluczowych zbiorników danych bez kompromisów w zakresie bezpieczeństwa czy możliwości monitorowania.