Author: Make.com Service User

  • Protegendo agentes de IA com políticas temporais no Amazon Bedrock AgentCore

    O problema com controles de acesso tradicionais em agentes de IA

    Antes dos agentes de IA, era geralmente suficiente que os controles de acesso tratassem cada ação como um evento independente. As aplicações dependiam de lógica de negócio determinística para garantir que as ações acontecessem na ordem correta e que os dados estivessem atualizados.

    Agentes de IA se comportam de forma fundamentalmente diferente. Eles decidem em tempo de execução quais ferramentas chamar, com quais argumentos e em qual ordem. Essa flexibilidade, combinada com modelos cada vez mais inteligentes, torna os agentes ao mesmo tempo poderosos e difíceis de controlar.

    Uma chamada de ferramenta pode parecer segura quando analisada isoladamente, mas ser prejudicial no contexto da chamada anterior — por exemplo, após ler de uma fonte de dados não confiável. A questão então passa a ser: como aplicar regras de autorização que levem em conta o histórico de sessão do agente, de uma forma que o próprio agente não consiga burlar?

    O que são políticas temporais no AgentCore

    As políticas temporais no Amazon Bedrock AgentCore permitem definir regras com estado (stateful) que determinam a autorização para os destinos do AgentCore Gateway, avaliando a requisição atual no contexto de eventos anteriores na trajetória do agente. Como essas políticas são executadas no perímetro do AgentCore Gateway, fora do próprio código do agente, o agente não pode interceptá-las nem manipulá-las.

    Por que agentes precisam de políticas com estado

    Os controles de acesso existentes no AgentCore Policy aplicam regras determinísticas e sem estado (stateless) a cada requisição individual. Esses controles são necessários, mas frequentemente insuficientes para agentes. Considere os seguintes cenários onde controles stateless falham em capturar problemas críticos:

    • Um agente chama uma ferramenta de consulta de cliente, alucina um número de conta diferente do retornado, e passa esse valor para uma ferramenta de transferência de fundos — movendo dinheiro para a conta errada.
    • Um agente descontrolado executa dezenas de operações em loop porque nada rastreia que a exposição acumulada já ultrapassou o limite de risco.
    • Um agente aprova e nega o mesmo sinistro de seguro em segundos.

    Cada chamada de ferramenta individual nesses cenários passaria numa verificação de política stateless. O problema só fica aparente quando se observa a trajetória do agente — a sequência ordenada de ações em uma sessão. As políticas temporais estendem o AgentCore Policy com essa camada de aplicação consciente da trajetória, executando no gateway, fora do código do agente, de modo que não podem ser contornadas independentemente do que o agente faça, como foi instruído ou quais bugs existam no código.

    Casos de uso comuns

    • Integridade de saída entre ferramentas encadeadas: exige que um argumento passado para a chamada atual corresponda exatamente à saída de uma chamada anterior, impedindo que o agente alucine ou substitua valores entre etapas.
    • Sequenciamento de chamadas de ferramentas: exige que uma ferramenta seja chamada antes de outra para verificar a aderência a procedimentos operacionais padrão (SOP).
    • Aprovação humana antes de ações privilegiadas: bloqueia chamadas destrutivas ou sensíveis até que um evento de aprovação humana explícita seja registrado na trajetória.
    • Atualidade dos dados: exige que uma consulta de dados tenha sido concluída dentro de um intervalo de tempo antes que uma ação dependente seja autorizada, evitando decisões baseadas em informações desatualizadas.

    Como as políticas temporais funcionam

    As políticas temporais se baseiam no mecanismo de políticas já usado para controle de acesso stateless. Elas introduzem o conceito de trajetórias de agentes — sequências delimitadas de ações identificadas por um principal e um ID de sessão. Os agentes nunca veem a lógica das políticas, nunca tocam no armazenamento de estado e não podem alterar os controles. Assim como nas demais funcionalidades do AgentCore Policy, as políticas temporais negam por padrão e a proibição tem precedência sobre a permissão.

    Quando o gateway recebe uma chamada de ferramenta, o mecanismo de políticas: consulta o estado da trajetória para ações, entradas e saídas relevantes; avalia cada política temporal contra a requisição atual no contexto de seu escopo histórico; e retorna uma decisão determinística de ALLOW ou DENY, registrando o contexto completo da decisão.

    Cada requisição avaliada por uma política temporal deve carregar um cabeçalho x-amzn-bedrock-agentcore-policy-session-id, que identifica a sessão à qual a requisição pertence. O limite pode refletir qualquer unidade de trabalho que faça sentido para a aplicação — uma conversa de usuário, uma tarefa com múltiplas etapas ou um fluxo de trabalho de longa duração.

    Uma sessão nunca é definida apenas pelo seu ID. O AgentCore combina o ID de sessão com a identidade do usuário final para produzir uma sessão única — o que significa que duas identidades diferentes podem apresentar o mesmo ID de sessão e ainda assim serem tratadas como sessões completamente separadas. Dentro de uma sessão ativa, as trajetórias de agentes têm uma janela máxima de retrospecto de 24 horas. Qualquer evento de trajetória mais antigo que isso é automaticamente excluído.

    Uma regra adicional governa a relação entre sessões e as próprias políticas: sempre que uma mudança é feita nas políticas de um mecanismo de políticas, as sessões existentes são invalidadas, garantindo que cada sessão seja avaliada contra o conjunto atual de políticas.

    Aplicando políticas temporais a um agente de gestão de portfólios

    Para tornar esses conceitos concretos, a AWS apresenta um exemplo hipotético de um agente de banco privado que ajuda assessores de investimento a gerenciar portfólios de clientes. O agente recupera perfis de clientes, carrega posições de portfólio, busca preços de mercado em tempo real, realiza análises e executa operações em nome do assessor.

    No cenário, as seguintes ferramentas MCP (Protocolo de Contexto de Modelo) são expostas através do AgentCore Gateway: get_client_profile, load_portfolio, get_market_price, execute_trade e rebalance_portfolio. Há três perfis de assessores: juniores (autoridade limitada de negociação), seniores (autoridade total) e oficiais de compliance (acesso somente leitura).

    Para autenticação, o exemplo utiliza o Amazon Cognito com tokens JWT (JSON Web Token) para autenticação de entrada no AgentCore Gateway. Consulte a documentação do AgentCore Gateway para aprender como configurar a autenticação.

    As políticas temporais utilizam o Dogwood, uma nova linguagem de governança open source projetada para agentes e suas ferramentas. O Dogwood suporta a avaliação de políticas Cedar existentes e adiciona suporte a condições temporais. Por ser compatível com Cedar, os clientes podem continuar usando suas políticas atuais sem precisar migrar. Para mais detalhes sobre o Dogwood, consulte a documentação da linguagem ou este post do blog.

    Fluxo de requisição pelo gateway e pela política

    Quando o agente de portfólio inicia uma chamada de ferramenta, o seguinte ocorre: a requisição chega ao AgentCore Gateway; o assessor já está autenticado via AgentCore Identity; a requisição carrega o ID de trajetória da sessão atual; o mecanismo de políticas recupera o estado acumulado da trajetória; cada política temporal avalia a requisição atual contra esse histórico; se todas as políticas permitirem, a requisição segue para a ferramenta MCP; se qualquer política proibir, a requisição é negada e a negação é registrada; em caso de execução bem-sucedida, a ação e seu resultado são anexados ao estado da trajetória para avaliações futuras.

    Figura 1: Fluxo de requisição pelo AgentCore Gateway e Policy — Imagem original — fonte: Aws

    Os sete padrões de política aplicados ao exemplo

    A equipe de compliance do exemplo exige os seguintes controles temporais antes que o agente entre em produção:

    Política 1: Sequenciamento de fluxo de trabalho

    O agente deve executar get_client_profile, depois load_portfolio, antes que qualquer operação seja executada. Sem o perfil do cliente, o agente não tem contexto verificado sobre quais portfólios pertencem a esse cliente, qual é a tolerância ao risco ou quais restrições de conta se aplicam.

    permit (principal, action == AgentCore::Action::"FinTarget___load_portfolio", resource == AgentCore::Gateway::)
    when temporal {
      formerly within 5m (AgentCore::Action::"FinTarget___get_client_profile"::response{eventResource: resource})
    };
    
    permit (principal, action == AgentCore::Action::"FinTarget___rebalance_portfolio", resource == AgentCore::Gateway::)
    when temporal {
      formerly within 5m (AgentCore::Action::"FinTarget___load_portfolio"::response{eventResource: resource})
    };

    Política 2: Integridade de saída para entrada

    O portfolio_id passado para execute_trade deve corresponder exatamente a um dos IDs retornados por get_client_profile. O agente não pode fabricar ou substituir um ID diferente. Isso impede que um atacante use injeção de prompt para direcionar o agente a operar contra o portfólio de outro cliente.

    permit (
      principal,
      action == AgentCore::Action::"execute_trade",
      resource
    )
    when temporal {
      formerly within 24h (
        AgentCore::Action::"get_client_profile"::response{
          input.profile_id: context.input.profile_id,
          eventResource: resource
        }
      )
    };

    Política 3: Atualidade dos dados

    Uma chamada a get_market_price deve ter sido concluída nos últimos 30 segundos antes que execute_trade seja autorizado. Em mercados voláteis, mesmo uma cotação de 60 segundos atrás pode representar uma variação de preço significativa.

    permit (
      principal,
      action == AgentCore::Action::"execute_trade",
      resource
    )
    when temporal {
      formerly within 30s (
        AgentCore::Action::"get_market_price"::response{eventResource: resource}
      )
    };

    Política 4: Limite de orçamento acumulado por trajetória

    O valor total de operações em uma única sessão não pode ultrapassar $60.000. Um agente comprometido executando dezenas de pequenas operações que individualmente parecem normais ainda pode acumular uma exposição catastrófica.

    permit (
      principal,
      action == AgentCore::Action::"execute_trade",
      resource
    )
    when temporal {
      exists (total: Long).
      ((sum amount for (amount: Long), (t: Timepoint).
        where (formerly within 24h (
          AgentCore::Action::"get_market_price"::request{input.cost: amount, eventResource: resource}
          && tp(t)))) == total
      && total < 60000)
    };

    Política 5: Aprovação humana para operações de grande valor (consumo único)

    Qualquer operação acima de $25.000 exige a aprovação explícita do assessor. Cada aprovação é consumida por uma única operação. Uma segunda operação de grande valor exige uma nova aprovação, impedindo que o agente interprete uma única aprovação como permissão abrangente para múltiplas operações.

    permit (
      principal,
      action == AgentCore::Action::"execute_trade",
      resource
    )
    when {
      context.input.cost < 25000 ||
      temporal {
        !(AgentCore::Action::"execute_trade"::response{eventResource: resource})
        since within 24h (
          AgentCore::Action::"approve_trade"::response{
            input.status: "approved",
            eventResource: resource}
        )
      }
    };

    Política 6: Exclusão mútua

    O agente não pode comprar e depois vender o mesmo ativo na mesma trajetória se a venda resultar em prejuízo. A contradição em si é o sinal de que algo deu errado e a sessão deve ser revisada.

    permit (
      principal,
      action == AgentCore::Action::"execute_sell",
      resource
    )
    unless {
      context.input.profit < 0 &&
      temporal {
        formerly within 24h (
          AgentCore::Action::"execute_buy"{
            stock_symbol: context.input.stock_symbol,
            eventResource: resource}
        )
      }
    };

    Política 7: Decaimento progressivo de confiança

    Após 15 minutos sem interação do assessor, o agente perde acesso a operações de escrita (execute_trade, rebalance_portfolio). O assessor pode se reengajar a qualquer momento para restaurar o acesso completo. Isso garante que uma operação autônoma prolongada não acumule riscos sem controle.

    permit (
      principal,
      action in [
        AgentCore::Action::"execute_trade",
        AgentCore::Action::"rebalance_portfolio"
      ],
      resource == AgentCore::Gateway::""
    )
    unless temporal {
      formerly within 15m AgentCore::Action::"interact_advisor"::response{eventResource: resource}
    };

    Considerações de custo

    O modelo de cobrança é baseado nas requisições de autorização realizadas durante a execução do agente. Cada vez que um agente chama uma ferramenta pelo AgentCore Gateway, o Policy verifica a ação contra as regras definidas. As primeiras 100 políticas temporais por mecanismo de políticas estão incluídas no preço existente por requisição de autorização. Consulte a página de preços do AgentCore para mais detalhes.

    Limpeza dos recursos

    Para evitar cobranças contínuas, os recursos criados devem ser removidos na seguinte ordem: primeiro excluir as políticas temporais do mecanismo de políticas, depois desanexar o mecanismo de políticas do gateway e, por fim, excluir o mecanismo de políticas. Um mecanismo de políticas não pode ser excluído enquanto ainda contiver políticas ou permanecer anexado a um gateway.

    Para listar e excluir as políticas, repita o comando de exclusão para cada uma das sete políticas:

    aws bedrock-agentcore-control list-policies \
      --policy-engine-id 
    
    aws bedrock-agentcore-control delete-policy \
      --policy-engine-id  \
      --policy-id 

    Para desanexar o mecanismo de políticas do gateway, atualize o gateway sem uma configuração de mecanismo de políticas:

    aws bedrock-agentcore-control create-gateway \
      --name my-gateway \
      --role-arn arn:aws:iam::123456789012:role/my-gateway-service-role \
      --protocol-type MCP \
      --authorizer-type CUSTOM_JWT \
      --authorizer-configuration '{
        "customJWTAuthorizer": {
          "discoveryUrl": "https://cognito-idp.us-west-2.amazonaws.com/some-user-pool/.well-known/openid-configuration",
          "allowedClients": ["clientId"]
        }
      }'

    Para excluir o mecanismo de políticas:

    aws bedrock-agentcore-control delete-policy-engine \
      --policy-engine-id 

    Opcionalmente, se o gateway e o destino foram criados apenas para este exercício:

    aws bedrock-agentcore-control delete-gateway-target \
      --gateway-identifier  \
      --target-id 
    
    aws bedrock-agentcore-control delete-gateway \
      --gateway-identifier 

    Conclusão

    As políticas temporais trazem autorização stateful e consciente de trajetória para sistemas de IA agêntica. Os sete padrões demonstrados — sequenciamento de fluxo de trabalho, integridade de saída para entrada, atualidade de dados, limites de orçamento acumulado, aprovações humanas no loop, exclusão mútua e decaimento progressivo de confiança — se generalizam para qualquer domínio onde agentes interagem com ferramentas sensíveis em tempo de execução.

    Como a aplicação acontece no perímetro do AgentCore Gateway, fora do próprio raciocínio do agente, essas proteções permanecem à prova de adulteração independentemente do comportamento do modelo. Isso oferece uma forma declarativa e auditável de aplicar limites operacionais sem restringir a flexibilidade que torna os agentes valiosos. Para começar, consulte a documentação do AgentCore.

    Fonte

    Securing AI agents with temporal policies in Amazon Bedrock AgentCore (https://aws.amazon.com/blogs/machine-learning/securing-ai-agents-with-temporal-policies-in-amazon-bedrock-agentcore/)

  • Como configurar rate limits para tráfego de IA no AgentCore Gateway

    O que é o AgentCore Gateway e por que rate limiting importa

    O Amazon Bedrock AgentCore Gateway é um gateway de IA totalmente gerenciado e serverless que funciona como ponto de entrada único e seguro para tráfego de IA. Ele roteia requisições para ferramentas como busca web gerenciada, bases de conhecimento gerenciadas, servidores MCP, modelos de inferência (Modelos de Linguagem de Grande Escala — LLMs), agentes (A2A, agentes como ferramentas, etc.) e endpoints HTTP.

    A AWS anunciou o suporte a rate limiting no AgentCore Gateway, oferecendo controle refinado sobre quanto tráfego cada usuário pode consumir. Com essa funcionalidade, é possível definir regras baseadas em OAuth ou Gerenciamento de Identidade e Acesso (IAM) para requisições por minuto, conexões simultâneas e throughput de tokens — garantindo que os serviços downstream permaneçam disponíveis mesmo durante picos de tráfego.

    Tipos de métricas de rate limiting

    O AgentCore Gateway suporta três tipos de alvos: alvos MCP, alvos de inferência e alvos de passagem HTTP. Para cada um desses alvos, as seguintes métricas de limite estão disponíveis:

    • Limites de requisição (RPS/RPM): Medidos em requisições por segundo (RPS) ou requisições por minuto (RPM), aplicam-se a todos os tipos de alvo. Cada requisição conta como exatamente uma unidade, independentemente do tempo de conclusão — uma que termina em 50 milissegundos e outra que faz streaming por 90 segundos consomem a mesma unidade.
    • Limites de token (TPM): Medidos em tokens por minuto (TPM), aplicam-se apenas a alvos de inferência. O gateway usa um tokenizador de uso geral para estimar os tokens de entrada antes de despachar a chamada e reconcilia o consumo real após o retorno da resposta, considerando tanto tokens de entrada quanto de saída.
    • Limites de conexão (CPS): Medidos em conexões por segundo (CPS), aplicam-se a todos os tipos de alvo. Ao contrário dos limites de requisição, o CPS rastreia por quanto tempo cada requisição mantém uma conexão aberta — uma chamada de inferência em streaming que dura 100 segundos ocupa um slot de conexão durante todo esse período.

    Estrutura de configuração: dimension keys e entries

    Para o caso de uso apresentado, a AWS considera três grupos de usuários: Basic, Advanced e Beta. O AgentCore Identity gerencia a autenticação de entrada usando Tokens Web JSON (JWT) com o Microsoft Entra ID como provedor de identidade. A Policy no Amazon Bedrock AgentCore aplica controle de acesso baseado em papéis (RBAC), limitando o acesso de cada grupo a alvos e modelos específicos.

    Uma configuração de rate limit é composta por duas partes: chaves de dimensão (dimension keys) e entradas (entries). As chaves de dimensão definem como o gateway agrupa o tráfego em buckets de limite. As entradas definem o throughput permitido para cada bucket.

    Os exemplos neste artigo utilizam a Interface de Linha de Comando da AWS (AWS CLI) para criar as configurações. O gateway suporta as seguintes chaves de dimensão: targetName, toolName, qualifiedModelId, $.context.jwt.<claim>, $.context.iam.principal e $.context.iam.sourceIdentity.

    As entradas suportam o valor curinga *, que dá a cada valor distinto seu próprio bucket independente na taxa configurada. Uma entrada nomeada tem precedência sobre o curinga — a correspondência mais específica sempre vence.

    Tipos de rate limits e exemplos de configuração

    O AgentCore Gateway aplica duas camadas de rate limiting: limites definidos pelo cliente e Cotas de Serviço. Os limites do cliente são avaliados primeiro; se a requisição passar, as cotas de serviço são verificadas.

    Cotas gerenciadas pelo serviço

    As cotas gerenciadas pelo serviço são os limites impostos por conta AWS pelo próprio serviço. Elas definem o teto que os limites definidos pelo cliente não podem ultrapassar. A taxa efetiva é o mínimo entre o limite definido pelo cliente e o limite gerenciado pelo serviço. É possível solicitar aumentos para algumas cotas pelo console de Cotas de Serviço.

    Limites por usuário

    Os limites por usuário usam $.context.jwt.<claim>, $.context.iam.principal e $.context.iam.sourceIdentity como chaves de dimensão para controlar quanto tráfego usuários individuais ou grupos inteiros podem consumir.

    O exemplo abaixo atribui taxas de requisição diferentes por grupo de usuário, usando o claim role do JWT:

    aws bedrock-agentcore-control create-gateway-rate-limit \
      --gateway-identifier my-gateway-abc1234567 \
      --dimension-keys '["$.context.jwt.role"]' \
      --description "Per-role request and connection limit" \
      --entries '[
        {
          "dimensions": {"$.context.jwt.role": "[\"Basic\"]"},
          "requests": [{"rate": 100, "period": "minute"}],
          "connections": [{"rate": 50, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\"]"},
          "requests": [{"rate": 300, "period": "minute"}],
          "connections": [{"rate": 150, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\", \"Beta\"]"},
          "requests": [{"rate": 300, "period": "minute"}],
          "connections": [{"rate": 200, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "*"},
          "requests": [{"rate": 80, "period": "minute"}],
          "connections": [{"rate": 10, "period": "second"}]
        }
      ]'

    Nessa configuração, usuários Basic recebem 100 RPM e 50 CPS compartilhados entre todo o grupo. Se um único usuário Basic consumir 80 requisições em um minuto, restam apenas 20 para os demais. Para evitar que um único usuário esgote a cota do grupo, é recomendável adicionar também um limite por usuário individual usando o claim $.context.jwt.sub:

    aws bedrock-agentcore-control create-gateway-rate-limit \
      --gateway-identifier my-gateway-abc1234567 \
      --dimension-keys '["$.context.jwt.role", "$.context.jwt.sub"]' \
      --description "Per-user request and connection limit within each role" \
      --entries '[
        {
          "dimensions": {"$.context.jwt.role": "[\"Basic\"]", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 20, "period": "minute"}],
          "connections": [{"rate": 10, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\"]", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 60, "period": "minute"}],
          "connections": [{"rate": 30, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\", \"Beta\"]", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 60, "period": "minute"}],
          "connections": [{"rate": 50, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "*", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 20, "period": "minute"}],
          "connections": [{"rate": 20, "period": "second"}]
        }
      ]'

    Juntos, o limite por grupo e o limite por usuário criam um modelo de aplicação em duas camadas com semântica AND: uma requisição precisa passar pelos dois limites para prosseguir. Se qualquer um dos dois negar a requisição, o gateway retorna uma resposta de throttling.

    Limites por alvo

    Os limites por alvo usam targetName, qualifiedModelId ou toolName como chave de dimensão para controlar o throughput para alvos, modelos ou ferramentas específicos. Eles protegem a capacidade do backend e distribuem a carga entre os recursos disponíveis:

    aws bedrock-agentcore-control create-gateway-rate-limit \
      --gateway-identifier my-gateway-abc1234567 \
      --dimension-keys '["targetName"]' \
      --description "Per-target rate limit" \
      --entries '[
        {
          "dimensions": {"targetName": "Booking"},
          "requests": [{"rate": 20, "period": "second"}]
        },
        {
          "dimensions": {"targetName": "Docs"},
          "requests": [{"rate": 15, "period": "second"}]
        },
        {
          "dimensions": {"targetName": "awsdocsagent"},
          "requests": [{"rate": 10, "period": "second"}],
          "connections": [{"rate": 60, "period": "second"}]
        },
        {
          "dimensions": {"targetName": "BedrockMantle"},
          "tokens": [{"rate": 100000, "period": "minute"}],
          "connections": [{"rate": 250, "period": "second"}]
        },
        {
          "dimensions": {"targetName": "CustomPlatform"},
          "tokens": [{"rate": 50000, "period": "minute"}],
          "connections": [{"rate": 100, "period": "second"}]
        },
        {
          "dimensions": {"targetName": "*"},
          "tokens": [{"rate": 10000, "period": "minute"}],
          "requests": [{"rate": 10, "period": "second"}],
          "connections": [{"rate": 50, "period": "second"}]
        }
      ]'

    Limites combinados (alvo + usuário)

    Os limites híbridos combinam dimensões de alvo e de usuário em uma única configuração, oferecendo o controle mais granular. O exemplo abaixo aplica limites de token por modelo, escopados por usuário dentro de seu grupo. O qualifiedModelId é o identificador totalmente qualificado do modelo para alvos de inferência (consulte a documentação):

    aws bedrock-agentcore-control create-gateway-rate-limit \
      --gateway-identifier my-gateway-abc1234567 \
      --dimension-keys '["$.context.jwt.role", "qualifiedModelId", "$.context.jwt.sub"]' \
      --description "Per-user per-role per-model TPM and access limit" \
      --entries '[
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\", \"Beta\"]", "qualifiedModelId": "anthropic.claude-fable-5", "$.context.jwt.sub": "*"},
          "tokens": [{"rate": 80000, "period": "minute"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Basic\"]", "qualifiedModelId": "anthropic.claude-fable-5", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 0, "period": "second"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\"]", "qualifiedModelId": "anthropic.claude-fable-5", "$.context.jwt.sub": "*"},
          "requests": [{"rate": 0, "period": "second"}]
        },
        ... (repita para openai.gpt-5.6-luna e openai.gpt-5.6-terra)
        {
          "dimensions": {"$.context.jwt.role": "[\"Advanced\"]", "qualifiedModelId": "*", "$.context.jwt.sub": "*"},
          "tokens": [{"rate": 40000, "period": "minute"}]
        },
        {
          "dimensions": {"$.context.jwt.role": "[\"Basic\"]", "qualifiedModelId": "*", "$.context.jwt.sub": "*"},
          "tokens": [{"rate": 20000, "period": "minute"}]
        }
      ]'

    Nessa configuração, anthropic.claude-fable-5 é um modelo restrito. Apenas usuários com o papel ["Advanced", "Beta"] podem invocá-lo, recebendo 80.000 TPM por usuário para workloads de benchmarking. Usuários Basic e Advanced (sem Beta) são bloqueados com taxa zero. Para modelos geralmente disponíveis, usuários Basic recebem 20.000 TPM e Advanced recebem 40.000 TPM por usuário via entradas curinga. Para mais exemplos de configuração, veja os exemplos de API de rate limit.

    Rate limiting para workloads agênticos

    Imagem original — fonte: Aws

    Em workloads agênticos, dois tipos de rate limits devem ser considerados:

    • Limites sobre a invocação do agente: Protegem a frequência com que usuários ou outros serviços podem invocar o agente. São limites de RPM e CPS escopados ao próprio alvo do agente. Para controle mais granular, combine targetName com dimensões de usuário como ["targetName", "$.context.jwt.role"].
    • Limites sobre os recursos consumidos pelo agente: Protegem os recursos downstream que o agente consome em cada invocação. O comportamento depende de como o agente se autentica com o gateway ao invocar esses recursos.

    Se o agente realiza uma troca de token on-behalf-of (OBO) com base no JWT do usuário, as requisições downstream carregam a identidade original do usuário e todos os limites baseados em usuário se aplicam normalmente. Porém, se o agente usa um fluxo de client credentials (máquina a máquina), as requisições downstream carregam a identidade do próprio agente. Nesse caso, os limites baseados em usuário não se aplicarão e é necessário adicionar limites que identifiquem o agente em si — usando um claim como $.context.jwt.azp (authorized party).

    Boas práticas de rate limiting

    • Se você usa Policy no AgentCore para RBAC, entenda a ordem de avaliação: os rate limits são aplicados primeiro, e a Policy é avaliada depois. Para evitar que requisições de usuários bloqueados consumam o bucket de rate limit, crie uma entrada com taxa zero para esses usuários.
    • O gateway avalia rate limits com mais chaves de dimensão primeiro (limites mais específicos têm prioridade). Dentro do mesmo número de dimensões, limites mais restritivos (menores) são avaliados primeiro. A avaliação encerra no primeiro bloqueio.
    • O curinga * só pode aparecer em posições finais. Se usado na posição N, todas as posições seguintes também devem ser *. Veja os exemplos para entender esse comportamento.
    • Evite usar claims JWT de alta cardinalidade como chaves de dimensão (ex: $.context.jwt.jti, $.context.jwt.nonce). Prefira identificadores estáveis como sub, role, team ou tier.
    • O gateway usa semântica fail-open para avaliação de rate limits. Não confie exclusivamente nos rate limits como barreira de segurança. Use autenticação, autorização e regras do AWS WAF para aplicação de segurança.
    • Habilite logs de aplicação no seu AgentCore Gateway para ter acesso aos logs de rate limiting. O gateway emite atributos de span OpenTelemetry (OTEL) para cada requisição onde os rate limits são avaliados.
    • Sempre inclua uma entrada catch-all (*) nas suas configurações. Sem ela, callers sem entrada explícita ignoram completamente os limites definidos pelo cliente e caem diretamente nas cotas gerenciadas pelo serviço. Para mais boas práticas, consulte a documentação do AgentCore Gateway.

    Conclusão

    O suporte a rate limiting no Amazon Bedrock AgentCore Gateway permite governar o tráfego de IA com múltiplas camadas: limites por usuário para garantir uso justo entre papéis, limites por alvo para proteger a capacidade dos serviços downstream, e limites multidimensionais que combinam usuário e alvo para controle ainda mais refinado.

    Combinado com o AgentCore Identity para autenticação, a Policy no AgentCore para controle de acesso baseado em papéis e logging de aplicação para observabilidade, o rate limiting oferece as ferramentas necessárias para operar um gateway de IA em produção com confiança — garantindo uso justo, protegendo os serviços backend e mantendo a disponibilidade conforme os workloads escalam.

    Para começar, explore os recursos disponíveis: referência completa da API para criar, atualizar e excluir rate limits; exemplos de API de rate limit com operações em lote, listagem e exclusão; cotas gerenciadas pelo serviço e como solicitar aumentos; AgentCore Identity para autenticação JWT; Policy no AgentCore para RBAC; e logging de aplicação para monitoramento em tempo real.

    Fonte

    Configure rate limits for AI traffic on AgentCore gateway (https://aws.amazon.com/blogs/machine-learning/configure-rate-limits-for-ai-traffic-on-agentcore-gateway/)

  • Amazon ECS agora suporta agendamento fracionado de GPU com instâncias EC2 G6f

    O que mudou

    A AWS anunciou que o Serviço de Contêiner Elástico da Amazon (Amazon ECS) passou a suportar agendamento fracionado de GPU com as instâncias Amazon EC2 G6f. Com isso, é possível executar cargas de trabalho em frações de uma GPU NVIDIA L4 Tensor Core — chegando a apenas um oitavo da GPU, com 3 GB de memória dedicada.

    Por que isso importa

    Nem toda carga de trabalho precisa de uma GPU inteira. Inferência de modelos de IA de menor porte, experimentação de modelos, renderização gráfica e outros cenários similares frequentemente não justificam o custo de provisionar uma instância GPU completa. Com o suporte a GPUs fracionadas, equipes podem dimensionar os contêineres de forma mais precisa, reduzindo custos de infraestrutura sem abrir mão do poder de processamento acelerado.

    Como configurar

    A configuração é feita diretamente na definição de tarefa do Amazon ECS. Para solicitar uma fração de GPU, basta definir um dos seguintes valores no campo correspondente da definição de contêiner:

    • GPU=0.125 — um oitavo da GPU
    • GPU=0.25 — um quarto da GPU
    • GPU=0.5 — metade da GPU

    O Amazon ECS se encarrega de posicionar a tarefa em uma instância G6f que atenda à solicitação. O recurso é compatível tanto com o Amazon ECS em EC2 quanto com as ECS Managed Instances.

    Vantagens das ECS Managed Instances

    Para quem opta pelas ECS Managed Instances, a experiência é totalmente gerenciada: o ECS cuida automaticamente do provisionamento, escalabilidade, aplicação de patches e gerenciamento do ciclo de vida das instâncias. Isso permite que as equipes se concentrem nas cargas de trabalho de GPU, sem se preocupar com operações de infraestrutura.

    Além disso, as ECS Managed Instances oferecem funcionalidades específicas para cargas de trabalho aceleradas, como métricas de GPU via Amazon CloudWatch Container Insights e monitoramento automático de saúde capaz de detectar falhas de hardware na GPU e substituir instâncias com problema — minimizando interrupções nas cargas de trabalho.

    Disponibilidade

    O recurso está disponível em todas as regiões da AWS onde as instâncias Amazon EC2 G6f já estão presentes. Para começar, é possível usar o Console de Gerenciamento da AWS, AWS CLI, AWS SDKs, AWS CloudFormation ou outras ferramentas de infraestrutura como código para configurar um provedor de capacidade com instâncias G6f e especificar o valor fracionado de GPU na definição de contêiner da task definition do ECS.

    Para saber mais, consulte a documentação de GPU fracionada do Amazon ECS e a página das instâncias Amazon EC2 G6.

    Fonte

    Amazon ECS now supports fractional GPU scheduling with Amazon EC2 G6f instances (https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-ecs-fractional-gpu/)

  • Automatize certificados com suporte ao protocolo ACME no AWS Certificate Manager

    O problema que forçou essa mudança

    Gerenciar certificados TLS em escala é uma das maiores dores operacionais de times de infraestrutura. E esse cenário está prestes a ficar ainda mais exigente: o Fórum CA/Browser (CA/Browser Forum) determinou uma redução progressiva na validade máxima dos certificados públicos. Em março de 2027, o limite cai para 100 dias. Em março de 2029, chega a apenas 47 dias.

    Para ter uma ideia do impacto: uma organização que gerencia 1.000 certificados precisará lidar com cerca de 30 eventos de renovação por dia quando a janela de 47 dias entrar em vigor. Processos manuais ou fluxos baseados em tickets simplesmente não são capazes de sustentar essa cadência.

    Foi nesse contexto que a AWS anunciou o suporte ao protocolo ACME (Ambiente de Gerenciamento Automatizado de Certificados) no AWS Certificate Manager (ACM). A novidade permite que equipes utilizem clientes ACME já conhecidos — como certbot, cert-manager, acme.sh e win-acme — para automatizar a emissão e renovação de certificados públicos em qualquer infraestrutura.

    O que é o ACME e por que ele importa

    O ACME é um protocolo de código aberto que automatiza a verificação de propriedade de domínio e a emissão de certificados. Ele se tornou o mecanismo padrão para automação de certificados no setor.

    O ACM já oferecia emissão e renovação gerenciadas de certificados para serviços integrados da AWS, como Elastic Load Balancing (ELB), Amazon CloudFront e Amazon API Gateway. Mas muitos clientes também precisam automatizar certificados para infraestruturas próprias — servidores em data centers, clusters Kubernetes, frotas de Internet das Coisas (IoT) e ambientes híbridos. Até agora, esses cenários exigiam recorrer a provedores externos. Com o suporte ACME, o ACM passa a atender também essa demanda, usando o protocolo padrão com endpoints gerenciados pela AWS.

    Como a arquitetura funciona

    O recurso introduz um novo tipo de recurso gerenciado centralmente: o endpoint ACME. Cada endpoint é um recurso AWS com uma URL de diretório ACME exclusiva e controles de acesso baseados no AWS Identity and Access Management (IAM). Os endpoints são criados e gerenciados via API do ACM ou pelo Console de Gerenciamento da AWS.

    A arquitetura se divide em dois planos:

    • Plano de controle: administradores de Infraestrutura de Chave Pública (PKI) usam as APIs do ACM para criar endpoints ACME, pré-aprovar os domínios que cada endpoint pode emitir certificados e gerar credenciais de Vinculação de Conta Externa (EAB).
    • Plano de dados: clientes ACME se registram em um endpoint usando credenciais EAB e solicitam certificados para domínios que o administrador já validou. Assim, os proprietários de aplicações não precisam de credenciais DNS para obter um certificado.

    As credenciais EAB controlam o acesso dos clientes aos endpoints. Cada EAB está vinculado a uma função (role) do IAM que define quais operações o cliente ACME pode realizar. Um cliente autorizado para um endpoint de desenvolvimento, por exemplo, não consegue obter certificados do endpoint de produção — o que cria fronteiras de segurança claras entre ambientes.

    Os certificados emitidos por ACME são automaticamente registrados no inventário do ACM, aparecendo junto com certificados criados pelas APIs RequestCertificate e ImportCertificate. O Amazon EventBridge e o AWS CloudTrail fornecem alertas de expiração e logs de auditoria.

    Imagem original — fonte: Aws

    Como começar: passo a passo

    A seguir, os passos para criar o primeiro certificado via ACME no ACM. Os exemplos utilizam a Interface de Linha de Comando da AWS (AWS CLI). Há também um post equivalente via console.

    Pré-requisitos

    • Uma conta AWS com permissões para criar e gerenciar recursos do ACM
    • Um cliente ACME instalado na sua infraestrutura (certbot, cert-manager, acme.sh, entre outros)
    • AWS CLI instalado
    • Zona hospedada no Amazon Route 53 ou capacidade de criar um registro CNAME no seu provedor de DNS

    Passo 1: Criar um endpoint ACME

    O endpoint fornece a URL que os clientes ACME utilizarão para solicitar certificados.

    aws acm create-acme-endpoint \
      --authorization-behavior PRE_APPROVED \
      --certificate-authority '{"PublicCertificateAuthority":{"AllowedKeyAlgorithms":["EC_prime256v1"]}}'

    Anote o Nome de Recurso Amazon (ARN) do endpoint retornado na resposta:

    {"AcmeEndpointArn": "arn:aws:acm:us-east-1:123456789012:acme-endpoint/11111111-2222-3333-4444-555555555555"}

    Em seguida, recupere a URL do endpoint:

    aws acm describe-acme-endpoint \
      --acme-endpoint-arn arn:aws:acm:us-east-1:123456789012:acme-endpoint/11111111-2222-3333-4444-555555555555

    Salve o valor de EndpointUrl retornado:

    {
      "AcmeEndpoint": {
        "AcmeEndpointArn": "arn:aws:acm:us-east-1:123456789012:acme-endpoint/11111111-2222-3333-4444-555555555555",
        "EndpointUrl": "https://acm-acme-enroll.<region>.api.aws/6666666-7777-8888-9999-000000000000/directory",
        "Status": "ACTIVE",
        "AuthorizationBehavior": "PRE_APPROVED",
        "Contact": "REQUIRED",
        "CertificateAuthority": {
          "PublicCertificateAuthority": {
            "AllowedKeyAlgorithms": [
              "EC_prime256v1"
            ]
          }
        },
        "CreatedAt": "2026-07-14T18:23:58.876000-04:00",
        "UpdatedAt": "2026-07-14T18:23:58.876000-04:00"
      }
    }

    Passo 2: Pré-aprovar um domínio

    Antes que os clientes ACME possam solicitar certificados, o administrador valida o domínio via DNS uma única vez, no nível do endpoint. O parâmetro DomainScope controla exatamente quais padrões de certificado são permitidos:

    • ExactDomain habilitado: restringe ao nome exato do domínio
    • Subdomains habilitado: permite nomes como api.example.com
    • Wildcards habilitado: permite *.example.com

    Para um endpoint de produção, a recomendação é habilitar apenas ExactDomain e Subdomains, deixando Wildcards desabilitado para uma postura mais restritiva.

    aws acm create-acme-domain-validation \
      --acme-endpoint-arn arn:aws:acm:us-east-1:123456789012:acme-endpoint/11111111-2222-3333-4444-555555555555 \
      --domain-name example.com \
      --prevalidation-options '{"DnsPrevalidation":{"DomainScope":{"ExactDomain":"ENABLED","Subdomains":"ENABLED","Wildcards":"DISABLED"},"HostedZoneId":"Z1234567890ABC"}}'

    Se o domínio estiver hospedado no Route 53, o parâmetro HostedZoneId permite que o ACM crie o registro CNAME automaticamente. Para outros provedores de DNS, omita esse parâmetro e crie o registro manualmente. A validação normalmente é concluída em poucos segundos após o registro estar no lugar.

    Passo 3: Gerar credenciais EAB

    As credenciais EAB autenticam os clientes ACME no endpoint. O ideal é gerar um conjunto exclusivo de credenciais para cada cliente ou ambiente.

    aws acm create-acme-external-account-binding \
      --acme-endpoint-arn arn:aws:acm:region:111122223333:acme-endpoint/00000000-0000-0000-0000-000000000000 \
      --role-arn arn:aws:iam::111122223333:role/AcmeIssuanceRole \
      --expiration '{"Value": 7, "Type": "DAYS"}'

    Para recuperar as credenciais geradas:

    aws acm get-acme-external-account-binding-credentials \
      --acme-external-account-binding-arn arn:aws:acm:region:111122223333:acme-endpoint/00000000-0000-0000-0000-000000000000/acme-external-account-binding/22222222-2222-2222-2222-222222222222

    Salve os valores de KeyId e MacKey para a próxima etapa.

    {
      "KeyId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "MacKey": "xxxxxxxx-xxxxxxxxxx-xxxxxxxxxxxxxxx"
    }

    Passo 4: Configurar o cliente ACME

    Com a URL do endpoint e as credenciais EAB em mãos, configure o cliente ACME de sua preferência. Exemplos para dois clientes populares:

    acme.sh:

    acme.sh --issue --server https://acm-acme-enroll.us-east-1.api.aws/123457-1234-1234-123456789012/directory \
      --eab-kid <KeyId> --eab-hmac-key <MacKey> \
      --email <EMAIL> \
      -d <DOMAIN> \
      --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please

    Certbot:

    certbot certonly --standalone --non-interactive --agree-tos \
      --email <EMAIL> \
      --server https://acm-acme-enroll.us-east-1.api.aws/1234567-1234-1234-123456789012/directory \
      --eab-kid <KeyId> \
      --eab-hmac-key <MacKey> \
      -d <DOMAIN>

    Após o registro inicial, o cliente ACME passa a gerenciar as renovações automaticamente.

    Controles empresariais e boas práticas

    Validação de domínio granular

    Para cada domínio validado, é possível definir exatamente quais padrões de certificado são permitidos — ExactDomain, Subdomains ou Wildcards. Essa aplicação acontece no nível do endpoint, antes que as requisições cheguem à autoridade certificadora do ACM. Múltiplos domínios podem ser validados em um único endpoint, cada um com seu próprio escopo.

    Visibilidade centralizada de certificados

    Todos os certificados emitidos pelos endpoints ACME são registrados no ACM. O comando aws acm list-certificates exibe o inventário completo. As operações de gerenciamento de endpoints são autorizadas via IAM e registradas no CloudTrail, permitindo auditoria detalhada de quem criou endpoints, gerou credenciais EAB e gerenciou restrições de domínio.

    Segmentação de endpoints por ambiente

    A recomendação da AWS é segmentar endpoints por fronteiras organizacionais ou de ambiente. Um ponto de partida razoável é criar um endpoint por ambiente (dev, staging e produção) dentro de uma unidade de negócio, expandindo para endpoints por unidade de negócio apenas quando requisitos de conformidade ou organizacionais exigirem. Credenciais comprometidas em um ambiente não têm caminho para certificados de outro.

    Gerenciamento seguro de credenciais EAB

    Qualquer pessoa que possua um KeyId e MacKey válidos pode obter certificados para qualquer domínio pré-aprovado no endpoint — portanto, essas credenciais merecem o mesmo cuidado dado a chaves de acesso. A AWS recomenda evitar codificar o MacKey diretamente no código, usando um cofre de segredos como o AWS Secrets Manager. Também é importante criar uma função (role) IAM por EAB, em vez de compartilhar uma única role entre todos os bindings, e configurar o tempo de expiração do EAB de acordo com o perfil de risco da organização.

    No CloudTrail, vale monitorar separadamente as chamadas CreateAcmeExternalAccountBinding e GetAcmeExternalAccountBindingCredentials — alertar sobre eventos de recuperação das credenciais é um sinal mais forte de distribuição real do que apenas a criação do binding.

    Automação do ciclo de vida dos EABs

    Para escalar com múltiplos endpoints, algumas práticas ajudam a reduzir o esforço operacional:

    • Nomeie cada EAB e sua role IAM vinculada com o nome do cliente ao qual pertence (time, aplicação, ambiente)
    • Armazene o KeyId e o MacKey de cada cliente em um caminho de segredos específico (por exemplo, um caminho no Secrets Manager por time e ambiente)
    • No Kubernetes, use um ClusterIssuer ou Issuer com escopo de namespace por EAB, em vez de um issuer compartilhado entre times
    • Para infraestrutura efêmera (agentes de build, frotas com autoescalamento), provisione credenciais EAB como parte do pipeline de Integração e Entrega Contínuas (CI/CD), para que o ciclo de vida das credenciais acompanhe o da infraestrutura

    Monitoramento contínuo

    Com certificados de 47 dias de validade, uma falha silenciosa de renovação deixa muito menos tempo de reação do que as janelas longas às quais os times estavam acostumados. Por isso, a AWS recomenda configurar alarmes para falhas de emissão — não apenas para sucessos — e testar a automação de renovação em um endpoint de não-produção antes de depender dela em produção.

    Disponibilidade e preços

    O suporte ao ACME no AWS Certificate Manager está disponível hoje em todas as regiões comerciais da AWS. A disponibilidade para AWS GovCloud (EUA), Regiões da China e AWS European Sovereign Cloud será anunciada em momento posterior. Consulte a página de preços do ACM para informações sobre os valores cobrados pelo recurso ACME.

    Conclusão

    A redução progressiva na validade dos certificados é um problema que não tem solução sem automação. O suporte ao ACME no ACM oferece essa automação por meio de um protocolo e ferramentas já padronizados no mercado, mantendo a visibilidade e os controles de governança que os times de segurança esperam do ACM. Para começar, consulte a documentação do AWS Certificate Manager ou siga o guia de introdução.

    Fonte

    Automate certificates with ACME support in AWS Certificate Manager (https://aws.amazon.com/blogs/security/automate-certificates-with-acme-support-in-aws-certificate-manager/)

  • Instâncias Amazon EC2 G7 chegam à Região AWS Europa (Espanha)

    Expansão das instâncias G7 para a Europa

    A AWS anunciou a disponibilidade das instâncias Amazon EC2 G7 na região Europa (Espanha). Equipadas com GPUs NVIDIA RTX PRO 4500 Blackwell Server Edition, essas instâncias chegam com ganhos expressivos de desempenho em relação à geração anterior — até 4,6x mais performance em inferência de Inteligência Artificial (IA) e até 2,1x mais desempenho gráfico em comparação com as instâncias G6.

    Para que servem as instâncias G7?

    As instâncias G7 são projetadas para cobrir uma ampla gama de cargas de trabalho modernas que exigem poder computacional de GPU. Entre os principais casos de uso destacados pela AWS estão:

    • Inferência de modelos de IA: tradução de idiomas, análise de vídeo e imagem, e reconhecimento de fala.
    • Workloads gráficos: criação e renderização de gráficos em tempo real com qualidade cinematográfica, além de streaming de jogos.
    • Computação espacial e transcodificação de vídeo.
    • Análise de dados acelerada por GPU: sistemas de recomendação, inferência com Geração Aumentada por Recuperação (RAG) e pipelines de dados em tempo real.

    Especificações técnicas

    Do ponto de vista de hardware, as instâncias G7 entregam uma configuração robusta:

    • Até 8 GPUs NVIDIA RTX PRO 4500 Blackwell Server Edition, com 32 GB de memória por GPU.
    • Processadores Intel Xeon 6 customizados.
    • Suporte a até 192 CPUs virtuais (vCPUs).
    • Até 700 Gbps de largura de banda de rede com Adaptador de Malha Elástica (EFA — Elastic Fabric Adapter).
    • Até 768 GiB de memória de sistema.
    • Até 7,6 TB de armazenamento local NVMe SSD.

    Disponibilidade e formas de aquisição

    As instâncias EC2 G7 já estão disponíveis em quatro regiões AWS:

    • Leste dos EUA (Norte da Virgínia e Ohio)
    • Oeste dos EUA (Oregon)
    • Europa (Espanha)

    É possível adquiri-las como Instâncias On-Demand, Instâncias Spot ou por meio de Planos de Economia (Savings Plans). Para começar, a AWS indica o Console de Gerenciamento AWS, a Interface de Linha de Comando AWS (CLI) ou os SDKs da AWS. Para mais detalhes técnicos, acesse a página oficial das instâncias G7.

    Fonte

    Amazon EC2 G7 instances are now available in the AWS Europe (Spain) Region (https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-ec2-g7-available-spain)

  • AWS firma parceria com Anthropic e OpenAI para integrar o AWS Continuum nos fluxos de trabalho de desenvolvedores

    Segurança de código no ritmo das máquinas

    Os modelos de IA estão evoluindo em ritmo acelerado. Cada nova geração traz janelas de contexto maiores, raciocínio mais sofisticado e custos menores por token. Nesse cenário, a AWS entende que a segurança mais eficaz virá de ferramentas que combinem os modelos mais avançados com um conhecimento profundo do ambiente específico de cada cliente.

    É com essa premissa que a AWS anunciou a AWS Continuum para vulnerabilidades de código (Preview) — e agora vai além, revelando parcerias com a Anthropic e a OpenAI para levar o Continuum diretamente para dentro dos ambientes onde o código está sendo escrito: Claude Code, OpenAI Codex e Kiro.

    O desafio por trás da evolução dos modelos

    Os modelos de fronteira mais recentes já conseguem identificar vulnerabilidades e rastrear caminhos de ataque em múltiplas etapas — algo que levaria semanas para uma equipe de segurança humana fazer manualmente. Isso representa um avanço real na detecção. Mas cria um novo problema: mais achados, mais complexidade e a necessidade de determinar quais realmente importam para aquele ambiente específico.

    O próximo desafio é construir a orquestração correta para transformar esses modelos em uma interface única que vá da detecção até a correção. Foi exatamente isso que a AWS se propôs a fazer ao criar o Continuum: reunir diferentes modelos e usar o mais eficaz para cada etapa do processo.

    A AWS também participa do Frontier Model Forum, um consórcio da indústria que desenvolve padrões de segurança compartilhados, métodos de avaliação e benchmarks para garantir que os modelos possam ser avaliados de forma eficaz. Além disso, a empresa trabalha com os provedores de modelos em benchmarks de desempenho de segurança para assegurar que o melhor modelo seja usado para cada tarefa dentro do Continuum e de outros produtos de segurança da AWS.

    O conceito de “harness”: o motor e tudo ao redor

    Para entender o Continuum, é importante compreender o que a AWS chama de harness — a camada de orquestração que envolve um modelo para conectá-lo a ferramentas, guardrails, memória e fluxos de trabalho, transformando-o em resultados concretos. A analogia usada pela própria AWS é direta: o modelo é o motor; o harness é tudo ao redor. Você precisa dos dois para ter um carro de alto desempenho.

    Esses harnesses estão ficando cada vez mais complexos. As equipes estão costurando múltiplos modelos, agentes que chamam outros agentes e fluxos de trabalho dinâmicos — tudo isso em um cenário de mudanças constantes. Esse nível de complexidade faz com que muitas organizações criem infraestruturas paralelas e não oficiais para gerenciar as camadas de integração entre modelos e ferramentas. Cada vez que o ecossistema muda, os controles de segurança e governança potencialmente quebram, forçando as equipes a revisitá-los.

    A AWS posiciona o gerenciamento dessa complexidade como um peso que ela mesma deve resolver. A empresa trata o harness como infraestrutura, aplicando o mesmo rigor usado em identidade, descoberta, aplicação de políticas, observabilidade e conformidade na infraestrutura central da AWS.

    Como o AWS Continuum funciona na prática

    O AWS Continuum para vulnerabilidades de código descobre vulnerabilidades, prioriza-as dentro do contexto do negócio do cliente, valida-as em um ambiente isolado (sandbox) e oferece correção em velocidade de máquina.

    Por baixo dos panos, o Continuum opera com uma arquitetura de loop de equipe de agentes — um harness sofisticado que orquestra tudo: seleção do modelo adequado, conexão com o ambiente do cliente e entrega de código seguro validado em contexto. O desenvolvedor não precisa se preocupar com como a orquestração funciona ou o que mudou na última versão.

    A integração com Anthropic e OpenAI

    A AWS está trabalhando com a Anthropic e a OpenAI para trazer o Continuum para os ambientes de desenvolvimento onde o código está sendo escrito. O funcionamento será o seguinte:

    • Dentro dos ambientes Claude Code, Codex e Kiro, varreduras de vulnerabilidades sob demanda identificam possíveis problemas e enviam os achados ao Continuum.
    • O Continuum prioriza esses achados dentro do contexto do ambiente AWS do cliente — considerando configurações, políticas do Gerenciamento de Identidade e Acesso da AWS (IAM), topologia de rede e superfícies de exposição.
    • Em seguida, valida os achados em um sandbox e retorna inteligência priorizada e contextualizada de volta ao assistente de código, que ajusta suas recomendações de acordo.

    Isso colapsa o que era tradicionalmente um processo de múltiplas etapas e múltiplas equipes — escrever, escanear, triar, priorizar, corrigir, reescanear — em um único resultado: a própria sugestão de código.

    Dois modos, um objetivo

    A solução opera em dois modos complementares:

    • Para código existente: use o Continuum para vulnerabilidades de código da AWS para descobrir, priorizar, validar e corrigir em todo o ambiente.
    • Para código novo (greenfield): use o plugin do Continuum dentro do Codex, Claude Code ou Kiro para receber sugestões com validação de segurança diretamente no ambiente de desenvolvimento.

    Parceiros de design que já testaram a solução relatam resultados concretos. Mike Johnson, CISO da Rivian, destacou que o AWS Continuum conecta o código-fonte ao conhecimento corporativo, permitindo que as equipes identifiquem com precisão vulnerabilidades de segurança e verifiquem se os problemas sinalizados são realmente relevantes — reduzindo o tempo até a correção de vulnerabilidades críticas.

    Disponibilidade

    O AWS Continuum para vulnerabilidades de código já está disponível em preview. É possível solicitar acesso diretamente pelo formulário de interesse do AWS Continuum. A integração do Continuum com os fluxos de trabalho do Claude Code, Codex e Kiro está prevista para breve.

    Fonte

    AWS partners with Anthropic and OpenAI to bring AWS Continuum into developer workflows (https://aws.amazon.com/blogs/security/aws-partners-with-anthropic-and-openai-to-bring-aws-continuum-into-developer-workflows/)

  • Execute agentes de IA em produção no n8n com o Amazon Bedrock AgentCore Harness

    Do fluxo simples ao agente de produção

    Quem já usou o n8n para automatizar fluxos de trabalho sabe que o nó de AI Agent embutido resolve bem o caso mais básico: uma chamada a um modelo de linguagem dentro de um workflow. Mas um agente de produção exige muito mais do que isso. Ele precisa de memória que sobreviva entre execuções, ferramentas reais como navegador e sandbox de código, e capacidade de lidar com tarefas mais longas e complexas. Montar essa estrutura do zero é exatamente onde a maioria das equipes perde tempo.

    É nesse contexto que a AWS posiciona o Amazon Bedrock AgentCore — uma plataforma para construir, conectar e otimizar agentes em escala, compatível com qualquer framework ou modelo. O AgentCore Harness, uma das capacidades do Amazon Bedrock AgentCore, passou a ser disponibilizado em disponibilidade geral (GA) e entrega exatamente essa camada de infraestrutura gerenciada. Um novo nó comunitário de código aberto traz essa capacidade para o editor visual do n8n.

    O nó, publicado como @aws/n8n-nodes-agentcore, não prende o usuário a um único provedor. Ele funciona com Amazon Bedrock, OpenAI, Google Gemini e provedores suportados pelo LiteLLM — e é possível até trocar de provedor entre turnos de uma mesma conversa. O harness é construído sobre o Strands Agents, o framework de agentes de código aberto da AWS, e o nó é licenciado sob MIT.

    O que o harness faz por você

    Um agente não é apenas um modelo. O modelo raciocina, mas é o harness que executa o trabalho ao redor: ele roda o loop de orquestração, chama ferramentas, gerencia a janela de contexto, mantém o estado entre turnos, se recupera de falhas e isola cada sessão. Construir essa camada é onde a maioria das equipes concentra esforço.

    Com o AgentCore Harness, você define o agente em configuração — modelo, ferramentas, habilidades e instruções — e o AgentCore monta e executa o loop por você. Cada sessão roda em um ambiente isolado com sistema de arquivos próprio, memória entre sessões e navegação web. Quando a configuração não for suficiente, é possível exportar o harness para código Strands e continuar rodando no mesmo sistema.

    O nó comunitário expõe o harness completo no editor do n8n com uma única operação controlada pelo campo Harness ARN: deixe-o em branco e o nó cria o agente na primeira execução, reutiliza nas seguintes e atualiza quando a configuração muda. Cole um ARN existente e o nó invoca diretamente um agente criado fora do n8n. O padrão de credenciais é o mesmo já usado pelos nós de AWS Lambda e Amazon S3 no n8n.

    Pré-requisitos

    Antes de começar, é necessário ter:

    • Uma instância do n8n (self-hosted ou n8n Cloud). Consulte a documentação de deploy do n8n para escolher a opção adequada.
    • O nó instalado. Como nó comunitário verificado, basta pesquisar por Amazon Bedrock AgentCore no painel de nós do n8n e selecioná-lo. Também é possível instalar via Settings > Community Nodes informando @aws/n8n-nodes-agentcore. O guia usa a versão 0.3 do nó.
    • Uma conta AWS com acesso ao AgentCore Harness em uma região AWS suportada.
    • Credenciais AWS para o chamador, com as permissões de caller do harness, mais uma função de execução do AWS Identity and Access Management (IAM) separada que o harness assume em tempo de execução. As políticas de menor privilégio estão na documentação de segurança do AgentCore Harness e o README do nó mapeia cada funcionalidade às permissões necessárias.

    Importante: sempre que possível, use credenciais temporárias do AWS IAM Identity Center ou do AWS Security Token Service (AWS STS) e siga o princípio do menor privilégio ao configurar permissões IAM. Não armazene credenciais em controle de versão.

    Sobre custos: o AgentCore Harness, o armazenamento de memória gerenciada provisionado e, se utilizado, os endpoints de VPC são recursos faturáveis na AWS. Consulte a documentação do AgentCore para detalhes de preço e lembre-se de remover os recursos criados ao final.

    Configurando a credencial

    A credencial AWS é configurada uma única vez, da mesma forma que outros nós AWS no n8n. Em Credentials, crie uma nova credencial do tipo Amazon Bedrock AgentCore API. Informe o Access Key ID, o Secret Access Key e, se usar credenciais temporárias, o Session Token. Selecione a região, informe o ARN da função de execução que o harness assumirá em runtime e teste a conexão antes de salvar.

    Construindo o primeiro agente com memória persistente

    O primeiro cenário demonstrado pela AWS é um agente que lembra detalhes ao longo de turnos de conversa. A memória é ativada por padrão — o nó provisiona automaticamente um armazenamento de memória gerenciada sem configuração adicional.

    O fluxo básico é: adicionar um trigger manual, conectar o nó do Amazon Bedrock AgentCore com a credencial configurada, deixar o campo Harness ARN em branco, definir um nome para o agente (por exemplo, travel_concierge), escolher o provedor e o modelo (como um modelo Claude via Amazon Bedrock), escrever um System Prompt, definir um Session ID e inserir o prompt do primeiro turno.

    A primeira execução leva cerca de 30 a 60 segundos enquanto a AWS provisiona o agente. A saída inclui a resposta do agente, o uso de tokens e um resumo do que foi provisionado, incluindo o ARN do armazenamento de memória criado automaticamente. Nos turnos seguintes, mantendo o mesmo Session ID, o agente recupera o contexto anterior — o contador de tokens de entrada sobe porque o nó carrega a conversa prévia antes de o agente raciocinar. Deixar o Session ID em branco inicia uma nova conversa a cada execução.

    Isolando memória por usuário com Actor ID

    Quando um único agente atende múltiplas pessoas, é possível manter o histórico de cada uma separado usando o campo Actor ID, disponível nas opções adicionais do nó. A hierarquia de escopo é: o agente guarda a configuração compartilhada, o Actor ID isola a memória de um usuário de outro, e o Session ID isola conversas individuais dentro de um mesmo ator. Um ator diferente com o mesmo Session ID ainda terá sua própria memória separada.

    Na prática: configure um agente como team_assistant com memória gerenciada, defina o Actor ID como um valor por usuário (por exemplo, user-alice) e um Session ID para esse usuário. No primeiro turno, armazene uma informação. No segundo, recupere-a com o mesmo actor e session. Trocando o Actor ID, o agente não terá acesso ao histórico do usuário anterior.

    Adicionando ferramentas: interpretador de código em sandbox

    Agentes se tornam muito mais capazes quando podem usar ferramentas. O segundo cenário demonstrado é um agente com acesso a um interpretador de código que executa scripts em um ambiente isolado.

    Configure um agente como data_analyst com um modelo Claude. No System Prompt, instrua o agente a escrever e executar código para responder e reportar o resultado. Ative Add Tools, adicione uma ferramenta do tipo AgentCore Code Interpreter e insira um prompt que exija computação — por exemplo, gerar 500 notas aleatórias entre 0 e 100 e calcular média, mediana e desvio padrão.

    O agente escreve e executa o código no sandbox e retorna os resultados computados, em vez de estimá-los. O resumo do harness na saída confirma uma ferramenta configurada. Da mesma forma, é possível adicionar outras ferramentas: navegador em nuvem, AgentCore Gateway e servidores MCP remotos.

    Imagem original — fonte: Aws

    Dando habilidades ao agente com Skills

    Skills são pacotes de instruções e scripts que fornecem conhecimento de domínio ao agente sob demanda. Elas podem ser carregadas do catálogo curado da AWS, de um repositório Git, do Amazon S3 ou de um caminho no sistema de arquivos — e o harness as carrega apenas quando a tarefa exige.

    Configure um agente como aws_architect com um modelo Claude. Ative Add Skills, adicione uma skill e defina a fonte. Para o catálogo curado, escolha AWS Skills e informe um padrão glob como core-skills/*. É possível adicionar mais skills de outras fontes. Insira um prompt que se beneficie da skill, como solicitar um esboço de pipeline serverless para upload de imagens na AWS. O agente aplica as habilidades carregadas para produzir orientações, e o resumo do harness mostra o número de skills configuradas.

    Executando o agente dentro da sua VPC

    Para agentes que precisam de acesso a redes privadas, o harness pode ser executado dentro de uma Nuvem Privada Virtual (VPC). A configuração de rede é feita na credencial, então todos os agentes provisionados com aquela credencial rodarão de forma privada.

    Edite a credencial Amazon Bedrock AgentCore API, defina o Network Mode como VPC, informe os IDs de sub-redes e grupos de segurança e salve. As sub-redes não precisam de acesso à internet: o harness busca sua imagem de contêiner gerenciada em um repositório privado do Amazon ECR na mesma região, então são necessários endpoints de VPC para o Amazon ECR e o Amazon S3 — não um NAT gateway. Consulte a documentação de segurança do AgentCore Harness para os endpoints necessários e as permissões da função de execução.

    Em um workflow, use um agente como private_vpc_agent com a credencial configurada para VPC. A saída do nó confirmará que o modo de rede é VPC no resumo do harness.

    Limpeza dos recursos

    Cada agente criado é um recurso de harness na conta AWS e pode provisionar um armazenamento de memória gerenciada. Para evitar cobranças contínuas, remova os agentes que não forem mais necessários.

    Liste os harnesses com a Interface de Linha de Comando da AWS (AWS CLI):

    aws bedrock-agentcore-control list-harnesses --region us-west-2

    Exclua os criados durante o guia:

    aws bedrock-agentcore-control delete-harness --harness-id <harness-id> --region us-west-2

    Se você habilitou VPC, remova também os endpoints de interface criados, pois eles geram cobranças enquanto existem. Consulte a documentação do AgentCore para detalhes de preço.

    O que explorar a seguir

    O nó já suporta um conjunto mais amplo de funcionalidades do AgentCore Harness. Confira o que é possível explorar com a mesma abordagem de configuração apresentada acima:

    • Troca de provedor de modelo mid-session: use OpenAI, Google Gemini ou provedores LiteLLM ao lado do Amazon Bedrock e troque entre turnos da mesma sessão sem perder contexto. Provedores não-Bedrock usam uma chave de API armazenada no AgentCore Identity.
    • Mais ferramentas: adicione navegador em nuvem, AgentCore Gateway com autenticação OAuth de saída opcional e servidores MCP remotos junto ao interpretador de código.
    • Funções inline: permita que o agente chame de volta o workflow do n8n para uma etapa de revisão humana (human-in-the-loop) e retorne o resultado ao agente.
    • Contêineres customizados: traga sua própria imagem de contêiner Linux/arm64 para o agente rodar com suas próprias dependências.
    • Montagem de sistemas de arquivos: use armazenamento de sessão gerenciada ou monte Amazon EFS ou Amazon S3 para dados que sobrevivam a uma sessão.
    • Invocação autenticada com OAuth: invoque agentes protegidos por um autorizador JSON Web Token (JWT) de entrada com um token do seu provedor de identidade.
    • Versões e endpoints: cada mudança de configuração gera uma versão imutável, e endpoints nomeados permitem fixar staging e produção em versões específicas.

    A pasta examples no repositório GitHub inclui workflows importáveis para muitos desses cenários. Para casos de uso completos, a pasta examples/templates traz automações mais completas mostrando o agente funcionando junto a outros nós do n8n.

    Conclusão

    O AgentCore Harness entrega a camada de infraestrutura que faltava para quem quer rodar agentes de IA em produção a partir do editor visual do n8n. Com memória persistente, isolamento por usuário, ferramentas como interpretador de código, habilidades de domínio e suporte a execução privada em VPC — tudo configurável sem escrever código de infraestrutura — a AWS reduz significativamente a barreira de entrada para agentes robustos.

    O nó está disponível como nó comunitário verificado no n8n. Para começar, adicione o nó Amazon Bedrock AgentCore pelo painel de nós (ou instale @aws/n8n-nodes-agentcore via Settings > Community Nodes), importe um workflow de exemplo e construa seu primeiro agente. O nó é de código aberto sob licença MIT, construído sobre o framework Strands Agents, e contribuições são bem-vindas no repositório GitHub. Para aprofundar no funcionamento da capacidade subjacente, consulte a documentação do AgentCore.

    Fonte

    Run production AI agents in n8n with Amazon Bedrock AgentCore harness (https://aws.amazon.com/blogs/machine-learning/run-production-ai-agents-in-n8n-with-amazon-bedrock-agentcore-harness/)

  • Amazon DynamoDB agora suporta busca vetorial em tempo real

    Busca vetorial nativa chega ao DynamoDB em disponibilidade geral

    A AWS anunciou, em agosto de 2026, a disponibilidade geral da busca vetorial nativa no Amazon DynamoDB. Trata-se de um novo recurso que permite indexar e pesquisar vetores em tempo real, diretamente dentro do banco de dados NoSQL já consolidado no mercado.

    O problema que essa novidade resolve

    À medida que conjuntos de dados vetoriais crescem para bilhões ou até trilhões de entradas, a busca vetorial em escala enfrenta um dilema clássico: ou você aceita maior latência, ou abre mão de precisão e throughput. Até então, escalar buscas vetoriais sem comprometer a qualidade dos resultados era um desafio significativo de infraestrutura.

    Com essa atualização, o DynamoDB passa a oferecer busca vetorial nativa com latência de milissegundos de um único dígito, mantendo 99%+ de recall — e tudo isso projetado para funcionar em qualquer escala, inclusive com trilhões de vetores.

    Como funciona na prática

    A proposta é simples e integrada ao modelo já conhecido do DynamoDB. Os vetores são armazenados junto com os demais atributos do item, e podem ser gerados por qualquer modelo de sua escolha — incluindo os modelos disponíveis no Amazon Bedrock. A partir daí, o fluxo envolve:

    • Criação de um índice vetorial;
    • Execução de buscas por vizinhos mais próximos aproximados (Approximate Nearest Neighbor — ANN);
    • Escolha da chave de partição do índice vetorial para escalar a solução;
    • Filtragem por atributos para refinar os resultados.

    E o modelo serverless segue intacto: sem gerenciamento de infraestrutura, sem janelas de manutenção, sem downtime, e com cobrança apenas pelo que for utilizado.

    Casos de uso habilitados pelo recurso

    O DynamoDB já era utilizado para armazenar memória de agentes de IA. Com a busca vetorial, agora é possível adicionar recuperação semântica sobre essa memória — o que abre caminho para uma série de aplicações práticas:

    • Grounding de agentes de IA com recuperação semântica;
    • Busca por similaridade de produtos em e-commerce;
    • Publicidade personalizada;
    • Geração Aumentada por Recuperação (RAG — Retrieval Augmented Generation);
    • Sistemas de recomendação com desempenho previsível.

    Disponibilidade

    A busca vetorial no DynamoDB já está disponível em todas as regiões comerciais da AWS e também nas regiões AWS GovCloud (EUA), sem necessidade de configuração adicional de infraestrutura.

    Para se aprofundar no tema, a AWS disponibiliza o AWS News Blog, a página do produto Amazon DynamoDB e o Guia do Desenvolvedor do Amazon DynamoDB.

    Fonte

    Amazon DynamoDB now supports real-time vector search (https://aws.amazon.com/about-aws/whats-new/2026/08/amazon-dynamodb-vector-search)

  • Como a AWS construiu uma ponte MCP para conectar agentes de IA na nuvem a ferramentas locais

    O problema: agente na nuvem, arquivos no laptop

    Existe um desafio bastante concreto no uso de agentes de IA hospedados na nuvem: e quando as ferramentas que o agente precisa usar estão na máquina local do usuário? Planilhas Excel, repositórios Git, arquivos de configuração — tudo isso vive no computador de quem trabalha, não em um servidor remoto.

    Foi exatamente esse problema que a equipe da AWS se propôs a resolver. Em um post técnico detalhado, a AWS descreve como construiu uma ponte entre um agente hospedado no Amazon Bedrock AgentCore e servidores MCP (Model Context Protocol) rodando localmente na máquina do usuário final.

    O resultado prático? Um assistente de IA para finanças que, segundo a AWS, acumulou mais de 41.000 conversas em um ano desde o lançamento interno — lendo planilhas diretamente do computador do analista, sem expor credenciais ao navegador.

    O que é o MCP e qual é a lacuna que a ponte resolve

    O Model Context Protocol (MCP) é um padrão aberto lançado pela Anthropic em novembro de 2024 para padronizar como modelos de IA se conectam a dados externos e ferramentas. Ele segue uma arquitetura cliente-servidor: o host MCP (uma aplicação de IA, como o Amazon Quick ou o Claude Code) estabelece conexões com um ou mais servidores MCP.

    O protocolo suporta dois mecanismos de transporte: stdio (para comunicação entre processos na mesma máquina) e HTTP com streaming (para comunicação entre cliente remoto e servidor remoto). O que faltava era justamente o cenário inverso: servidor MCP local, cliente MCP remoto. A ponte MCP da AWS resolve exatamente essa lacuna.

    Esse padrão é o mesmo que alimenta produtos como o Claude Cowork — um agente na nuvem chamando ferramentas locais via MCP — mas, neste caso, totalmente auto-hospedado na AWS com modelo e servidores de ferramentas próprios.

    Arquitetura da solução: quatro componentes em conjunto

    A arquitetura descrita pela AWS tem quatro componentes principais que trabalham em conjunto:

    • AgentCore Runtime: hospeda o agente Strands na nuvem. O agente atua como cliente MCP, emitindo requisições de descoberta e invocação de ferramentas.
    • Extensão de navegador: fornece a interface de chat e age como retransmissora bidirecional, encaminhando mensagens MCP entre o AgentCore Runtime (via WebSocket) e a MCP Bridge (via native messaging).
    • MCP Bridge: um proxy FastMCP rodando na máquina local do usuário, iniciado pelo navegador através do registro de host de native messaging. Ele traduz entre o formato de envelope do native messaging e o JSON-RPC bruto do MCP.
    • Servidor MCP: um servidor MCP padrão rodando localmente. Como a bridge está co-localizada, a comunicação usa transporte stdio.

    O fluxo completo funciona assim: o usuário envia uma mensagem pela extensão, que se conecta ao AgentCore Runtime via WebSocket pré-assinado. Quando o agente Strands precisa chamar uma ferramenta, ele envia uma requisição JSON-RPC MCP encapsulada em um envelope JSON de volta pela WebSocket para a extensão. A extensão repassa a mensagem para a bridge via native messaging. A bridge desencapsula o envelope, extrai o conteúdo JSON-RPC e o encaminha para o servidor MCP via stdio. A resposta percorre o caminho inverso.

    A tabela abaixo mostra como uma única chamada de ferramenta percorre os saltos entre o agente e o servidor MCP, com cada salto removendo uma camada de encapsulamento:

    Salto 1 — Agente → Extensão (WebSocket):
    {"type": "mcpbridge", "content": {"type": "mcp", "payload": ""}, "session_id": "session_123"}
    
    Salto 2 — Extensão → Bridge (Native Messaging):
    {"type": "mcp", "payload": ""}
    
    Salto 3 — Bridge → Servidor MCP (stdio):
    {"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "read_sheet", "arguments": {"file_path": "budget.xlsx"}}}

    Como o agente Strands funciona no AgentCore Runtime

    Conexão WebSocket

    A extensão de navegador se conecta ao AgentCore Runtime via uma URL WebSocket pré-assinada. Na inicialização, o painel lateral envia uma requisição de pré-assinatura pelo script de background para a bridge nativa, que usa as credenciais AWS locais do usuário e o SDK do bedrock-agentcore para gerar uma URL wss:// assinada com SigV4, com escopo para o ARN do runtime implantado (válida por 5 minutos). Nenhuma credencial sai da máquina do usuário ou entra no navegador.

    Inicialização MCP e descoberta de ferramentas

    Antes de descobrir ferramentas, o agente realiza o handshake de inicialização MCP padrão: envia uma requisição initialize com a versão do protocolo, aguarda a resposta de capacidades do servidor e envia a notificação notifications/initialized. Somente após esse handshake o servidor aceita requisições tools/list e tools/call.

    A cada mensagem do usuário, o agente chama tools/list e recebe um array de esquemas de ferramentas. Ele encapsula cada esquema em um Strands AgentTool cujo método stream() envia uma requisição tools/call pela bridge. Ferramentas adicionadas ao servidor MCP ficam automaticamente disponíveis na próxima requisição, sem nenhuma alteração no código do agente.

    Correlação de requisição e resposta

    Cada requisição JSON-RPC de saída do agente recebe um ID único e é registrada em um asyncio.Future indexado por (session_id, jsonrpc_id). Quando a resposta chega de volta pela WebSocket, ela é associada ao Future correspondente e resolvida. Isso permite que múltiplas chamadas de ferramentas estejam em andamento simultaneamente sem ambiguidade.

    Como funciona o native messaging

    Para que a extensão se comunique com um processo local de longa duração sem permissões de rede ou prompts por mensagem, a solução usa o native messaging — suportado tanto pelo Chrome quanto pelo Firefox. O navegador procura um arquivo de manifesto em um local conhecido na máquina do usuário que especifica qual binário iniciar.

    O arquivo de manifesto do native messaging para Chrome no macOS tem o seguinte formato:

    # Stored at ~/Library/Application\ Support/Google/Chrome/NativeMessagingHosts/com.example.mcp_bridge.json
    {
      "name": "com.example.mcp_bridge",
      "description": "MCP Bridge - Routes MCP messages to local servers",
      "path": "/path/to/mcp-bridge-demo/bridge/run_bridge.sh",
      "type": "stdio",
      "allowed_origins": [
        "chrome-extension:///"
      ]
    }

    Na inicialização da extensão, o script de background chama chrome.runtime.connectNative("com.example.mcp_bridge") para iniciar o aplicativo nativo localmente. O script run_bridge.sh referenciado no manifesto ativa o ambiente Python e inicia a bridge:

    #!/bin/bash
    cd "/path/to/mcp-bridge-demo/bridge"
    source .venv/bin/activate
    exec python3 bridge.py

    Cada mensagem é serializada como JSON, codificada em UTF-8 e precedida por um comprimento de mensagem de 32 bits em ordem little-endian. O tamanho máximo de uma mensagem do host de native messaging é 1 MB; o tamanho máximo de uma mensagem enviada ao host é 64 MiB.

    Como a MCP Bridge funciona internamente

    A MCP Bridge age como tradutora de protocolo entre dois mundos: o protocolo de native messaging do Chrome de um lado, e o padrão MCP (JSON-RPC 2.0 sobre stdio) do outro.

    No caminho de entrada, ela remove o cabeçalho de 4 bytes do stdin, analisa o corpo JSON e desencapsula o envelope para extrair a mensagem JSON-RPC bruta. No caminho de saída, faz o inverso: encapsula a resposta JSON-RPC em um envelope e a escreve de volta com o cabeçalho de comprimento.

    Internamente, a bridge executa dois loops concorrentes conectados por um proxy FastMCP. O loop principal lê mensagens do navegador, as desencapsula e coloca o conteúdo JSON-RPC em uma fila de entrada. O proxy FastMCP, iniciado uma vez e mantido ativo pelo tempo de vida da bridge, pega mensagens dessa fila, as encaminha para o subprocesso do servidor MCP via stdin e coloca as respostas do stdout do servidor em uma fila de saída. Um segundo loop em background lê da fila de saída, encapsula cada resposta de volta em um envelope e a escreve no stdout para o navegador receber.

    O servidor MCP em si é um processo filho iniciado pela bridge na inicialização, configurado por um arquivo mcp.json. Adicionar um novo servidor MCP é uma mudança de uma linha nesse arquivo:

    # mcp.json
    {
      "mcpServers": {
        "excel": {
          "command": "python3",
          "args": ["excel_server.py"]
        }
      }
    }

    Pré-requisitos e implantação

    Para implantar e testar a solução, são necessários:

    • Conta AWS com acesso ao modelo Bedrock habilitado (o código usa Claude Opus 4.7). Disponibilidade do modelo varia por região — consulte a documentação de disponibilidade de modelos do Amazon Bedrock.
    • Permissões de Gerenciamento de Identidade e Acesso (IAM) para Bedrock AgentCore (bedrock-agentcore:*), AWS CloudFormation, criação de roles IAM e S3.
    • Interface de Linha de Comando da AWS (AWS CLI) configurada com credenciais.
    • Kit de Desenvolvimento em Nuvem da AWS (AWS CDK) inicializado na região alvo.
    • Python 3.10+, Node.js 20+, Google Chrome e Git.

    O processo de implantação consiste em clonar o repositório, instalar dependências Python, criar e implantar o agente no AgentCore via CLI, configurar o arquivo bridge_config.json com o ARN do runtime, carregar a extensão no Chrome e registrar a bridge de native messaging. O código completo está disponível no GitHub.

    git clone https://github.com/aws-samples/sample-mcp-bridge-agentcore.git
    cd mcp-bridge-demo
    chmod +x scripts/setup.sh manifests/install.sh
    ./scripts/setup.sh
    npm install -g @aws/agentcore
    cd agent
    agentcore create --name McpBridgeAgent --defaults
    cd McpBridgeAgent
    cp ../agent.py app/McpBridgeAgent/main.py
    cp ../mcp_bridge_transport.py app/McpBridgeAgent/
    agentcore deploy
    {
      "runtime_arn": "arn:aws:bedrock-agentcore:::runtime/",
      "region": "us-east-1",
      "presign_expires": 300
    }
    ./manifests/install.sh 

    Considerações de segurança

    A AWS destaca que a solução demonstrada prioriza a funcionalidade da bridge MCP e, portanto, inclui apenas medidas básicas de segurança: restrição de origem do native messaging (o Chrome verifica o ID da extensão contra a lista allowed_origins), expiração de URL pré-assinada (URLs WebSocket são assinadas com SigV4 e expiram em 5 minutos) e isolamento de processos.

    A principal superfície de exposição única dessa arquitetura é a própria bridge: ela aceita instruções de um agente hospedado na nuvem e as executa localmente com as permissões do sistema de arquivos do usuário. Para um sistema em produção, além de implementar o Amazon Bedrock Guardrails para filtragem de conteúdo, a AWS recomenda medidas adicionais:

    • Autenticação: exigir um handshake com Token Web JSON (JWT) como primeiro frame WebSocket, verificado via Amazon Cognito ou segredo HMAC no AWS Systems Manager.
    • Assinatura de payload: assinar cada mensagem MCP com Ed25519 (chave privada no agente, chave pública na bridge) para garantir que mensagens não foram modificadas em trânsito.
    • Escopo do sistema de arquivos: configurar uma lista explícita de diretórios que o servidor MCP pode acessar, rejeitando caminhos fora do limite — prevenindo que uma injeção de prompt engane o agente para ler arquivos sensíveis.
    • Registro de auditoria: registrar cada invocação de ferramenta (nome, argumentos, timestamp, status do resultado) em um arquivo local para rastreabilidade.

    O que vem a seguir: extensões da arquitetura

    A AWS aponta que a arquitetura atual pode ser estendida para suportar mais casos de uso:

    • Ações no navegador: a extensão pode implementar suas próprias ferramentas de navegador modeladas nas definições de ferramentas do Playwright MCP e expô-las ao agente para realizar ações como clicar em elementos, preencher formulários, navegar em páginas e tirar screenshots.
    • Automação de ferramentas locais: a bridge fala JSON-RPC MCP padrão sobre stdio, então servidores MCP compatíveis com transporte stdio funcionam sem modificação. Exemplos incluem acesso ao sistema de arquivos para leitura/escrita em sandbox, Git para operações em repositórios e memory para grafos de conhecimento local persistentes. O diretório awesome-mcp-servers lista servidores disponíveis.
    • Empacotamento como binário standalone: para distribuição em produção, a AWS usa o PyInstaller para empacotar a bridge em um binário standalone que inclui o runtime Python, dependências e configuração em um único executável.

    Conclusão

    A solução descrita pela AWS demonstra como é possível manter um agente de IA centralmente implantado e gerenciado enquanto se dá a ele acesso a ferramentas que precisam rodar localmente — planilhas Excel, repositórios Git ou outros servidores MCP locais. O padrão usa uma extensão de navegador como camada de retransmissão e o native messaging do Chrome como transporte local, tunelando mensagens JSON-RPC MCP padrão entre a nuvem e o sistema de arquivos do usuário sem expor credenciais ao navegador ou modificar o próprio protocolo MCP.

    Para explorar a solução, o repositório de exemplo está disponível para implantação e experimentação com servidores MCP próprios. Para aprofundamento, a AWS disponibiliza a documentação do Amazon Bedrock AgentCore, o SDK do Strands Agents e a especificação do Model Context Protocol.

    Fonte

    How we built an MCP bridge to give our AgentCore-hosted AI agent access to local MCP tools (https://aws.amazon.com/blogs/machine-learning/how-we-built-an-mcp-bridge-to-give-our-agentcore-hosted-ai-agent-access-to-local-mcp-tools/)

  • AWS Glue Data Quality torna detecção de anomalias em ETL gratuita e melhora as previsões

    O que mudou no AWS Glue Data Quality

    A AWS anunciou duas novidades relevantes para quem trabalha com qualidade de dados no AWS Glue Data Quality: a detecção de anomalias em jobs de Extração, Transformação e Carga (ETL) passou a ser gratuita, e um novo modo de observação foi introduzido para tornar as detecções mais precisas e com menos ruído.

    Novo modo de observação: menos falsos positivos

    Um dos problemas clássicos em sistemas de detecção de anomalias é o excesso de alertas que não representam problemas reais — os chamados falsos positivos. Para endereçar isso, a AWS introduziu um novo modo de observação de anomalias que utiliza uma linha de base constante no lugar de uma tendência linear para analisar os dados.

    Na prática, isso significa que o serviço para de extrapolar tendências de forma exagerada, entregando alertas mais precisos e reduzindo o ruído. Com isso, as equipes conseguem focar nas anomalias genuínas, sem perder tempo investigando falsos alarmes.

    Quando esse novo modo é mais útil

    A AWS destaca que o novo modo de observação é particularmente indicado para os seguintes cenários:

    • Análises exploratórias de dados (EDA — Exploratory Data Analysis), como as realizadas em notebooks interativos;
    • Datasets com padrões planos ou aleatórios, sem tendências previsíveis;
    • Cargas de trabalho com intervalos irregulares de chegada de dados;
    • Verificações de qualidade executadas em horários variados ou em ambientes interativos.

    Em resumo, qualquer cenário onde os dados não seguem um ritmo previsível se beneficia diretamente dessa melhoria.

    Detecção de anomalias em ETL agora sem custo adicional

    Além da melhoria técnica, a AWS removeu a cobrança pela detecção de anomalias em jobs ETL do Glue. Isso significa que é possível monitorar a qualidade dos dados em todos os pipelines do Glue sem preocupação com custos adicionais por essa funcionalidade específica.

    Para quem já utilizava o serviço com restrições por conta do preço, essa mudança abre espaço para ampliar o monitoramento sem impacto no orçamento.

    Disponibilidade

    As melhorias estão disponíveis em todas as regiões comerciais da AWS e nas regiões AWS GovCloud (US). Para começar a usar, a AWS recomenda consultar a documentação oficial do AWS Glue Data Quality. Para detalhes sobre preços, a página de preços do AWS Glue traz as informações atualizadas.

    Fonte

    AWS Glue Data Quality makes ETL anomaly detection free and improves anomaly predictions (https://aws.amazon.com/about-aws/whats-new/2026/08/aws-glue-data-quality-anomaly-detection-free)