Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Un agente di Attack Surface Management production-ready con AWS Bedrock, senza sforare il budget…

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

By Matthias BaetensNov 3, 20256 min read

Internet è sterminato e cresce senza sosta. A metà 2025 ospita oltre 1,25 miliardi di siti web e produce circa 149 zettabyte di dati all'anno. Più della metà del traffico arriva ormai da bot, molti dei quali malevoli. In questo contesto, aiutare le aziende a proteggere la propria impronta digitale non è mai stato così importante.

In DoiT abbiamo collaborato con un cliente specializzato in Attack Surface Management (ASM) per capire come l'AI di ultima generazione possa automatizzare e portare in scala parte di questo processo. L'obiettivo: un agente capace di navigare il web, analizzare gli asset esposti di un cliente e individuare potenziali vulnerabilità, il tutto su AWS.

PerfectScale™ for Kubernetes

Ready to optimize?

Get your free Kubernetes savings analysis

La progettazione della soluzione

Abbiamo costruito un sistema su Amazon Bedrock e Strands Agents, mettendo insieme modelli di reasoning, automazione del browser, retrieval-augmented generation e observability completa di livello produttivo.

Questi i principali componenti AWS:

| Componente                 | Servizio                             | Ruolo                                                      |
| -------------------------- | ------------------------------------ | ---------------------------------------------------------- |
| **Foundation Model**       | Amazon Bedrock con Claude            | Accesso serverless a LLM all'avanguardia tramite API unificata |
| **Agent Framework**        | Strands Agents                       | SDK per costruire e orchestrare agenti                     |
| **Tooling Layer**          | Model Context Protocol (MCP)         | Interfaccia tra l'agente e gli strumenti esterni           |
| **Retrieval**              | Bedrock Knowledge Bases + OpenSearch | Vector store per grounding e RAG                           |
| **Runtime**                | AWS Fargate & Bedrock AgentCore      | Ambienti di esecuzione completamente gestiti               |
| **Observability**          | CloudWatch & LangFuse                | Tracing, logging e metriche.                               |
| **Infrastructure as Code** | AWS CDK                              | Automazione del deployment                                 |

Ed ecco come si incastrano tra loro:

Vediamoli più nel dettaglio nelle prossime sezioni!

Modelli di reasoning e Agent Framework

Partiamo dalle fondamenta: come l'agente "pensa". AWS Bedrock rende immediato l'accesso a modelli di reasoning avanzati come la famiglia Nova di Amazon, i modelli Claude di Anthropic e numerosi modelli open source come Mistral, DeepSeek o Llama. Si tratta di modelli che supportano già il reasoning di tipo chain-of-thought, permettendo all'agente di produrre passaggi intermedi di "ragionamento" prima di arrivare alle conclusioni e di passare all'azione. È una capacità essenziale, perché ogni azione di navigazione e ogni osservazione si fondano sulla precedente.

Per l'orchestrazione, Strands Agents offre un'astrazione elegante del ciclo dell'agente: nella sua essenza, un loop di reasoning, uso dei tool e generazione della risposta. Si integra in modo nativo con i modelli Bedrock e mette a disposizione primitive di livello produttivo per la gestione dello stato di sessione, il coordinamento multi-agente e la gestione del contesto.

Un piccolo estratto di codice per dare l'idea di quanto Strands semplifichi lo sviluppo di un agente:

all_tools = [retrieve]

with playwright_mcp_client, filesystem_mcp_client:
    playwright_tools = playwright_mcp_client.list_tools_sync()
    filesystem_tools = filesystem_mcp_client.list_tools_sync()
    all_tools.extend(playwright_tools + filesystem_tools)

    agent = Agent(
        model=bedrock_model,
        system_prompt=system_prompt,
        tools=all_tools,
    )

Questo loop consente all'agente di navigare in autonomia, ragionare sui risultati e mantenere lo stato tra un passaggio e l'altro.

Agire tramite tool e MCP

Il reasoning, da solo, non basta: l'agente deve interagire con il mondo esterno.

L'integrazione con i tool è stata abilitata tramite il Model Context Protocol (MCP), uno standard aperto che collega gli LLM a sistemi esterni. Ogni server MCP espone un catalogo di "tool" con definizioni e schemi chiari, che l'agente può richiamare dinamicamente a runtime.

Per il nostro caso d'uso abbiamo combinato tre fonti di tool:

  1. retrieve: per l'interrogazione semantica del database delle vulnerabilità.
  2. Playwright MCP: per la navigazione web e l'interazione con i siti.
  3. Filesystem MCP: per uno storage persistente di base e per il logging.

Mentre stavamo sviluppando la soluzione, ad agosto 2025 AWS ha presentato AgentCore, che include il proprio Browser Tool e ci ha sollevato dall'onere di gestire un'infrastruttura Playwright dedicata. Offre un ambiente browser completamente gestito e isolato con integrazione IAM e observability tramite CloudTrail, e si è inserito senza attriti nel codice esistente:

from strands_tools.browser.agent_core_browser import AgentCoreBrowser
all_tools = [retrieve, AgentCoreBrowser().browser]

La modularità di Strands ha reso quasi immediato il passaggio da un tooling browser self-hosted a un servizio gestito più sicuro e scalabile.

Grounding con Bedrock Knowledge Bases

Per consentire all'agente di ragionare su dati reali, lo abbiamo ancorato al database del CVE™ Program, un repository di vulnerabilità note.

Tramite Amazon Bedrock Knowledge Bases abbiamo caricato il dataset CVE, che AWS ha automaticamente suddiviso in chunk, vettorizzato e indicizzato in OpenSearch Serverless, pronto per essere interrogato.

Il tool retrieve ha quindi permesso all'agente di interrogare questo vector store a runtime, mettendogli a disposizione conoscenze aggiornate sulle vulnerabilità rilevanti per ciascun asset cliente analizzato. La pipeline gestita di ingestione e retrieval di Bedrock Knowledge Bases ci ha fatto risparmiare un notevole sforzo ingegneristico rispetto alla costruzione di un flusso RAG personalizzato da zero.

Your cloud bill shouldn't be a mystery

Optimization, automation, expertise. In one platform.

Il deploy dell'agente su AWS

Una volta validato il prototipo in locale, abbiamo portato la soluzione in produzione utilizzando due runtime gestiti:

1. AWS Fargate

Un deployment containerizzato impacchettato con Docker e orchestrato tramite AWS CDK. Questa configurazione offre il pieno controllo su scaling e networking, ed è la scelta ideale quando serve maggiore controllo o quando si hanno dipendenze specifiche (come i server MCP).

2. Amazon Bedrock AgentCore

AgentCore offre un'astrazione di livello ancora più alto: si definiscono l'agente e la sua configurazione, al resto pensa AWS.

Con qualche piccolo intervento sul codice — soprattutto il passaggio dallo storage su filesystem al sistema di stato di Strands — lo stesso agente è entrato in esecuzione in modalità completamente gestita, senza alcuna configurazione di CDK o VPC, semplicemente con agentcore configure e agentcore launch dello starter kit di AgentCore. Per chi punta a iterare rapidamente con un overhead operativo minimo, è un approccio imbattibile.

Observability e valutazione

Monitorare il comportamento dell'agente è importante quanto progettarlo.

Per i team che preferiscono analytics esterni, LangFuse si integra senza fatica tramite OpenTelemetry, restituendo una timeline granulare di loop, chiamate ai modelli e invocazioni dei tool. Si ottiene così una visibilità step-by-step su ciò che l'agente sta "pensando" e sui tool che decide di utilizzare: un aspetto cruciale per il debug e per il miglioramento continuo.

Dopo il lancio di AgentCore è arrivata anche AgentCore Observability, che si integra in modo nativo con CloudWatch, oggi dotato di una dashboard di GenAI Observability che cattura tracce, metriche e log per ogni invocazione. Gli sviluppatori possono visualizzare il consumo di token, i tassi di errore e ispezionare le sessioni, trasformando la black box del reasoning degli LLM in dati misurabili.

Tenere sotto controllo la spesa del proprio agente con Cloud Intelligence™

Strettamente legato all'observability, anche capire l'impatto sui costi prima del deployment in produzione dovrebbe essere una priorità.

In DoiT abbiamo lanciato GenAI Lens, parte della nostra piattaforma Cloud Intelligence™, per aiutarvi ad analizzare i pattern di spesa dei workloads di AI generativa.

Si integra direttamente con Amazon Bedrock, oltre che con Anthropic e OpenAI, offrendo visibilità su quali modelli e workloads stanno trainando i costi.

Per analisi più approfondite, DataHub permette di integrare l'ingestione dei dati direttamente nell'applicazione. Con labeling e dashboard personalizzate è possibile tracciare i costi per dominio o per cliente, fino a calcolare un costo per vulnerabilità rilevata, trasformando gli insight di sicurezza in ROI misurabile.

Uno sguardo al futuro

Dall'ingestione dei dati al reasoning fino all'observability, l'ecosistema AWS ci ha messo a disposizione tutti i building block per dare vita a questo agente ASM autonomo, in modo sicuro, scalabile e con una gestione minima dell'infrastruttura, tanto più ora che AgentCore è in GA.

Abbiamo eseguito test su testphp.vulnweb.com e il sistema si è dimostrato in grado di rilevare scenari di SQL Injection, Reflected e Stored XSS, Authentication Bypass e perfino di compromissione attiva del sito. Questi risultati hanno confermato che l'agente è in grado di percorrere autonomamente i flussi web, inserire payload, interpretare le evidenze di esecuzione e correlare i risultati con il database CVE, il tutto con una supervisione umana minima. Oltre all'accuratezza tecnica, ne è emerso il valore di unire reasoning autonomo, retrieval in tempo reale e observability, trasformando scansioni di vulnerabilità grezze in intelligence strutturata e spiegabile.

Le strade da esplorare sono molte: affinare le capacità di reporting, valutare le performance su benchmark consolidati e integrare ulteriori database di vulnerabilità. Ma anche nella sua forma attuale, questo progetto dimostra come AWS Bedrock + Strands Agents possano tradurre la promessa dell'AI generativa in valore operativo concreto nella cybersecurity.

Tutto il codice sorgente e i dettagli implementativi sono disponibili su GitHub; una versione estesa è disponibile qui.

Rendi più semplice il tuo percorso FinOps insieme a noi: scrivici su doit.com/services!