Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Como criar um agente de Attack Surface Management pronto para produção com AWS Bedrock sem estourar o orçamento…

By Matthias BaetensNov 3, 20256 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

A internet é vasta e não para de crescer. Em meados de 2025, ela já abriga mais de 1,25 bilhão de sites e gera cerca de 149 zettabytes de dados por ano. Mais da metade de todo o tráfego hoje vem de bots — boa parte deles maliciosos. Nesse cenário, ajudar as empresas a proteger sua presença digital nunca foi tão essencial.

Na DoiT, trabalhamos com um cliente especializado em Attack Surface Management (ASM) para explorar como a IA moderna poderia automatizar e escalar parte desse processo. O objetivo: um agente capaz de navegar pela web, analisar os ativos expostos de um cliente e identificar potenciais vulnerabilidades — tudo rodando na AWS.

Desenhando a solução

Arquitetamos um sistema em cima do Amazon Bedrock e do Strands Agents, combinando modelos de raciocínio, automação de navegador, retrieval-augmented generation e observabilidade completa em produção.

Os principais componentes da AWS foram:

| Componente                 | Serviço                              | Função                                                     |
| -------------------------- | ------------------------------------ | ---------------------------------------------------------- |
| **Foundation Model**       | Amazon Bedrock executando Claude     | Acesso serverless a LLMs de ponta via API unificada        |
| **Agent Framework**        | Strands Agents                       | SDK para criar e orquestrar agentes                        |
| **Tooling Layer**          | Model Context Protocol (MCP)         | Interface entre o agente e ferramentas externas            |
| **Retrieval**              | Bedrock Knowledge Bases + OpenSearch | Vector store para grounding e RAG                          |
| **Runtime**                | AWS Fargate & Bedrock AgentCore      | Ambientes de execução totalmente gerenciados               |
| **Observabilidade**        | CloudWatch & LangFuse                | Tracing, logging e métricas.                               |
| **Infrastructure as Code** | AWS CDK                              | Automação de deploy                                        |

E como tudo se encaixa:

Vamos nos aprofundar em cada um deles nas próximas seções!

Modelos de raciocínio e Agent Framework

Vamos começar pela base: como o agente "pensa". O AWS Bedrock dá acesso fácil a modelos de raciocínio avançados, como a família Nova da Amazon, os modelos Claude da Anthropic e vários modelos open source, como Mistral, DeepSeek e Llama. Esses modelos já suportam raciocínio no estilo chain-of-thought, o que permite ao agente produzir etapas intermediárias de "pensamento" antes de chegar a conclusões e agir. Essa capacidade de raciocínio é essencial, porque cada ação de navegação e cada observação se apoiam nas anteriores.

Para a orquestração, o Strands Agents oferece uma abstração elegante sobre o loop do agente: na essência, um ciclo de raciocínio, uso de ferramentas e geração de respostas. Ele se integra perfeitamente aos modelos do Bedrock e traz primitivas prontas para produção para estado de sessão, coordenação multi-agente e gerenciamento de contexto.

Um pequeno trecho de código do agente, só para você ter uma ideia de como o Strands simplifica o desenvolvimento:

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,
    )

Esse loop permite que o agente navegue de forma autônoma, raciocine sobre o que encontra e mantenha o estado entre as etapas.

Agindo por meio de ferramentas e MCP

Mas só raciocinar não basta — o agente precisa interagir com o mundo.

O ferramental foi viabilizado pelo Model Context Protocol (MCP), um padrão aberto que conecta LLMs a sistemas externos. Cada servidor MCP expõe um catálogo de "ferramentas" com definições e schemas claros, que o agente pode chamar dinamicamente em runtime.

No nosso caso, combinamos três fontes de ferramentas:

  1. retrieve: para consultas semânticas no banco de vulnerabilidades.
  2. Playwright MCP: para navegação web e interações com sites.
  3. Filesystem MCP: para armazenamento persistente simples e logging.

Enquanto desenvolvíamos isso, em agosto de 2025, a AWS lançou o AgentCore, que já vem com sua própria Browser Tool, eliminando a necessidade de manter nossa própria infraestrutura Playwright. Ela oferece um ambiente de navegador totalmente gerenciado e isolado, com integração ao IAM e observabilidade via CloudTrail — e se encaixou direitinho no código existente:

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

A modularidade do Strands tornou trivial trocar o ferramental de navegador self-hosted por um serviço gerenciado mais seguro e escalável.

Grounding com Bedrock Knowledge Bases

Para que o agente raciocinasse com dados do mundo real, fizemos o grounding com o banco de dados do CVE™ Program, um repositório de vulnerabilidades conhecidas.

Com o Amazon Bedrock Knowledge Bases, subimos o dataset de CVEs, que a AWS automaticamente fragmentou, fez o embedding e indexou no OpenSearch Serverless, pronto para ser consultado.

A ferramenta retrieve permitiu então que o agente consultasse esse vector store em runtime, dando a ele conhecimento atualizado sobre vulnerabilidades relevantes para cada ativo de cliente que aparecia. O pipeline gerenciado de ingestão e retrieval do Bedrock Knowledge Bases poupou um esforço significativo de engenharia, na comparação com criar um fluxo de RAG do zero.

Implantando o agente na AWS

Depois de validar o protótipo localmente, levamos a solução para produção usando dois runtimes gerenciados:

1. AWS Fargate

Um deploy containerizado empacotado via Docker e orquestrado com o AWS CDK. Essa configuração trouxe controle total sobre escalonamento e rede, sendo ideal para quem quer mais controle ou tem dependências especializadas (como os servidores MCP).

2. Amazon Bedrock AgentCore

O AgentCore oferece uma abstração de nível ainda mais alto: você define o agente e a configuração dele, e a AWS executa para você.

Com alguns ajustes de código — basicamente trocando o armazenamento em filesystem pelo sistema de estado do Strands — o mesmo agente passou a rodar totalmente gerenciado, sem precisar de configuração de CDK ou VPC, apenas com agentcore configure e agentcore launch do starter kit do AgentCore. Para iteração rápida e overhead operacional mínimo, essa abordagem foi imbatível.

Observabilidade e avaliação

Monitorar o comportamento do agente é tão crítico quanto projetá-lo.

Para times que preferem analytics externos, o LangFuse se conectou sem esforço via OpenTelemetry, oferecendo uma timeline detalhada de loops, chamadas de modelo e invocações de ferramentas. Isso te dá uma visão passo a passo excelente do que o agente está "pensando" e de quais ferramentas ele decide usar — algo fundamental para debugar e evoluir o sistema continuamente.

Após o lançamento do AgentCore, a AgentCore Observability também ficou disponível, integrando-se perfeitamente ao CloudWatch, que agora tem um dashboard de GenAI Observability, capturando traces, métricas e logs em cada invocação. Os desenvolvedores conseguem visualizar uso de tokens, taxas de erro e inspecionar sessões, transformando a caixa-preta do raciocínio do LLM em dados mensuráveis.

Acompanhe os gastos do seu agente com a DoiT Cloud Intelligence

Bem próximo da observabilidade, entender o impacto nos custos antes de ir para produção também precisa estar no topo da lista.

Na DoiT, lançamos o GenAI Lens, parte da plataforma DoiT Cloud Intelligence™, para te ajudar a analisar os padrões de gasto de workloads de IA generativa.

Ele se integra diretamente ao Amazon Bedrock, além da Anthropic e da OpenAI, dando visibilidade sobre quais modelos e workloads estão puxando seus custos.

Para uma análise mais profunda, o DataHub permite incorporar a ingestão de dados diretamente na sua aplicação. Com labeling e dashboards customizados, dá para acompanhar custos por domínio ou cliente — e até calcular um custo por vulnerabilidade encontrada, transformando insights de segurança em ROI mensurável.

O que vem por aí

Da ingestão de dados ao raciocínio e à observabilidade, o ecossistema da AWS forneceu todos os blocos para dar vida a esse agente autônomo de ASM — de forma segura, escalável e com gerenciamento mínimo de infraestrutura, principalmente agora que o AgentCore está em GA.

Rodamos testes no testphp.vulnweb.com e o sistema mostrou ser capaz de detectar cenários de SQL Injection, Reflected e Stored XSS, Authentication Bypass e até comprometimento ativo de site. Esses resultados confirmaram que o agente consegue percorrer fluxos web de forma autônoma, inserir payloads, interpretar evidências de execução e correlacionar os resultados com a base de CVEs — tudo com supervisão humana mínima. Além da precisão técnica, ficou claro o valor de combinar raciocínio autônomo com retrieval em tempo real e observabilidade, transformando varreduras brutas de vulnerabilidades em inteligência estruturada e explicável.

Ainda há muito o que explorar: refinar a geração de relatórios, avaliar o desempenho em benchmarks conhecidos e integrar outras bases de vulnerabilidades. Mas, mesmo na forma atual, este projeto mostra como a combinação AWS Bedrock + Strands Agents consegue traduzir a promessa da IA generativa em valor operacional na cibersegurança.

Todo o código-fonte e os detalhes de implementação estão no GitHub, e há uma versão estendida aqui.

Vem com a gente facilitar sua jornada de FinOps: fale com a gente em doit.com/services!