Author: Make.com Service User

  • Protegendo o Amazon Quick em redes corporativas com AWS PrivateLink

    O problema: dados sensíveis atrás do firewall corporativo

    Quando os dados empresariais ficam dentro de um data center privado ou atrás de um firewall corporativo, surge um desafio clássico: como permitir que ferramentas de Inteligência Artificial (IA) e dashboards do Amazon Quick acessem essas informações sem expô-las à internet pública?

    Para muitas empresas, rotear tráfego pela internet pública é simplesmente inaceitável. Frameworks regulatórios como HIPAA, FedRAMP e PCI-DSS exigem que dados sensíveis permaneçam dentro de perímetros de rede controlados. Mesmo quando conformidade não é o principal motivador, expor caminhos internos de dados amplia a superfície de ataque, complica trilhas de auditoria e introduz latência variável que degrada a experiência do usuário.

    A AWS publicou um guia técnico detalhando como resolver exatamente esse problema: conectar fontes de dados on-premises ao Amazon Quick de forma totalmente privada, usando AWS PrivateLink.

    Como o Amazon Quick acessa dados privados

    O Amazon Quick é um workspace com IA que reúne pesquisa, análise, automação e conversação em uma única experiência. Para entender a arquitetura de conectividade privada, é importante distinguir dois caminhos de tráfego:

    • Tráfego voltado ao usuário: Cobre o acesso ao console, chamadas de API, uso do Quick Desktop e dashboards embarcados. Todo esse tráfego é roteado por meio de VPC endpoints (Interface Endpoints via PrivateLink).
    • Tráfego de busca de dados: Ocorre quando o próprio Quick precisa acessar suas fontes de dados para buscar informações. Esse caminho é gerenciado pelas VPC connections, que são Interfaces de Rede Elásticas (ENIs) inseridas diretamente na sua Nuvem Privada Virtual (VPC).

    Esses dois caminhos exigem dois mecanismos distintos que trabalham em conjunto, e toda a arquitetura descrita no guia da AWS gira em torno dessa separação.

    Quais componentes do Quick usam VPC connections?

    • Amazon Quick Sight: Consulta bancos de dados on-premises (PostgreSQL, MySQL, SQL Server, Oracle, entre outros) diretamente via ENIs na sua VPC.
    • Amazon Quick Flows e Amazon Quick Automate: Automatizam tarefas e orquestrações complexas, invocando conectores de ação, incluindo servidores MCP hospedados privadamente na sua VPC.
    • Quick Agents: Sustentam interações conversacionais e podem invocar conectores de ação diretamente. Quando um agente chama uma API interna, o tráfego passa pela VPC connection.
    • Amazon Quick Index: Constrói uma camada de busca unificada. Para fontes dentro da VPC ou on-premises, as VPC connections de knowledge base suportam atualmente apenas o Amazon Redshift. Fontes como Confluence, SharePoint, Box, Google Drive, OneDrive e Amazon S3 não suportam VPC connection hoje — consulte as fontes de dados VPC suportadas.
    • Amazon Quick Research: Acessa fontes empresariais atrás do firewall usando a VPC connection para fontes privadas.

    Configurando a conectividade privada: os quatro pilares

    Pré-requisitos

    Antes de configurar a conectividade privada, a AWS indica que os seguintes itens devem estar em ordem: uma conta AWS ativa com assinatura Enterprise do Amazon Quick (as VPC connections exigem essa edição), uma VPC existente na mesma região do Quick, uma conexão AWS Direct Connect ou VPN Site-to-Site já estabelecida entre a rede on-premises e a VPC, e permissões de Gerenciamento de Identidade e Acesso (IAM) para criar e gerenciar VPC endpoints, security groups e administração do Quick.

    1. VPC endpoints para acesso de usuários e API

    O Quick requer dois Interface VPC endpoints para acesso privado completo:

    • Endpoint do website: Serviço com.amazonaws.<region>.quicksight-website. Lida com a maior parte do tráfego de usuários ao console. É necessário criar um registro A para <region>.quicksight.aws.amazon.com apontando para o DNS do VPC endpoint.
    • Endpoint de API: Serviço com.amazonaws.<region>.quicksight. Lida com chamadas programáticas de API. Com o DNS privado habilitado, chamadas existentes para quicksight.<region>.amazonaws.com roteiam automaticamente pelo endpoint. Para conformidade com FIPS, usa-se com.amazonaws.<region>.quicksight-fips.

    Um ponto importante destacado pela AWS: nem todas as APIs do Quick estão disponíveis pelo VPC endpoint de API. Treze APIs não são suportadas, incluindo as APIs de conectores de ação e as APIs de fluxo. Automações que gerenciam conectores ou fluxos programaticamente precisam de um caminho para o endpoint público de API — veja a documentação sobre Quick e Interface VPC endpoints.

    Resolução de DNS para os endpoints

    Para o endpoint do website, é necessário criar um registro A para <region>.quicksight.aws.amazon.com apontando para o DNS do VPC endpoint. Isso garante que usuários na rede corporativa resolvam a URL do Quick pelo caminho privado. Uma Zona Hospedada Privada (Private Hosted Zone) do Route 53 responde apenas a consultas de dentro das VPCs associadas, então os servidores DNS on-premises devem ser configurados para encaminhar consultas para um endpoint de entrada do Route 53 Resolver na VPC.

    Políticas de VPC endpoint

    As políticas de VPC endpoint restringem quais contas ou organizações podem usar o endpoint. Para o Quick, as políticas podem ser definidas por ID de conta AWS ou ID de organização. Uma limitação importante: para o endpoint do website, os campos Principal, Action e Resource devem ser todos definidos como *. Condições só podem ser especificadas com os atributos aws:PrincipalAccount ou aws:OrgId. Políticas mais restritivas ao nível de ação só são suportadas no endpoint de API.

    Exemplo de política para o endpoint do website:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "*",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "aws:PrincipalAccount": ["012345678901"]
            }
          }
        }
      ]
    }

    Exemplo de política para o endpoint de API (restrita a ações específicas):

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": [
            "quicksight:DescribeUser",
            "quicksight:ListUsers"
          ],
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "aws:PrincipalAccount": ["012345678901"]
            }
          }
        }
      ]
    }

    2. VPC connections para acesso a fontes de dados

    Enquanto os VPC endpoints lidam com o tráfego voltado ao usuário, as VPC connections lidam com o caminho do lado do servidor — ou seja, o Amazon Quick alcançando sua VPC para buscar dados em bancos de dados, fontes do Amazon Redshift e APIs internas.

    Quando você cria uma VPC connection no Amazon Quick, ENIs são inseridas nas sub-redes da sua VPC. Essas ENIs permitem que o Quick troque tráfego de rede com recursos dentro da sua VPC e, por extensão, com tudo que seja alcançável a partir dela, incluindo sistemas on-premises conectados via Direct Connect ou VPN.

    Antes de criar a VPC connection, é necessário criar uma Função de Execução (Execution Role) IAM dedicada. O Quick não cria essa role automaticamente. Ela precisa de uma política de permissões com as ações do Amazon EC2 que o Quick usa para gerenciar suas ENIs, e de uma política de confiança que permita ao quicksight.amazonaws.com assumir a role.

    Política de permissões necessária:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:DeleteNetworkInterface",
            "ec2:ModifyNetworkInterfaceAttribute",
            "ec2:DescribeSubnets",
            "ec2:DescribeSecurityGroups"
          ],
          "Resource": "*"
        }
      ]
    }

    Política de confiança:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "quicksight.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }

    Um detalhe técnico importante destacado pela AWS: para VPC connections criadas antes de 27 de abril de 2023, o security group associado à interface de rede do Quick não é stateful. É necessário adicionar uma regra de entrada que permita explicitamente o tráfego de retorno da fonte de dados em todas as portas (0–65535). Conexões criadas após essa data usam o comportamento stateful padrão — consulte as regras de entrada e saída de security groups.

    3. VPC endpoints para serviços de dados da AWS

    O Quick acessa outros serviços AWS (Amazon S3, Amazon Redshift, Amazon Athena, AWS Secrets Manager) ao recuperar dados para dashboards e análises. Para manter todo o tráfego privado, a AWS recomenda criar Interface ou Gateway VPC endpoints para cada um desses serviços na mesma VPC onde as ENIs do Quick estão alocadas:

    • Amazon S3: Gateway endpoint — com.amazonaws.<region>.s3 (sem custo adicional)
    • Amazon Redshift: Interface endpoint — com.amazonaws.<region>.redshift
    • Amazon Athena: Interface endpoint — com.amazonaws.<region>.athena
    • AWS Secrets Manager: Interface endpoint — com.amazonaws.<region>.secretsmanager
    • AWS Glue: Interface endpoint — com.amazonaws.<region>.glue

    4. Acesso a domínios externos obrigatórios

    Mesmo com VPC endpoints configurados, os navegadores dos usuários ainda precisam alcançar alguns domínios para login, assets estáticos, métricas e integrações. Domínios sem suporte a VPC endpoint precisam de conectividade de saída, normalmente via proxy corporativo ou firewall. Entre os principais domínios sem suporte a VPC endpoint estão: *.cloudfront.net (assets estáticos como CSS e JavaScript), *.execute-api.<region>.amazonaws.com (métricas do lado do cliente) e *.kinesisvideo.amazonaws.com (streaming ao vivo de workflows de automação).

    Restringindo o acesso exclusivamente ao VPC endpoint

    Após configurar e testar os endpoints, é possível forçar que todo acesso à conta Quick passe obrigatoriamente pelo VPC endpoint, bloqueando completamente o acesso pela internet. O Quick oferece controles de restrição por IP e por VPC endpoint que limitam o acesso da conta a uma lista predefinida de intervalos de IP, IDs de VPC ou IDs de VPC endpoint.

    Para configurar via CLI da AWS:

    aws quicksight update-ip-restriction \
      --aws-account-id ACCOUNT_ID \
      --region REGION \
      --enabled \
      --vpc-endpoint-id-restriction-rule-map \
      vpce-001122def=CorporateVpcEndpoint

    Alguns pontos críticos sobre esse recurso: as regras de IP e VPC endpoint se aplicam ao acesso web, embarcado e móvel do Quick, mas não restringem o acesso à API pública. Para restringir chamadas de API de fontes específicas, use políticas IAM com condições aws:SourceIp ou aws:SourceVpce. As regras podem levar até 10 minutos para entrar em vigor. Certifique-se de que seu próprio IP ou VPC endpoint esteja incluído nas regras antes de habilitá-las — caso contrário, você perderá o acesso à sua própria conta.

    Controle de identidade e federação

    A conectividade de rede privada mantém o tráfego fora da internet, mas não responde à pergunta de quem pode acessar o quê dentro do Quick. O Amazon Quick usa o AWS IAM Identity Center como ponto central para gerenciamento de identidade da força de trabalho, conectando-se ao provedor de identidade corporativo existente via SAML 2.0 para autenticação e SCIM 2.0 para provisionamento automático de usuários e grupos.

    O Quick suporta três papéis base: Admin (acesso completo de gerenciamento), Author (criação e publicação de dashboards, agentes, fluxos e apps) e Reader (consumo de dashboards publicados e interação com agentes). Além disso, o Quick Sight suporta Segurança em Nível de Linha (RLS) e Segurança em Nível de Coluna (CLS) para controle granular de quais dados cada usuário ou grupo pode visualizar. As mesmas políticas de segurança que restringem visualizações tradicionais também restringem o que a IA pode referenciar ao gerar respostas.

    Para configuração passo a passo do IAM Identity Center com seu provedor de identidade, a AWS disponibiliza o guia Introdução ao IAM Identity Center. Para configurações avançadas de RLS/CLS e federação de identidade, consulte a documentação do IAM Identity Center.

    Atenção: Para contas Quick integradas ao IAM Identity Center, a autenticação via navegador requer acesso aos endpoints públicos de login da AWS e do IAM Identity Center. VPC endpoints não cobrem esse caminho de login. É necessário fornecer conectividade de saída via NAT gateway ou proxy — veja as considerações para acesso privado no IAM Identity Center.

    Custos estimados

    A AWS detalha o modelo de custo dos principais componentes desta arquitetura:

    • Interface VPC endpoints: US$ 0,01/hora por Zona de Disponibilidade (AZ) + US$ 0,01/GB processado (~US$ 7,20/mês por endpoint por AZ)
    • Gateway VPC endpoints (S3): Sem custo adicional
    • VPC connections (ENIs do Quick): Incluídas no Quick Enterprise, sem custo adicional
    • NAT gateway (para domínios externos): US$ 0,045/hora + US$ 0,045/GB processado (~US$ 32/mês fixo)
    • VPC Flow Logs: Taxas de ingestão do CloudWatch Logs, variando com o volume de tráfego

    Para otimizar custos, a AWS recomenda usar Gateway endpoints para S3 (gratuitos) em vez de Interface endpoints, habilitar VPC Flow Logs seletivamente apenas nas ENIs de endpoint (em vez de toda a VPC), e avaliar se todos os domínios externos precisam de NAT gateway ou se um proxy direcionado seria mais econômico.

    Boas práticas de segurança

    Nem o isolamento de rede nem os controles de identidade são suficientes sozinhos. A AWS enfatiza que a arquitetura depende de ambas as camadas trabalhando juntas:

    • Aplique políticas de mínimo privilégio (least-privilege) nos endpoints: restrinja endpoints do website por aws:PrincipalAccount ou aws:OrgId, e no endpoint de API, limite as ações apenas às que sua automação realmente precisa.
    • Use security groups em camadas: tanto nas ENIs dos VPC endpoints (tráfego de usuário) quanto nas ENIs das VPC connections (tráfego de dados).
    • Habilite VPC Flow Logs em todas as ENIs de endpoint para capturar metadados de tráfego para monitoramento de segurança e auditoria de conformidade.
    • Crie VPC connections separadas por ambiente (dev, staging, produção) para evitar acesso cruzado entre ambientes.
    • Monitore com CloudWatch: configure alarmes para as métricas PacketsDropped e ActiveConnections.

    Conclusão

    A arquitetura descrita pela AWS estabelece quatro controles complementares: VPC endpoints mantêm o tráfego de usuários privado, VPC connections oferecem ao Quick um caminho privado para as fontes de dados, a federação de identidade determina quem pode acessar o quê, e as restrições de VPC endpoint tornam o caminho privado obrigatório. Com isso em vigor, Quick Agents podem consultar bancos de dados on-premises, Quick Research pode investigar fontes empresariais atrás do firewall, Quick Sight pode visualizar dados sensíveis e Quick Flows pode orquestrar sistemas internos — tudo sem que os dados atravessem a internet pública.

    A AWS recomenda começar pelos VPC endpoints para acesso de usuários e API, validar o acesso antes de avançar para as VPC connections de fontes de dados, e habilitar as restrições de VPC endpoint apenas após confirmar que todos os padrões de acesso funcionam pelo caminho privado.

    Fonte

    Securing Quick access from corporate networks with AWS PrivateLink (https://aws.amazon.com/blogs/machine-learning/securing-quick-access-from-corporate-networks-with-aws-privatelink/)

  • Framework de Inteligência Agêntica Adaptativa com Strands Agents

    O problema do modelo único para tudo

    Quem já construiu agentes de Inteligência Artificial (IA) conhece bem o dilema: toda requisição — seja uma simples consulta de status ou uma análise complexa — acaba sendo enviada para o mesmo modelo grande e caro hospedado na nuvem. Essa abordagem de tamanho único eleva os custos de API, introduz latência imprevisível e torna o sistema completamente dependente de conectividade.

    Para endereçar esse problema, a AWS publicou um artigo técnico apresentando o Adaptive Agentic Intelligence Framework (AAIF), construído sobre o Strands Agents. A ideia central é simples: usar Modelos de Linguagem Pequenos (SLMs) para resolver tarefas rotineiras localmente, e acionar modelos de nuvem via Amazon Bedrock apenas quando a complexidade realmente exigir. Essa lógica tem respaldo acadêmico: pesquisadores Belcak et al. da NVIDIA argumentam que SLMs são “suficientemente poderosos, inerentemente mais adequados e necessariamente mais econômicos para muitas invocações em sistemas agênticos”.

    Arquitetura em três camadas

    O AAIF organiza o processamento de IA em três camadas, cada uma otimizada para um tipo diferente de tarefa:

    • Orquestração inteligente: um SLM leve (llama3.2:1b) atua como camada de decisão. Ele classifica cada requisição recebida e a direciona para a camada adequada, sem regras fixas codificadas manualmente.
    • Processamento local: tarefas rotineiras como recuperação de telemetria de dispositivos e análise de imagens são tratadas por SLMs rodando no próprio hardware, via Ollama. Essas tarefas completam com baixa latência e sem dependência de nuvem.
    • Processamento em nuvem: análises de padrões complexos e recomendações estratégicas são enviadas para modelos de fronteira no Amazon Bedrock, que oferecem raciocínio de múltiplos passos e contexto mais amplo.
    Imagem original — fonte: Aws

    No centro da arquitetura está o agente Strands, que se conecta a um runtime Ollama hospedando tanto o modelo orquestrador de 1 bilhão de parâmetros quanto o modelo de visão. O agente expõe três ferramentas: get_device_telemetry para recuperação local de dados de sensores, analyze_camera_feed para processamento de visão no dispositivo via llama3.2-vision, e get_expert_insights que aciona o Amazon Bedrock via boto3 para análises complexas.

    Imagem original — fonte: Aws

    O framework se adapta às restrições do ambiente de implantação sem exigir reestruturação de infraestrutura. Ele roda em dispositivos de borda como um Raspberry Pi com 8 GB de memória, em implantações totalmente em nuvem onde toda inferência passa pelo Amazon Bedrock, ou em configurações híbridas que combinam velocidade local com raciocínio em nuvem.

    Pré-requisitos para o walkthrough

    Para seguir o passo a passo técnico descrito no artigo original, os seguintes componentes são necessários:

    Configurando o ambiente

    O primeiro passo é criar o diretório do projeto e iniciar o servidor Ollama:

    mkdir aaif-demo && cd aaif-demo
    ollama serve

    Em seguida, baixar os modelos necessários:

    ollama pull llama3.2:1b
    ollama pull llama3.2-vision

    Implementando as ferramentas de processamento local

    O Strands Agents utiliza o decorador @tool para definir as capacidades que os agentes podem invocar. A primeira ferramenta recupera dados de telemetria de dispositivos. Em produção, ela se conectaria a sensores reais de Internet das Coisas (IoT); no walkthrough, usa dados simulados:

    from strands import Agent, tool
    import random
    
    DEVICE_TELEMETRY = {
        "sensor-001": {
            "device_type": "Temperature Sensor",
            "location": "Building A - Floor 2",
            "temperature": 72.5,
            "humidity": 45.2,
            "status": "normal"
        },
        "camera-001": {
            "device_type": "Security Camera",
            "location": "Main Entrance",
            "fps": 30,
            "resolution": "1080p",
            "status": "recording"
        },
        "hvac-001": {
            "device_type": "HVAC Controller",
            "location": "Building A - Central",
            "set_temp": 71.0,
            "current_temp": 72.5,
            "mode": "cooling",
            "status": "active"
        }
    }
    
    @tool
    def get_device_telemetry() -> str:
        """Retrieve current telemetry data from connected IoT devices."""
        device_id = random.choice(list(DEVICE_TELEMETRY.keys()))
        device_data = DEVICE_TELEMETRY[device_id]
        report = f"Device: {device_id} ({device_data['device_type']})\n"
        report += f"Location: {device_data['location']}\n"
        report += f"Status: {device_data['status']}\n"
        for key, value in device_data.items():
            if key not in ['device_type', 'location', 'status']:
                report += f"{key}: {value}\n"
        return report

    A segunda ferramenta realiza análise visual usando um SLM local. O modelo llama3.2-vision roda inteiramente no hardware local, o que significa que feeds sensíveis de câmera não saem do dispositivo:

    import ollama
    
    @tool
    def analyze_camera_feed(image_path: str) -> str:
        """Analyze visual data from cameras using local vision model."""
        stream = ollama.chat(
            model='llama3.2-vision',
            messages=[{
                'role': 'user',
                'content': 'Describe this image in one sentence. '
                           'What are the 3 most important things you see?',
                'images': [image_path]
            }],
            stream=True,
        )
        full_response = ""
        for chunk in stream:
            chunk_content = chunk['message']['content']
            print(chunk_content, end='', flush=True)
            full_response += chunk_content
        return f"Object Detection Report:\n{full_response}"

    Implementando o processamento em nuvem

    Para análises que requerem raciocínio mais amplo, uma terceira ferramenta aciona o Amazon Bedrock. Ela é invocada apenas quando o orquestrador determina que os modelos locais não conseguem resolver a requisição:

    import boto3
    
    @tool
    def get_expert_insights(context_data: str, question: str) -> str:
        """Get advanced analysis and expert recommendations for complex questions via Amazon Bedrock."""
        client = boto3.client("bedrock-runtime", region_name="us-east-1")
        conversation = [
            {
                "role": "user",
                "content": [
                    {"text": f"Context: {context_data}\n\nQuestion: {question}"}
                ],
            }
        ]
        response = client.converse(
            modelId="<", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
            messages=conversation,
            inferenceConfig={
                "maxTokens": 512,
                "temperature": 0.5,
                "topP": 0.9
            }
        )
        response_text = response["output"]["message"]["content"][0]["text"]
        return f"Expert Analysis:\n{response_text}"

    Configurando o agente com orquestração inteligente

    O núcleo do AAIF é a configuração do agente Strands. Ele utiliza um SLM local (llama3.2:1b) como orquestrador, via provedor Ollama:

    from strands.models.ollama import OllamaModel
    
    model = OllamaModel(
        model_id="llama3.2:1b",
        host="http://localhost:11434",
        params={
            "max_tokens": 300,
            "temperature": 0.3,
        },
    )
    
    system_prompt = """You are a monitoring assistant for operational facilities.
    You have access to device telemetry tools, analysis capabilities, and expert insights to help monitor operations effectively.
    
    When users ask for:
    - Device status or telemetry: use get_device_telemetry
    - Image or data analysis: use analyze_camera_feed
    - Expert advice or complex questions: use get_expert_insights
    
    Always return the complete tool results directly to the user."""
    
    agent = Agent(
        model=model,
        system_prompt=system_prompt,
        tools=[
            get_device_telemetry,
            analyze_camera_feed,
            get_expert_insights,
        ],
    )

    O orquestrador baseado em SLM analisa cada requisição e a encaminha para a ferramenta adequada sem correspondência de palavras-chave codificada. O roteamento acontece pelo entendimento contextual do modelo. A tabela abaixo resume o comportamento esperado:

    • “Verificar status do dispositivo” → SLM local, baixa latência
    • “Analisar esta imagem” → IA de visão local, baixa latência
    • “Quais estratégias de otimização você recomenda?” → Nuvem (Amazon Bedrock), latência maior por round-trip de rede

    Com o agente configurado, a interação é direta:

    # Local processing - device telemetry
    response = agent("What's the current status of our devices?")
    print(response)
    
    # Local processing - vision analysis
    response = agent("Analyze the camera feed from camera-001")
    print(response)
    
    # Cloud processing - complex analysis
    response = agent(
        "Based on current telemetry patterns, "
        "what optimization strategies do you recommend?"
    )
    print(response)

    Adaptando para diferentes cenários de implantação

    A arquitetura AAIF suporta três configurações principais, ajustáveis apenas trocando a configuração do modelo:

    Totalmente em nuvem

    Quando não há hardware de borda disponível, toda inferência passa pelo Amazon Bedrock com escalonamento automático:

    from strands.models import BedrockModel
    
    model = BedrockModel(
        model_id="<", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
        region_name="us-east-1"
    )

    Híbrido (configuração padrão do AAIF)

    Mantém o orquestrador SLM local e aciona modelos de nuvem apenas para requisições que excedem a capacidade local. Cerca de 80% do tráfego não atinge um endpoint de API pago, o que representa economia significativa de custos.

    Totalmente local (air-gapped)

    Para ambientes com requisitos estritos de soberania de dados ou sem conectividade, um modelo local maior substitui a ferramenta de nuvem. Um modelo de 3 bilhões de parâmetros consegue lidar com tarefas moderadamente complexas que o orquestrador de 1B escalaria para a nuvem. A contrapartida é menor profundidade de raciocínio nas consultas mais difíceis:

    model = OllamaModel(
        model_id="llama3.2:3b",  # Larger local model for complex tasks
        host="http://localhost:11434",
    )

    Próximos passos: servidores MCP para chamadas centralizadas de ferramentas

    A implementação descrita usa chamadas de ferramentas locais definidas diretamente no código do agente. Para implantações em produção com múltiplos agentes compartilhando ferramentas entre serviços, o artigo recomenda expor essas ferramentas como servidores do Protocolo de Contexto de Modelo (MCP). O MCP fornece uma interface padronizada para descoberta e invocação de ferramentas, permitindo centralizar o gerenciamento e reutilizar ferramentas em diferentes agentes.

    Na configuração distribuída, o Dispositivo 1 atua como hub orquestrador, rodando o agente Strands com o roteador SLM e uma ferramenta de telemetria local. Ele se conecta via protocolo MCP ao Dispositivo 2, que roda um servidor de processamento de visão de borda com llama3.2-vision, e ao Dispositivo 3, que serve como gateway de análise em nuvem conectado ao Amazon Bedrock. Do ponto de vista do orquestrador, todas as ferramentas remotas aparecem como chamadas de função locais, pois a camada de transporte MCP cuida da serialização e comunicação de rede de forma transparente.

    Imagem original — fonte: Aws

    Limpeza do ambiente

    Para evitar cobranças futuras, o artigo recomenda os seguintes passos de limpeza:

    • Desabilitar o acesso ao modelo no Amazon Bedrock: abrir o console do Amazon Bedrock, acessar “Model access” e revogar o acesso ao Amazon Nova Lite. Consulte Gerenciar acesso a modelos no Guia do Usuário do Amazon Bedrock para detalhes.
    • Parar o servidor Ollama e remover os modelos para liberar espaço em disco (aproximadamente 2 GB):
      ollama stop
      ollama rm llama3.2:1b
      ollama rm llama3.2-vision
    • Deletar o diretório do projeto se o código de exemplo não for mais necessário:
      rm -rf aaif-demo

    IA responsável no caminho de inferência em nuvem

    Antes de executar esse padrão em produção, o artigo recomenda adicionar controles de IA responsável ao caminho de inferência em nuvem, já que essas requisições carregam saídas de ferramentas, dados recuperados e entradas do usuário. É possível anexar Amazon Bedrock Guardrails ao BedrockModel do Strands com um ID e versão de guardrail. Ele então aplica filtros de conteúdo para categorias prejudiciais, filtros de injeção de prompt e verificações de fundamentação contextual que bloqueiam respostas não suportadas pelos dados de origem. Para aplicar as mesmas políticas à camada de SLM local, basta chamar a API ApplyGuardrail standalone nas entradas e saídas — garantindo que toda requisição siga um único padrão de segurança, independentemente de qual modelo a processa.

    Aplicações além do monitoramento de IoT

    O padrão arquitetural descrito vai muito além do cenário de monitoramento de IoT usado como referência. Uma organização de saúde poderia rodar monitoramento de pacientes localmente enquanto roteia suporte a diagnósticos para modelos em nuvem. Uma empresa de serviços financeiros poderia processar transações on-premises e reservar capacidade de nuvem para análise de risco. Uma equipe de manufatura poderia rodar modelos de visão para controle de qualidade na borda enquanto envia requisições de otimização para a nuvem.

    Para saber mais sobre como construir agentes com Strands Agents, consulte a documentação do Strands Agents. Para informações sobre os modelos de fundação disponíveis, acesse o Amazon Bedrock.

    Fonte

    Adaptive agentic intelligence framework using Strands Agents (https://aws.amazon.com/blogs/machine-learning/adaptive-agentic-intelligence-framework-using-strands-agents/)

  • 5 desafios de produção em sistemas multi-agente e como o Deep Insight os resolveu

    Da prova de conceito à produção: onde os sistemas multi-agente travam

    Criar um agente de Inteligência Artificial (IA) funcional ficou relativamente simples. Com frameworks open source e serviços de nuvem, é possível ter algo rodando em poucos dias — algumas chamadas de ferramentas, um prompt bem escrito e o resultado já impressiona. O problema começa quando a equipe tenta levar esse agente para além do piloto e aplicá-lo em processos reais de negócio.

    Quem já passou por isso reconhece a frustração: o agente não segue a lógica de negócio, pula etapas de validação, ignora casos de borda. Você ajusta o prompt, troca o modelo, adiciona exemplos — e os mesmos problemas voltam. Isso acontece porque agentes não executam uma sequência fixa de instruções: eles tomam decisões com base no contexto. Prompt sozinho não resolve. É preciso projetar como o agente raciocina, quando ele verifica e o que faz quando algo dá errado.

    Com esse diagnóstico em mente, a equipe de Arquitetura de Soluções da AWS construiu o Deep Insight, um sistema multi-agente de nível produtivo. A AWS publicou uma série de três posts documentando o que aprendeu ao longo desse processo. Este artigo cobre a Parte 1 da série, que mapeia os cinco desafios centrais e mostra como cada camada da solução os endereça — do Strands Agents SDK e Amazon Bedrock ao Amazon Bedrock AgentCore, Application Load Balancer e AWS Fargate.

    O que é o Deep Insight

    O Deep Insight é um sistema multi-agente que transforma análises de dados complexas em relatórios automatizados. Dado um arquivo CSV e um prompt em linguagem natural, uma hierarquia de agentes especializados — Coordinator (Coordenador), Planner (Planejador), Supervisor, Coder (Programador), Validator (Validador), Reporter (Relator) e Tracker (Rastreador) — colabora para carregar os dados, executar análises, gerar gráficos, validar cálculos e produzir um relatório profissional no formato .docx com citações.

    O vídeo de demonstração web do Deep Insight mostra o fluxo completo, desde o upload dos dados e a revisão do plano de análise até o streaming em tempo real e o download do relatório final. O projeto está disponível no GitHub com três opções de implantação:

    • Versão Self-Hosted: roda localmente via Interface de Linha de Comando (CLI), com acesso total ao código de cada agente, prompt e fluxo. Configuração em cerca de 10 minutos, ideal para desenvolvimento. Uma demonstração está disponível no YouTube.
    • Versão Web: interface no navegador para upload de dados, revisão de planos com Humano no Ciclo (HITL — Human-in-the-Loop) e download de relatórios, sem necessidade de escrever código.
    • Versão Managed AgentCore: implantação em produção com Amazon Bedrock AgentCore, executando os agentes em uma Nuvem Privada Virtual (VPC — Virtual Private Cloud) privada, com isolamento de sessão por usuário e um interpretador de código customizado no AWS Fargate.

    As três versões compartilham a mesma arquitetura multi-agente, então um agente validado em desenvolvimento pode ser implantado em produção sem alterações.

    Os cinco desafios e como a arquitetura os resolve

    A tabela abaixo resume os cinco desafios e as tecnologias escolhidas para cada um:

    • “Como controlar o fluxo de execução entre múltiplos agentes?” → Strands Agents SDK com o padrão Graph e o padrão Agents-as-Tools.
    • “Qual Modelo de Linguagem de Grande Escala (LLM — Large Language Model) cada agente deve usar?” → Amazon Bedrock com modelos Claude selecionados por papel: Haiku para roteamento, Opus para planejamento, Sonnet para execução.
    • “Como operar um agente de forma confiável em produção?” → Amazon Bedrock AgentCore com runtime gerenciado, isolamento de sessão e implantação em VPC privada.
    • “Como mitigar riscos de segurança ao executar código gerado por IA?” → AWS Fargate + Application Load Balancer (ALB) com contêineres sandbox efêmeros por sessão.
    • “Como monitorar e gerenciar o sistema?” → Amazon DynamoDB + Amazon Simple Notification Service (Amazon SNS) + Amazon Cognito com painel administrativo e alertas de falha.

    Design do sistema multi-agente

    O Deep Insight organiza oito agentes em três camadas. Cada agente opera em seu próprio contexto independente, executa apenas suas tarefas especializadas e repassa somente os resultados comprimidos para o próximo.

    Imagem original — fonte: Aws

    Dois padrões do Strands Agents SDK combinados controlam esse fluxo. O primeiro é o padrão Graph, que define a ordem de execução dos agentes como um grafo direcionado: as requisições fluem do Coordinator para o Planner, depois para o Plan Reviewer e então para o Supervisor, com uma ramificação condicional que retorna ao Planner em caso de revisão. O segundo é o padrão Agents-as-Tools, que permite ao Supervisor invocar agentes especializados como ferramentas apenas quando necessário, minimizando o uso de contexto.

    Camada 1 — Do Coordinator ao Plan Reviewer

    Esta camada transforma uma requisição do usuário em um plano de execução aprovado. O Coordinator é o ponto de entrada: responde diretamente a saudações simples e encaminha tarefas complexas ao Planner. A decisão de usar o modelo Claude Haiku aqui é deliberada — como o Coordinator apenas classifica requisições, não faz sentido incorrer no custo de um modelo mais potente.

    O Planner usa Claude Opus com Extended Thinking (Raciocínio Estendido) ativado para decompor a análise em 5 a 10 etapas concretas, organizadas em um checklist atribuído a cada agente especializado. Sem esse planejamento prévio, o agente tomaria todas as decisões em tempo de execução, e qualquer correção no meio do caminho invalidaria o trabalho anterior.

    O Plan Reviewer é um nó de Humano no Ciclo (HITL): apresenta o plano ao usuário e coleta aprovação ou feedback de revisão. Se houver revisão, o fluxo retorna ao Planner. Um contador máximo de revisões (MAX_PLAN_REVISIONS) evita loops infinitos. Na versão Web, um modal no navegador exibe o plano com um countdown de 300 segundos que aprova automaticamente caso não haja resposta.

    Camada 2 — O Supervisor como orquestrador

    O Supervisor executa o plano do Planner em ordem, invocando os agentes da Camada 3 como ferramentas registradas via Tool Use (Uso de Ferramentas). Seu prompt de sistema define regras estritas: ordem obrigatória de execução, regra de conclusão de seção (não avança enquanto todos os itens do checklist não estiverem marcados como concluídos) e preservação de contexto ao passar variáveis entre os agentes.

    Camada 3 — Agentes especializados

    Cada agente da Camada 3 é uma instância independente com seu próprio prompt de sistema, modelo e conjunto de ferramentas:

    • Coder: carrega dados, escreve e executa código Python de análise, gera gráficos (.png) e deixa metadados de cálculo para verificação.
    • Validator: reexecuta cada cálculo dos metadados a partir dos dados originais. Correspondências dentro de 0,01 são aprovadas; divergências são sinalizadas. Os cálculos verificados vão para citations.json.
    • Reporter: lê os resultados e as citações para gerar o relatório final em DOCX em duas versões — com e sem citações.
    • Tracker: atualiza o checklist após cada agente usando apenas raciocínio do LLM, sem ferramentas, adicionando pouco overhead.

    Configuração de modelo por agente

    A seleção de modelo para cada papel é uma decisão arquitetural, não apenas de preferência. O Coordinator usa Haiku (sem cache, executa uma vez). O Planner usa Opus com Extended Thinking (planejamento profundo). O Supervisor, o Coder e o Reporter usam Sonnet com Prompt Caching (Cache de Prompt), reduzindo custos de tokens de entrada em até 90% em chamadas repetidas. O Validator e o Tracker operam com contextos diferentes a cada execução, tornando o cache ineficaz para eles.

    Implantação e operações em produção

    Imagem original — fonte: Aws

    Execução segura de código gerado por IA

    O agente Coder escreve e executa Python para análise de dados. Em produção, executar código gerado por LLM diretamente em um servidor é arriscado: o modelo pode deletar arquivos do sistema, esgotar recursos em um loop infinito ou acessar dados de outros usuários. O Deep Insight resolve isso com contêineres efêmeros por sessão no AWS Fargate, acessados via ALB.

    O AgentCore runtime, o ALB e as tarefas do Fargate rodam dentro da mesma VPC privada. Endpoints de VPC conectam esses componentes ao Amazon Simple Storage Service (Amazon S3), ao Amazon Bedrock e ao Amazon Elastic Container Registry (Amazon ECR) sem trafegar pela internet pública. Grupos de segurança restringem quais componentes podem alcançar os contêineres do interpretador de código, e funções do AWS Identity and Access Management (IAM) limitam cada componente apenas aos recursos da AWS que ele precisa.

    O fluxo de execução usa dois passos: o código gerado pelo LLM é codificado em base64, enviado via HTTP, gravado em arquivo (Passo 1) e depois executado via subprocess (Passo 2). Cookies de sessão do ALB (sticky sessions) garantem que o agente retorne ao mesmo contêiner em chamadas subsequentes. Ao final da análise, artefatos como gráficos e relatórios são enviados ao Amazon S3, e os contêineres encerram automaticamente após uma hora.

    A AWS recomenda adicionar Amazon Bedrock Guardrails como controle de IA responsável em implantações de produção: filtros de conteúdo e detecção de ataques de prompt nos dados enviados pelos usuários, além de verificações de fundamentação contextual nas saídas dos agentes.

    Visibilidade operacional

    O Deep Insight oferece uma interface web baseada em FastAPI que se comunica com o backend via protocolo nativo do AgentCore. Os usuários monitoram o progresso via Server-Sent Events (SSE) em streaming e podem aprovar ou revisar o plano via modal (HITL). O relatório final pode ser baixado diretamente pela interface, que suporta coreano e inglês.

    Para equipes que precisam de visibilidade operacional mais ampla, há um painel de operações opcional com rastreamento de tarefas no Amazon DynamoDB, alertas de falha por e-mail via Amazon SNS e um painel administrativo protegido por autenticação via JSON Web Token (JWT) com Amazon Cognito.

    A arquitetura além da análise de dados

    O design hierárquico do Deep Insight não se limita à geração de relatórios analíticos. Dois casos validam isso:

    LG Electronics: a divisão de vendas da LG na Coreia construiu o ChatInsight sobre a mesma arquitetura multi-agente. Análises que levavam 3 dias passaram a ser concluídas em 30 minutos — uma melhoria de produtividade de 288 vezes. Profissionais de marketing sem conhecimento de SQL conseguem deixar o agente explorar dados e propor estratégias. Mais detalhes estão disponíveis no post sobre o Sistema de Extração de Insights da LG Electronics no AWS Tech Blog.

    TechRecon (re:Invent 2025): apresentado na sessão SNR203 do AWS re:Invent 2025, o TechRecon aplica a arquitetura do Deep Insight à inteligência tecnológica estratégica. Dado uma empresa e setor, um agente Researcher coleta tendências, o Coder analisa, o Validator verifica e o Reporter produz documentos de posicionamento técnico. A arquitetura é praticamente idêntica à do Deep Insight — basta trocar os papéis e prompts dos agentes para resolver problemas completamente diferentes. Mais informações no repositório do TechRecon no GitHub e no vídeo da sessão no AWS re:Invent.

    Conclusão

    Colocar um agente em produção não é uma questão de capacidade do modelo — é uma questão de arquitetura. O Deep Insight oferece uma resposta concreta para os cinco desafios centrais: o padrão Graph do Strands Agents SDK para controle de fluxo e HITL, o padrão Agents-as-Tools para orquestração sob demanda, modelos Claude do Amazon Bedrock selecionados por papel, Amazon Bedrock AgentCore para runtime gerenciado, AWS Fargate + ALB para execução isolada de código e DynamoDB + Cognito + SNS para visibilidade operacional.

    O projeto é open source. Explore o código, adapte para o seu domínio e acompanhe as próximas partes da série: a Parte 2 aborda técnicas de Context Engineering (Engenharia de Contexto) para superar os limites da janela de contexto, e a Parte 3 cobre a implantação e operação em produção com o AgentCore. O workshop está disponível em inglês e coreano.

    Fonte

    5 production challenges in multi-agent systems and how Deep Insight solved them (https://aws.amazon.com/blogs/machine-learning/5-production-challenges-in-multi-agent-systems-and-how-deep-insight-solved-them/)

  • Treine o Qwen3 no AWS Trainium com o torchtitan

    Visão geral

    A AWS publicou um guia técnico mostrando como treinar o modelo Qwen3 usando o framework torchtitan sobre o hardware AWS Trainium. O ponto central da abordagem é que o TorchNeuron registra o Trainium como um dispositivo PyTorch nativo, o que permite ao torchtitan utilizá-lo pelas interfaces padrão do PyTorch — sem adaptações especiais no fluxo de trabalho.

    O walkthrough cobre três configurações distintas, todas executadas em uma única instância trn2.48xlarge: treinamento via Hugging Face Transformers v5, treinamento com a implementação nativa Qwen3 do torchtitan, e uso de kernels NKI (Interface de Kernel Neuron) para camadas de Mistura de Especialistas (MoE). As três abordagens compartilham o mesmo padrão de lançamento com torchrun e a mesma estrutura de configuração.

    Pré-requisitos

    Para reproduzir os exemplos, a AWS recomenda usar uma instância trn2.48xlarge com a AWS Deep Learning AMI para Neuron ou um container de treinamento PyTorch Neuron. Ambos os ambientes já incluem o driver, runtime e compilador Neuron necessários.

    Antes de instalar o torchtitan-neuron, vale verificar se o ambiente já o contém:

    python3 -c "import torchtitan, torchtitan_neuron; print(torchtitan.__version__, torchtitan_neuron.__file__)"

    As versões utilizadas no guia são as seguintes:

    • Instância: trn2.48xlarge — 16 aceleradores Trainium2, 128 NeuronCores físicos
    • NeuronCores lógicos: 64 com LNC=2
    • torch / torch_neuronx: 2.14.0 / 2.14.3
    • transformers: 5.16.0
    • torchtitan-neuron: release-2.33 (0.2.2+neuron.1)

    Quando o torch_neuronx está instalado, o TorchNeuron registra o Trainium como dispositivo neuron e o torchtitan o detecta na inicialização. No modo eager, o Neuron compila as operações conforme são executadas. Com torch.compile, o Neuron compila o grafo capturado.

    Para instalar o torchtitan-neuron preservando o build Neuron do torch:

    git clone https://github.com/aws-neuron/torchtitan-neuron
    cd torchtitan-neuron
    pip install -r requirements.txt

    Antes de iniciar o treinamento, é necessário baixar os artefatos do modelo Qwen3 do Hugging Face Hub:

    hf download Qwen/Qwen3-4B-Instruct-2507 \
      --local-dir "$PWD/assets/hf/Qwen3-4B-Instruct-2507"

    Configuração 1: Treinamento com Hugging Face Transformers v5

    Na primeira configuração, o Transformers v5 constrói o Qwen3 via AutoModelForCausalLM. A definição do modelo vinda do Hub é utilizada nos passos de forward e backward. O modelo é selecionado pelo seu ID no Hub.

    Crie o arquivo neuron_qwen3.py na raiz do repositório torchtitan-neuron e adicione as importações, o caminho dos artefatos e a configuração base:

    import os
    from torchtitan.experiments.transformers_modeling_backend.config_registry import (
        transformers_modeling_backend_full,
    )
    from torchtitan.experiments.transformers_modeling_backend.configs import (
        TransformersBackendConfig,
    )
    
    ASSETS = os.path.abspath("./assets/hf/Qwen3-4B-Instruct-2507")
    
    def v5_qwen3_4b() -> TransformersBackendConfig:
        config = transformers_modeling_backend_full()
        config.hf_model = "Qwen/Qwen3-4B-Instruct-2507"
        config.hf_assets_path = ASSETS
        config.dataloader.dataset = "c4_test"
        config.training.steps = 10
        config.training.local_batch_size = 1
        config.parallelism.data_parallel_shard_degree = -1
        return config
    torchrun --nproc_per_node=64 --rdzv_backend c10d --rdzv_endpoint localhost:0 \
      --local-ranks-filter 0 --role rank --tee 3 \
      -m torchtitan.train --module neuron_qwen3 --config v5_qwen3_4b

    Esse comando lança 64 processos de treinamento — um por NeuronCore lógico. O parâmetro --module neuron_qwen3 importa o módulo de configuração local, e --config v5_qwen3_4b seleciona a função de configuração.

    Carregamento e salvamento de checkpoints Hugging Face

    Para fazer fine-tuning a partir de pesos publicados, basta habilitar o carregamento de checkpoint e apontar initial_load_path para o diretório de artefatos. O adaptador de dicionário de estado ajusta o prefixo model. e lida com embeddings compartilhados. O checkpoint final é salvo no formato safetensors do Hugging Face.

    def v5_qwen3_4b_finetune() -> TransformersBackendConfig:
        config = v5_qwen3_4b()
        config.checkpoint.enable = True
        config.checkpoint.folder = "checkpoint_qwen3_4b_ft"
        config.checkpoint.initial_load_path = ASSETS  # absolute path required
        config.checkpoint.initial_load_in_hf = True
        config.checkpoint.initial_load_model_only = True
        config.checkpoint.last_save_in_hf = True
        config.checkpoint.last_save_model_only = True
        return config

    A loss no primeiro passo serve como verificação rápida de que os pesos publicados foram carregados corretamente. No run validado pela AWS, o Qwen/Qwen3-4B-Instruct-2507 produziu loss de 6,54 a partir dos pesos publicados e de 12,43 a partir de inicialização aleatória. Após o treinamento, o checkpoint exportado pode ser carregado com AutoModelForCausalLM e load_state_dict sem chaves faltando ou inesperadas — exceto lm_head.weight, que o Qwen3-4B vincula aos embeddings de token.

    Configuração 2: Treinamento com os modelos nativos do torchtitan

    Na segunda configuração, o torchtitan constrói seu próprio Qwen3Model nativo. Adicione as importações e a função de configuração ao neuron_qwen3.py:

    from torchtitan.models.qwen3 import model_registry
    from torchtitan.models.qwen3.config_registry import qwen3_32b
    from torchtitan.trainer import Trainer
    
    def native_qwen3_4b() -> Trainer.Config:
        config = qwen3_32b()
        config.model_spec = model_registry("4B", attn_backend="sdpa")
        config.hf_assets_path = ASSETS
        config.dataloader.dataset = "c4_test"
        config.training.steps = 10
        config.training.local_batch_size = 1
        config.training.global_batch_size = 64
        config.parallelism.data_parallel_shard_degree = -1
        return config
    torchrun --nproc_per_node=64 --rdzv_backend c10d --rdzv_endpoint localhost:0 \
      --local-ranks-filter 0 --role rank --tee 3 \
      -m torchtitan.train --module neuron_qwen3 --config native_qwen3_4b

    O campo config.model_spec seleciona a classe do modelo e define como o torchtitan fragmenta o modelo e mapeia as chaves do checkpoint. Aqui, model_registry("4B", attn_backend="sdpa") seleciona a implementação nativa Qwen3 com atenção por produto escalar (SDPA — Scaled Dot Product Attention).

    Configuração 3: Kernels NKI para Mistura de Especialistas (MoE)

    Na terceira configuração, as camadas de Mistura de Especialistas (MoE) são executadas com kernels escritos em NKI, a linguagem de kernels do Neuron. Adicione as importações e a função de configuração:

    from torchtitan.config import CompileConfig
    from torchtitan_neuron.models.qwen3.config_registry import qwen3_nki_moe_config
    
    def nki_qwen3_30b_a3b() -> Trainer.Config:
        config = qwen3_nki_moe_config(
            "30B-A3B",
            compile_config=CompileConfig(enable=False, backend="neuron"),
            n_layers=4,
            num_experts=64,
            top_k=4,
        )
        config.hf_assets_path = ASSETS
        return config
    torchrun --nproc_per_node=64 --rdzv_backend c10d --rdzv_endpoint localhost:0 \
      --local-ranks-filter 0 --role rank --tee 3 \
      -m torchtitan.train --module neuron_qwen3 --config nki_qwen3_30b_a3b

    Esta configuração usa fragmentação de dados paralelos (data parallel sharding) em 64 ranks com grau de paralelismo tensorial igual a 1. Não utiliza paralelismo de especialistas. O parâmetro num_experts=64 define o número de especialistas no modelo — não o grau de paralelismo entre eles. Definir CompileConfig(enable=False) executa o exemplo em modo eager. O TorchNeuron suporta operadores NKI registrados tanto em execução eager quanto com torch.compile.

    O exemplo reduz o Qwen3-30B-A3B para 4 camadas e 64 especialistas para que caiba em uma única instância trn2.48xlarge. Cada token é roteado para 4 especialistas com top_k=4.

    Adicionando seu próprio kernel NKI

    Em alguns casos, pode ser vantajoso otimizar uma operação para os formatos de tensor específicos do seu modelo. Um kernel especializado pode ajustar seu tiling e movimentação de dados a esses formatos, ou substituir uma sequência crítica de operações PyTorch por um único operador otimizado.

    O guia demonstra esse mecanismo usando rope_hf da nkilib.core.embeddings, que espera o layout de tensor do Hugging Face e suporta seu próprio modo backward. Crie o arquivo my_neuron_kernels.py na raiz do repositório:

    import torch
    from nkilib.core.embeddings.rope_hf import rope_hf
    from torch_neuronx import nki_op
    from torch_neuronx.nki_hop import wrap_nki
    from torch_neuronx.utils import get_logical_neuron_cores
    
    LNC = (int(get_logical_neuron_cores()),)
    wrapped_rope = wrap_nki(rope_hf)
    
    @nki_op("my_kernels::rope_fwd")
    def rope_fwd(query, key, rope_cache):
        q = query.permute(0, 2, 1, 3).contiguous()
        k = key.permute(0, 2, 1, 3).contiguous()
        cache = rope_cache.reshape(-1, rope_cache.shape[-1])
        q_out, k_out = wrapped_rope[LNC](
            q, k,
            torch.empty_like(q), torch.empty_like(k),
            rope_cache=cache,
        )
        return (
            q_out.permute(0, 2, 1, 3).contiguous(),
            k_out.permute(0, 2, 1, 3).contiguous(),
        )

    O torchtitan armazena query e key como [batch, seq, heads, head_dim], enquanto o rope_hf espera [batch, heads, seq, head_dim]. A conversão de layout acontece dentro do operador. Registre também um operador separado para o modo backward, salvando o cache rotacional durante o forward para reutilização:

    @nki_op("my_kernels::rope_bwd")
    def rope_bwd(grad_query, grad_key, rope_cache):
        gq = grad_query.permute(0, 2, 1, 3).contiguous()
        gk = grad_key.permute(0, 2, 1, 3).contiguous()
        cache = rope_cache.reshape(-1, rope_cache.shape[-1])
        out_q, out_k = wrapped_rope[LNC](
            gq, gk,
            torch.empty_like(gq), torch.empty_like(gk),
            rope_cache=cache,
            backward=True,
        )
        return (
            out_q.permute(0, 2, 1, 3).contiguous(),
            out_k.permute(0, 2, 1, 3).contiguous(),
        )
    
    def _setup_context(ctx, inputs, output):
        ctx.save_for_backward(inputs[2])
    
    def _backward(ctx, grad_query, grad_key):
        (rope_cache,) = ctx.saved_tensors
        grad_q, grad_k = rope_bwd(grad_query, grad_key, rope_cache)
        return grad_q, grad_k, None
    
    rope_fwd.register_autograd(_backward, setup_context=_setup_context)

    Em seguida, crie a subclasse NKIRoPE estendendo CosSinRoPE e chame rope_fwd a partir de apply_rotary_emb:

    from dataclasses import dataclass
    from torchtitan.config import derive, override
    from torchtitan.models.common.rope import CosSinRoPE
    
    class NKIRoPE(CosSinRoPE):
        @dataclass(kw_only=True, slots=True)
        class Config(CosSinRoPE.Config):
            pass
    
        @staticmethod
        def apply_rotary_emb(query, key, rope_cache):
            stride = 128 * LNC[0]
            if query.shape[1] % stride:
                raise ValueError(
                    f"rope_hf requires a sequence length that is a multiple of "
                    f"128 * LNC={stride}, got {query.shape[1]}"
                )
            q_out, k_out = rope_fwd(query, key, rope_cache)
            return q_out.type_as(query), k_out.type_as(key)

    Registre o NKIRoPE como substituto do CosSinRoPE usando o decorator @override:

    @override(
        "nki_rope",
        target=CosSinRoPE.Config,
        exact=True,
        description="nkilib rope_hf kernel in place of the PyTorch rotation",
    )
    def _nki_rope(cfg: CosSinRoPE.Config) -> NKIRoPE.Config:
        return derive(cfg, NKIRoPE.Config)

    Para carregar o override customizado, passe o nome do módulo via --override.imports:

    torchrun --nproc_per_node=64 --rdzv_backend c10d --rdzv_endpoint localhost:0 \
      --local-ranks-filter 0 --role rank --tee 3 \
      -m torchtitan.train --module neuron_qwen3 --config native_qwen3_4b \
      --override.imports my_neuron_kernels

    Antes do início do treinamento, o torchtitan registra cada nó de configuração substituído pelo override. Confirme que a saída contém uma entrada nki_rope para cada camada do Qwen3:

    [Override] nki_rope: model_spec.model.layers.0.attention.rope CosSinRoPEConfig -> NKIRoPE.Config
    [Override] nki_rope: model_spec.model.layers.1.attention.rope CosSinRoPEConfig -> NKIRoPE.Config

    Defina o comprimento de sequência como múltiplo de 128 * LNC — ou seja, 256 quando LNC é 2. Reformate o cache rotacional para [seq, head_dim * 2], com valores cosseno na primeira metade e seno na segunda. O kernel valida essas restrições antes do início do treinamento.

    Paralelismo e escalabilidade

    As mesmas configurações de paralelismo se aplicam tanto às configurações Transformers quanto às nativas. Uma instância trn2.48xlarge expõe 64 NeuronCores lógicos com LNC=2. Definir data_parallel_shard_degree = -1 fragmenta os parâmetros do modelo, gradientes e estado do otimizador entre todos os ranks iniciados pelo torchrun. Definir config.parallelism.tensor_parallel_degree fragmenta os pesos de cada camada entre um grupo de ranks — cada rank computa uma fatia de cada multiplicação matricial. Com o paralelismo de sequência habilitado por padrão, as camadas de normalização operam em ativações fragmentadas ao longo da dimensão de sequência.

    O torchtitan combina paralelismo tensorial com FSDP (Paralelismo de Dados Totalmente Fragmentado) em uma DeviceMesh multidimensional. Acompanhe o uso de HBM (Memória de Alta Largura de Banda) por rank ao aumentar o tamanho do modelo, comprimento de sequência ou tamanho de batch local — esses valores determinam a memória necessária por rank.

    Limpeza do ambiente

    Se quiser manter os checkpoints gerados, copie-os para armazenamento persistente antes de encerrar o ambiente. Se planeja reutilizar a instância, pare-a. Quando não precisar mais dela, encerre-a.

    Conclusão

    O AWS Trainium funciona como um dispositivo torchtitan suportado nas três configurações apresentadas. É possível treinar o Qwen3 via Hugging Face Transformers v5, carregando e salvando safetensors publicados diretamente. Também é possível treinar com a implementação nativa Qwen3 do torchtitan definindo config.model_spec. Para modelos com Mistura de Especialistas (MoE), as receitas NKI do torchtitan-neuron estão disponíveis. Para kernels customizados, o registro de overrides permite anexar operadores NKI ao mesmo fluxo de lançamento.

    Para orientações de configuração, consulte a documentação do AWS Neuron. Para o código-fonte atual e receitas de treinamento, consulte o repositório torchtitan.

    Fonte

    Train Qwen3 on AWS Trainium with torchtitan (https://aws.amazon.com/blogs/machine-learning/train-qwen3-on-aws-trainium-with-torchtitan/)

  • Inteligência de Ameaças da Amazon identifica exploração do PHP2Shell antes da divulgação pública

    Detecção antes do alarme: o que o caso PHP2Shell revela sobre o cenário atual de ameaças

    A equipe de Inteligência de Ameaças da Amazon registrou algo preocupante: uma tentativa de exploração da vulnerabilidade conhecida como PHP2Shell já havia sido detectada em 17 de outubro de 2026 — quatro dias antes de as CVEs relacionadas (CVE-2026-109618 e CVE-2026-109619) serem divulgadas publicamente. A detecção ocorreu por meio da rede MadPot, sistema interno de honeypots (armadilhas digitais usadas para atrair e monitorar agentes maliciosos) da AWS.

    A tentativa partiu de um endereço IP associado a uma rede comercial de anonimização. O fato de um honeypot ter sido alvo durante o período de embargo — quando a vulnerabilidade ainda estava sob sigilo — sugere fortemente que o ator por trás da ação obteve informações sobre o exploit antes da divulgação oficial. Como isso aconteceu ainda é incerto.

    A linha do tempo da exploração

    O embargo estava programado para ser encerrado em 21 de outubro de 2026, às 14h UTC. Mas antes mesmo disso, a Inteligência de Ameaças da Amazon já identificava provas de conceito (PoCs) circulando: a mais antiga registrada foi às 2h UTC do mesmo dia — ou seja, 12 horas antes da janela oficial de divulgação.

    Entre 2h e 8h UTC de 21 de outubro, múltiplas tentativas de exploração do PHP2Shell foram detectadas contra os sensores MadPot, originadas de diferentes infraestruturas anonimizadas. A variação nos payloads e nas escolhas de infraestrutura indica que não se tratava de um único ator, mas de múltiplos grupos agindo de forma independente.

    Após o levantamento oficial do embargo e a publicação do patch, novos exploits de prova de conceito surgiram em questão de horas, e foram usados contra os sensores quase imediatamente. Hoje, o PHP2Shell está sendo explorado ativamente em larga escala.

    Vale destacar que a análise técnica ainda está em andamento, e não há confirmação se alguma dessas tentativas teria obtido sucesso em sistemas reais.

    Duas lições que vão além do PHP2Shell

    1. O embargo protege os defensores — mas não de todos

    A divulgação coordenada de vulnerabilidades (Coordinated Disclosure) continua sendo o modelo correto. Ela garante que fornecedores tenham tempo para desenvolver e distribuir correções antes que o problema se torne público. No entanto, o caso PHP2Shell demonstra que o período de embargo não pode ser tratado como uma garantia de segurança absoluta.

    Se um agente malicioso descobre a mesma vulnerabilidade de forma independente — ou obtém informações vazadas durante o período de sigilo —, a exploração pode começar antes da data oficial de divulgação. Isso significa que, ao investigar um possível comprometimento relacionado ao PHP2Shell, o ponto de partida deve ser pelo menos 17 de outubro, não 21 de outubro.

    2. O tempo entre patch e exploit funcional está encolhendo

    Historicamente, a maioria das explorações observadas ocorria após a publicação de uma prova de conceito pública. Um grupo pequeno de atores mais capacitados desenvolvia o exploit, e os demais aguardavam. Esse padrão está mudando.

    A análise assistida por Inteligência Artificial (IA) tornou mais barato e rápido transformar o diff de um patch ou um advisory técnico em um exploit funcional. Com isso, um número maior de atores consegue agir em horas — ou até minutos — após a divulgação de detalhes técnicos de uma vulnerabilidade.

    Para líderes de segurança, isso altera algumas premissas fundamentais:

    • Para vulnerabilidades críticas em sistemas expostos à internet, meça os prazos de aplicação de patches e mitigações em horas. Um SLA de 7 ou 30 dias pressupõe uma janela de atraso que simplesmente não existe mais.
    • Inicie investigações a partir da data mais antiga de exploração conhecida, não da data de divulgação. No caso do PHP2Shell, isso significa investigar a partir de 17 de outubro.
    • Invista em detecções que não dependam de assinatura específica para uma CVE. A primeira exploração frequentemente chega antes de essas assinaturas existirem.

    Como a AWS ajuda a proteger os clientes

    A AWS opera múltiplas camadas de proteção para seus clientes. O sistema interno de inteligência de ameaças da empresa detectou e restringiu automaticamente tentativas maliciosas de varredura relacionadas a essa vulnerabilidade. A infraestrutura analisa mais de 200 bilhões de eventos por minuto e integra inteligência de ameaças da rede de honeypots MadPot para identificar e bloquear tentativas de exploração conhecidas em tempo real.

    Ações recomendadas imediatamente

    Para quem opera ambientes PHP, as recomendações são diretas:

    • Atualize imediatamente para as versões corrigidas do PHP. A atualização é a única remediação completa para as duas CVEs. Não existem workarounds apenas de configuração que resolvam ambos os problemas de forma integral.
    • Considere bloquear uploads de arquivos multipart em implantações PHP que não possam ser corrigidas imediatamente — mas avalie o impacto na aplicação antes de aplicar essa medida.
    • Monitore requisições POST que contenham a string PHP_SESSION_UPLOAD_PROGRESS em uploads de formulários.
    • Revise os logs do servidor web em busca de atividades suspeitas.
    • Verifique execuções de processos inesperadas ou modificações de arquivos em servidores de aplicações web.

    Indicadores de Comprometimento (IOCs)

    A Inteligência de Ameaças da Amazon identificou os seguintes endereços IP associados à exploração do PHP2Shell:

    • 103.216.220.92 — observado em 17/10/2026
    • 31.223.184.166 — observado em 21/10/2026
    • 37.19.200.5 — observado em 21/10/2026
    • 134.209.159.64 — observado em 21/10/2026
    • 103.114.163.188 — observado em 21/10/2026
    • 95.217.98.37 — observado em 21/10/2026

    Importante: os endereços identificados fazem parte de infraestruturas de anonimização compartilhadas e não são exclusivos dessa atividade maliciosa. A recomendação é investigar qualquer observação envolvendo esses IPs — e não simplesmente bloqueá-los de forma indiscriminada.

    Mitigação com AWS WAF enquanto o patch não é aplicado

    Para quem ainda não conseguiu aplicar o patch, a AWS publicou orientações específicas sobre como usar o Firewall de Aplicação Web (AWS WAF) para reduzir a exposição durante o período de transição. Confira o post: Como usar o AWS WAF para aplicar mitigações para as vulnerabilidades RCE do PHP2Shell (CVE-2026-109618 e CVE-2026-109619).

    Dúvidas? A AWS recomenda abrir uma thread no AWS re:Post ou entrar em contato com o Suporte AWS.

    Fonte

    Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot (https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/)

  • Como usar o AWS WAF para mitigar as vulnerabilidades RCE do PHP2Shell (CVE-2026-109618 e CVE-2026-109619)

    PHP2Shell: o que aconteceu

    Em 21 de outubro de 2026, o projeto PHP divulgou correções emergenciais para duas vulnerabilidades críticas de execução remota de código (RCE — Remote Code Execution) no núcleo do PHP, identificadas como CVE-2026-109618 e CVE-2026-109619 — batizadas coletivamente de PHP2Shell. Ambas receberam nota 9.2 (Crítica) pelo CVSS v4.0 e permitem que um atacante não autenticado execute código arbitrário em servidores vulneráveis.

    As versões corrigidas são: PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35. A atualização do PHP é a única correção completa e deve ser a primeira prioridade de qualquer equipe afetada.

    Dito isso, atualizar toda uma frota de servidores não acontece da noite para o dia — é preciso inventariar onde o PHP está em execução, agendar janelas de manutenção e testar as aplicações contra as novas versões. É justamente nesse intervalo que o AWS WAF (Firewall de Aplicação Web) entra como controle de defesa em profundidade.

    Para entender como a inteligência de ameaças da Amazon detectou a exploração do PHP2Shell antes da divulgação pública, consulte o post Amazon Threat Intelligence identifies PHP2Shell exploitation prior to public disclosure in MadPot. Para o status dos serviços AWS e a regra WAF recomendada pela AWS, veja o AWS Security Bulletin 2026-143-AWS.

    Entendendo as vulnerabilidades

    Ambas as falhas do PHP2Shell são problemas de RCE não autenticado enraizados na forma como o PHP processa requisições multipart/form-data — o formato utilizado por navegadores em uploads de arquivos — antes mesmo que o código da sua aplicação seja executado. Por isso, as regras de WAF descritas aqui focam em tráfego multipart, tamanho do corpo da requisição e no campo de progresso de upload de sessão.

    • CVE-2026-109618 (corrupção por falta de memória): corrompe a memória quando o PHP fica sem memória no meio de uma requisição. Veja o advisory PHP GHSA-w8hw-w9fx-j79w.
    • CVE-2026-109619 (estado global obsoleto): permite que uma requisição deixe dados obsoletos que uma requisição posterior, no mesmo processo worker, reutiliza. Veja o advisory PHP GHSA-6wmf-4rv5-p3rp.

    Para análise completa das causas raiz, versões afetadas e orientações do próprio PHP, consulte o anúncio oficial de segurança do PHP, de 21 de outubro de 2026.

    Onde o AWS WAF se encaixa na resposta

    O AWS WAF é um controle de defesa em profundidade nessa situação — não um substituto para a atualização do PHP. Os advisories do PHP são explícitos: atualizar para uma versão corrigida é a única mitigação completa. Uma das duas vulnerabilidades está, em grande parte, fora do alcance de qualquer firewall de aplicação web.

    Trate as regras descritas aqui como controles mitigadores que ajudam a reduzir a exposição enquanto você aplica o patch. Após a atualização, você pode removê-las ou mantê-las como controles de suporte.

    O AWS WAF inspeciona requisições HTTP na borda. Ele não analisa a estrutura interna de um corpo multipart e não tem visibilidade sobre a memória dos workers PHP ou configurações do lado do servidor. A tabela abaixo mapeia cada elemento de ataque à cobertura possível pelo WAF:

    • Campo de progresso de upload de sessão em um POST multipart (PHP_SESSION_UPLOAD_PROGRESS): Sim — uma regra direcionada pode bloquear requisições que contenham esse campo.
    • Caminho de upload multipart (multipart/form-data): Sim, se a aplicação não tiver uploads legítimos. Bloqueie multipart/form-data.
    • Condição de falta de memória por corpo muito grande: Parcial — limite o tamanho do corpo da requisição. Não captura amplificação de cabeçalhos que ficam abaixo do limite.
    • Tentativas repetidas contra o mesmo worker: Sim — uma regra baseada em taxa reduz o volume necessário para exploração.
    • Produtor fatal_error_backtraces (configuração do PHP 8.5): Não — é uma configuração de servidor (fatal_error_backtraces=0).
    • Diagnósticos INI inválidos como consumidor: Não — esse caminho roda no lado do servidor, não via HTTP do cliente.

    Implementando as regras no AWS WAF

    As regras abaixo são escritas em JSON para o AWFv2 e devem ser implantadas na ACL Web (Web ACL — Lista de Controle de Acesso Web) associada à distribuição do Amazon CloudFront, ao Application Load Balancer ou ao estágio do Amazon API Gateway à frente das suas aplicações PHP.

    Importante: antes de qualquer alteração, certifique-se de que o logging do WAFv2 está configurado. Inicie cada regra no modo Count (Contagem), confirme que ela não afeta tráfego legítimo e só então mude para Block (Bloqueio).

    Limites de inspeção do corpo da requisição

    O AWS WAF inspeciona uma porção limitada do corpo da requisição. No Application Load Balancer e no AWS AppSync, o limite fixo é de 8 KB. Para serviços como CloudFront e API Gateway, o padrão é 16 KB, podendo ser elevado para 32, 48 ou 64 KB via AssociationConfig da Web ACL:

    aws wafv2 update-web-acl ... --association-config \
    'RequestBody={CLOUDFRONT={DefaultSizeInspectionLimit=KB_16}}'

    Regra principal: PHP2Shell

    Essa regra bloqueia uma requisição somente quando as três condições do AndStatement são verdadeiras simultaneamente: o método é exatamente POST; um identificador de sessão PHP está presente (via cookie ou corpo da requisição); e o corpo contém PHP_SESSION_UPLOAD_PROGRESS. Combine essa regra com session.upload_progress.enabled=0 no servidor.

    {
      "Name": "PHP2Shell",
      "Priority": 0,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "ByteMatchStatement": {
                "SearchString": "POST",
                "FieldToMatch": {
                  "Method": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "EXACTLY"
              }
            },
            {
              "OrStatement": {
                "Statements": [
                  {
                    "ByteMatchStatement": {
                      "SearchString": "PHPSESSID",
                      "FieldToMatch": {
                        "Cookies": {
                          "MatchPattern": {
                            "All": {}
                          },
                          "MatchScope": "KEY",
                          "OversizeHandling": "CONTINUE"
                        }
                      },
                      "TextTransformations": [
                        {
                          "Priority": 0,
                          "Type": "NONE"
                        }
                      ],
                      "PositionalConstraint": "EXACTLY"
                    }
                  },
                  {
                    "ByteMatchStatement": {
                      "SearchString": "PHPSESSID",
                      "FieldToMatch": {
                        "Body": {
                          "OversizeHandling": "CONTINUE"
                        }
                      },
                      "TextTransformations": [
                        {
                          "Priority": 0,
                          "Type": "NONE"
                        }
                      ],
                      "PositionalConstraint": "CONTAINS"
                    }
                  }
                ]
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "PHP_SESSION_UPLOAD_PROGRESS",
                "FieldToMatch": {
                  "Body": {
                    "OversizeHandling": "CONTINUE"
                  }
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "CONTAINS"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "PHP2Shell"
      }
    }

    Regras adicionais recomendadas

    Bloquear requisições multipart quando a aplicação não usa uploads

    Atenção: se implementada no modo Block, essa regra vai quebrar aplicações que precisam de upload de arquivos. Se a sua aplicação não precisa de uploads, bloquear multipart/form-data remove o caminho de ataque de falta de memória para ambos os CVEs.

    {
      "Name": "Block-Multipart-FormData",
      "Priority": 1,
      "Action": {
        "Count": {}
      },
      "Statement": {
        "ByteMatchStatement": {
          "FieldToMatch": {
            "SingleHeader": {
              "Name": "content-type"
            }
          },
          "PositionalConstraint": "CONTAINS",
          "SearchString": "multipart/form-data",
          "TextTransformations": [
            {
              "Priority": 0,
              "Type": "LOWERCASE"
            }
          ]
        }
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "PHP2ShellBlockMultipart"
      }
    }

    Limitar o tamanho do corpo da requisição

    Limitar o tamanho do corpo reduz a condição de falta de memória por trás do CVE-2026-109618. Use OversizeHandling: MATCH para que qualquer corpo maior que o limite seja bloqueado. Se a sua aplicação tem uploads legítimos grandes, aplique essa regra apenas em rotas específicas via AndStatement no caminho URI.

    {
      "Name": "Block-Oversize-Body",
      "Priority": 3,
      "Action": {
        "Count": {}
      },
      "Statement": {
        "SizeConstraintStatement": {
          "FieldToMatch": {
            "Body": {
              "OversizeHandling": "MATCH"
            }
          },
          "ComparisonOperator": "GT",
          "Size": 8192,
          "TextTransformations": [
            {
              "Priority": 0,
              "Type": "NONE"
            }
          ]
        }
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "PHP2ShellBlockOversizeBody"
      }
    }

    Nota: se você já utiliza o grupo de regras gerenciadas AWSManagedRulesCommonRuleSet, a regra SizeRestrictions_BODY já bloqueia corpos maiores que 8 KB por padrão.

    Limitar a taxa de requisições POST repetidas

    Uma regra baseada em taxa para requisições POST reduz o volume que um atacante consegue enviar. Essa regra complementa a configuração de servidor pm.max_requests=1, que recicla o worker a cada requisição.

    {
      "Name": "RateLimit-Posts",
      "Priority": 4,
      "Action": {
        "Count": {}
      },
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "EvaluationWindowSec": 60,
          "AggregateKeyType": "IP",
          "ScopeDownStatement": {
            "ByteMatchStatement": {
              "FieldToMatch": {
                "Method": {}
              },
              "PositionalConstraint": "EXACTLY",
              "SearchString": "POST",
              "TextTransformations": [
                {
                  "Priority": 0,
                  "Type": "NONE"
                }
              ]
            }
          }
        }
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "PHP2ShellRateLimitPosts"
      }
    }

    Mitigações no lado do servidor que complementam o AWS WAF

    As mudanças abaixo endereçam partes do CVE-2026-109619 que ficam abaixo da camada HTTP inspecionada pelo WAF. Aplique-as em paralelo às regras de WAF:

    • Atualize o PHP para 8.5.12, 8.4.27, 8.3.36 ou 8.2.35. Esta é a única correção completa. O PHP 8.1 e anteriores não têm mais suporte upstream — verifique com seu fornecedor de distribuição ou suporte de longo prazo.
    • Para o CVE-2026-109618: defina memory_limit=-1 para que aplicações não possam sobrescrever esse valor, e mantenha post_max_size baixo (8M onde não há uploads, 32M onde há). Aplique limites de memória via container ou cgroup — nunca via RLIMIT_AS ou RLIMIT_DATA, pois esses disparam o caminho vulnerável.
    • Defina fatal_error_backtraces=0 no PHP 8.5 e reinicie todos os workers. Isso desabilita o armazenamento de estado de rastreamento de falhas entre requisições.
    • Defina session.upload_progress.enabled=0 e reinicie todos os workers. Isso desativa o recurso de rastreamento de upload — e é prudente mantê-lo desativado mesmo após o patch.
    • Prefira configurações via php.ini, pool FPM ou inicialização do servidor em vez de sobrescritas de INI por requisição (via .htaccess, php_value ou PHP_VALUE do FastCGI). Remova diretivas obsoletas para evitar avisos de diagnóstico.
    • Elimine erros fatais e timeouts de execução em rotas acessíveis por atacantes — incluindo caminhos de upload, importação, página de erro, shutdown, serialização e extensões.
    • Defina pm.max_requests=1 se a performance permitir. Isso recicla o processo worker após cada requisição, quebrando o vínculo entre a requisição que planta dados obsoletos e a que os reutilizaria.
    • Ative o log de erros (log_errors=On, um error_log funcional, error_reporting=E_ALL) e monitore os logs do Apache, FPM ou proxy em busca de avisos repetidos, deprecações, erros fatais e timeouts em rotas controladas por atacantes. A ausência de erros não é prova de segurança.

    Como começar

    1. Faça o inventário de onde o PHP está em execução e quais versões e APIs de servidor (mod_php, FPM, FrankenPHP, LSAPI) estão em uso.
    2. Identifique todos os endpoints públicos que aceitam corpo de requisição.
    3. Decida quais aplicações utilizam uploads multipart — isso determina se você pode bloquear requisições multipart na borda.
    4. Crie ou atualize a Web ACL à frente de cada workload PHP e adicione as regras aplicáveis no modo Count.
    5. Eleve o limite de inspeção do corpo no CloudFront ou API Gateway se uma regra precisar disso.
    6. Monitore as requisições amostradas e as métricas do Amazon CloudWatch para cada regra. Confirme que uploads legítimos e POSTs JSON grandes não estão sendo capturados.
    7. Mude as regras para Block após as métricas estarem limpas. Ordene as prioridades para que as regras de progresso de upload de sessão e multipart rodem antes das regras de tamanho e taxa.
    8. Teste com um POST multipart/form-data benigno, um corpo excessivamente grande e uma requisição contendo PHP_SESSION_UPLOAD_PROGRESS. Espere uma resposta 403 e a métrica da regra correspondente.
    9. Em paralelo, aplique a atualização do PHP e as mitigações de configuração no servidor.
    10. Remova ou mantenha as regras do AWS WAF como controles de suporte após a atualização de toda a frota.

    Conclusão

    As vulnerabilidades PHP2Shell — CVE-2026-109618 e CVE-2026-109619 — são falhas de RCE não autenticado que atingem o PHP antes mesmo que o código da sua aplicação seja executado. O AWS WAF oferece uma forma de reduzir a superfície de ataque durante a janela de patch: bloqueie o campo de progresso de upload de sessão, bloqueie requisições multipart onde não há uploads esperados, limite o tamanho do corpo e aplique controle de taxa em tentativas repetidas.

    Esses controles mitigadores ajudam a reduzir a exposição, mas não fecham as vulnerabilidades. Atualize o PHP para uma versão corrigida, aplique as mudanças de configuração no servidor e trate as regras do AWS WAF como a camada de borda que suporta essas correções — não como a correção em si.

    Para saber mais sobre os tipos de regras utilizados aqui, consulte a documentação do AWS WAF sobre limite de inspeção do corpo da Web ACL, tratamento de componentes de requisição com tamanho excessivo e como lidar com corpos HTTP excessivamente grandes. Para os detalhes das vulnerabilidades, consulte os advisories PHP GHSA-w8hw-w9fx-j79w e GHSA-6wmf-4rv5-p3rp, além do manual de progresso de upload de sessão do PHP.

    Fonte

    Using AWS WAF to apply mitigations for PHP2Shell RCE vulnerabilities (CVE-2026-109618 and CVE-2026-109619) (https://aws.amazon.com/blogs/security/using-aws-waf-to-apply-mitigations-for-php2shell-rce-vulnerabilities-cve-2026-109618-and-cve-2026-109619/)

  • Amazon Cognito expande replicação multi-Região para as Regiões AWS GovCloud (US)

    Cognito MRR chega às Regiões GovCloud (US)

    A AWS anunciou uma expansão relevante para o Amazon Cognito: a funcionalidade de replicação multi-Região — conhecida pela sigla MRR, do inglês Multi-Region Replication — agora está disponível nas Regiões AWS GovCloud (US). Com isso, cargas de trabalho que operam nessas Regiões governamentais também passam a contar com os benefícios de resiliência que o MRR já oferecia em outros ambientes.

    O que é o MRR e como funciona

    O MRR permite que dados de identidade — tanto de usuários quanto de máquinas — sejam sincronizados em tempo quase real para um user pool secundário em uma Região de espera definida pelo próprio time. Isso inclui credenciais, configurações do user pool e configurações de federação.

    Com os dados replicados na Região de espera, é possível redirecionar o tráfego e manter a autenticação disponível caso ocorra alguma interrupção na Região primária. Trata-se de um mecanismo importante para garantir continuidade operacional em cenários de falha.

    Expansão além das Regiões comerciais

    Até então, o MRR estava disponível em 16 Regiões comerciais da AWS. Com este anúncio, o recurso passa a abranger também Regiões adicionais, incluindo as Regiões AWS GovCloud (US), ajudando equipes a atender requisitos de resiliência, residência de dados e conformidade regulatória nas Regiões que melhor se alinham às suas necessidades de negócio.

    Requisitos e disponibilidade

    O MRR está disponível como um complemento para user pools nos planos de funcionalidade Essentials ou Plus. Para utilizá-lo, é necessário ter uma chave gerenciada pelo cliente (CMK — Customer Managed Key) do AWS KMS (Key Management Service) configurada para múltiplas Regiões.

    Para consultar a lista completa de Regiões onde o Amazon Cognito está disponível, a AWS disponibiliza a página de Capacidades da AWS por Região. Quem quiser começar a usar o recurso pode acessar o guia do desenvolvedor para instruções detalhadas, além da página de preços para entender os custos envolvidos.

    Fonte

    Amazon Cognito extends multi-Region replication to AWS GovCloud (US) Regions (https://aws.amazon.com/about-aws/whats-new/2026/10/cognito-multi-region-us-govcloud/)

  • Amazon Polly Generative ganha fala mais natural, 14 novas vozes e 2 novos idiomas

    O que mudou no Amazon Polly Generative

    A AWS anunciou uma atualização significativa no motor Generative do Amazon Polly, seu serviço gerenciado de conversão de texto em fala. O novo modelo por trás do engine entrega uma saída de voz mais natural, precisa e com baixa latência. A atualização traz 14 novas vozes distribuídas em nove localidades, além de dois novos idiomas — hindi e finlandês — agora disponíveis de forma geral no motor Generative pela primeira vez.

    Novas vozes disponíveis

    As novas vozes adicionadas ao portfólio incluem:

    • Inglês americano: Kenneth e Nate
    • Inglês australiano: Russell e Curtis
    • Hindi e inglês indiano: Kiara e Arjun
    • Alemão: Tina
    • Espanhol americano: Carlos
    • Português brasileiro: Leo e Carolina
    • Coreano: Hyunduk
    • Finlandês: Suvi

    Um destaque importante para o público brasileiro: duas das novas vozes — Leo e Carolina — são em português brasileiro. Isso amplia as possibilidades de uso do Polly Generative em aplicações voltadas ao mercado nacional.

    Melhorias na qualidade da fala

    Segundo a AWS, essa atualização funciona como um upgrade direto no modelo, sem necessidade de mudanças na integração existente. As vozes Generative ficaram mais naturais e precisas, especialmente em conteúdos complexos como números, endereços de e-mail e endereços postais, que agora são pronunciados de forma mais confiável. Isso reduz a necessidade de ajustes finos na saída de fala.

    O suporte a tags de Linguagem de Marcação para Síntese de Fala (SSML) continua disponível no motor Generative, permitindo o controle da saída de voz da mesma forma que antes.

    Casos de uso e aplicações

    A API de streaming com baixa latência facilita a construção de experiências em centrais de atendimento, chatbots e aplicações de voz baseadas em Modelos de Linguagem de Grande Escala (LLM) para conversas em tempo real. A variedade e riqueza das opções de voz também são adequadas para cenários de notícias, mídia, entretenimento, e-learning e acessibilidade.

    Outro ponto relevante é que este lançamento expande a oferta do Amazon Polly Generative para o AWS GovCloud, oferecendo mais opções para o setor público e indústrias reguladas.

    Regiões disponíveis

    Todas as novas vozes Generative estão disponíveis nas seguintes regiões da AWS:

    • US East (N. Virginia)
    • US West (Oregon)
    • Europe (Frankfurt)
    • Europe (Zurich)
    • Europe (London)
    • Asia Pacific (Sydney)
    • Asia Pacific (Seoul)
    • Asia Pacific (Singapore)
    • Asia Pacific (Tokyo)
    • Canada (Central)
    • AWS GovCloud (US-West)

    Próximos passos

    Para ouvir como as vozes do Polly soam na prática, vale conferir a página de recursos do Amazon Polly. Para mais detalhes sobre as ofertas e uso do serviço, consulte a documentação do Amazon Polly e a página de preços.

    Fonte

    Polly Generative engine upgraded with more natural speech, 14 new voices, and 2 new languages (https://aws.amazon.com/about-aws/whats-new/2026/10/polly-generative/)

  • Contexto de gestão de trabalho para agentes de IA com Smartsheet MCP na AWS

    Agentes de IA com contexto real de gestão de trabalho

    Agentes de IA são mais úteis quando conseguem atuar sobre o trabalho real que acontece dentro de uma organização. Gestão de trabalho envolve tarefas complexas e multifuncionais — atualizar cronogramas de projetos, reatribuir tarefas, levantar status — e agentes de IA podem ajudar nisso sem que ninguém precise trocar de ferramenta.

    A Smartsheet, plataforma de gestão de trabalho para projetos, portfólios e operações, lançou em disponibilidade geral o seu servidor de Protocolo de Contexto de Modelo (MCP). Com o Smartsheet MCP Server, assistentes de IA podem ler, escrever e gerenciar dados do Smartsheet por meio de um protocolo padronizado. O protocolo abrange mais de 40 ferramentas para explorar, criar e gerenciar planilhas, linhas, colunas e automações. É possível atualizar status de tarefas, criar linhas e modificar a estrutura de projetos diretamente por linguagem natural.

    O artigo original do blog da AWS apresenta duas formas de conectar esse servidor aos fluxos de trabalho existentes:

    • Amazon Quick — um workspace de IA agêntica voltado para usuários de negócio, gerentes de projeto e equipes de operações. Eles podem fazer perguntas, atualizar planilhas e construir dashboards por linguagem natural, sem escrever código.
    • Kiro — uma IDE agêntica onde desenvolvedores se conectam ao Smartsheet via MCP para consultar especificações de projetos, atualizar status de tarefas e acompanhar dependências sem sair do ambiente de codificação.

    Visão geral da arquitetura

    O Smartsheet MCP Server funciona como a camada central de integração que conecta os serviços da AWS. O Amazon Quick e o Kiro se conectam diretamente como clientes MCP. O Amazon Quick atende trabalhadores do conhecimento, gerentes de projeto e equipes de operações que querem consultar, atualizar e automatizar o Smartsheet por linguagem natural. Já o Kiro permite que desenvolvedores referenciem especificações de projetos, atualizem status de tarefas e rastreiem dependências sem sair do fluxo de codificação.

    A arquitetura descrita no artigo original mostra o Smartsheet MCP Server no centro, com o Amazon Quick e o Kiro como clientes MCP de um lado, e a API e camada de dados do Smartsheet do outro.

    Gestão de sprints com Amazon Quick e Kiro

    Para ilustrar, considere uma equipe de engenharia de software que acompanha sua sprint no Smartsheet. Tarefas, responsáveis, status e bloqueios ficam todos em uma planilha de projeto. Veja como cada caminho funciona para a mesma equipe:

    Cenário com Amazon Quick: quando um gerente de projeto quer verificar quais tarefas da sprint estão bloqueadas naquela semana, basta perguntar ao Amazon Quick em linguagem natural. O agente de chat do Amazon Quick consulta o Smartsheet MCP Server, busca as linhas relevantes e apresenta um resumo com nomes dos responsáveis e datas de entrega. A resposta é gerada a partir de dados ao vivo do Smartsheet, sem precisar construir relatórios ou dashboards.

    Cenário com Kiro: para desenvolvedores que estão corrigindo bugs ou trabalhando em funcionalidades, é possível pedir ao Kiro para buscar a planilha da sprint atual e mostrar as tarefas de backend abertas atribuídas a eles. O Kiro consulta o Smartsheet via MCP e exibe a lista inline. Quando a correção é commitada, um hook do Kiro atualiza automaticamente o status da linha correspondente para “Complete”.

    Pré-requisitos

    O Smartsheet MCP Server entrega contexto precisamente estruturado, incluindo relacionamentos entre linhas, tipos de colunas, histórico de células e comentários. Isso produz payloads eficientes em tokens, em vez de retornar payloads brutos da API. Essa decisão de engenharia se acumula em redução de custo e melhoria de latência em escala, quando se executam centenas de consultas assistidas por IA em um portfólio de projetos.

    Para entender como a Smartsheet construiu seu servidor MCP remoto na AWS, vale conferir o artigo How Smartsheet built a remote MCP server on AWS.

    Antes de conectar o Smartsheet MCP Server ao Amazon Quick ou ao Kiro, é necessário ter:

    • Uma conta AWS ativa com permissões apropriadas de Gerenciamento de Identidade e Acesso (IAM) para o serviço que será conectado (Amazon Quick ou Kiro).
    • Uma conta Smartsheet nos planos Business, Enterprise ou AWM.
    • Um Token de Acesso Pessoal do Smartsheet, ou credenciais OAuth se o cliente suportar o fluxo OAuth.
    • Para Amazon Quick: permissões de Author ou superiores na conta do Amazon Quick.
    • Para Kiro: a IDE Kiro instalada a partir de kiro.dev com Node.js disponível no ambiente.

    O Smartsheet MCP Server está disponível em três endpoints regionais. Ele utiliza transporte Streamable HTTP (versões da especificação MCP 2025-06-18 e 2025-03-26) e é autenticado com OAuth 2.0 ou Token de Acesso Pessoal:

    • EUA Comercial: https://mcp.smartsheet.com
    • EU: https://mcp.smartsheet.eu
    • AU: https://mcp.smartsheet.au

    Ambas as opções expõem o mesmo conjunto de ferramentas do Smartsheet. A escolha certa depende de onde o trabalho é realizado:

    • Amazon Quick — se a necessidade é uma solução totalmente gerenciada e de alcance organizacional que toda a equipe possa usar: sem registro de aplicativo, com OAuth pré-configurado, e que escala para trabalhadores do conhecimento na empresa.
    • Kiro — se o usuário é um desenvolvedor que quer algo leve: sem infraestrutura, apenas um arquivo de configuração e um token de acesso pessoal, com escopo limitado ao próprio fluxo de trabalho.

    Integração com Amazon Quick

    O Amazon Quick inclui o Smartsheet como conector pré-construído em seu diretório. Isso significa que ler status de projetos, atualizar linhas, criar discussões e identificar riscos acontece na mesma interface que os usuários de negócio já utilizam. O Amazon Quick disponibiliza essa integração para toda a organização — de gerentes de projeto e equipes de operações a usuários de negócio que gerenciam trabalho no Smartsheet.

    Para adicionar a integração, os passos são:

    • No console do Amazon Quick, navegar até Connectors e encontrar o Smartsheet no diretório.
    • Selecionar o tile do conector Smartsheet.
    • Inserir os detalhes da integração:
    • Clicar em Next. Na página Manage Tools & Permissions, visualizar a lista de ferramentas disponíveis e clicar em Next.
    • Na página Publish, escolher quem pode acessar a conexão e clicar em Publish.

    Após a conexão, o agente de chat do Amazon Quick pode trabalhar com dados do Smartsheet por linguagem natural. Exemplos de prompts mencionados no artigo original:

    • “What projects in our portfolio are currently At Risk?”
    • “Update the status of the authentication task in the Backend API sheet to Complete.”
    • “Create a summary of all overdue items across the Q3 Roadmap and send it to the team.”

    Integração com Kiro

    O Kiro é o caminho indicado quando desenvolvedores querem ter o contexto de projetos do Smartsheet disponível diretamente no ambiente de desenvolvimento, ao lado do código, sem troca de contexto.

    O Kiro é construído em torno de desenvolvimento orientado a especificações. Ele transforma prompts de alto nível em especificações estruturadas e, a partir delas, gera código, documentação e testes. Servidores MCP são a forma como o Kiro obtém contexto do mundo real — conectando-se a documentação, bancos de dados, APIs e sistemas corporativos para fundamentar seu agente em dados ao vivo, em vez de conhecimento do tempo de treinamento.

    Uma funcionalidade do Kiro chamada powers é um pacote instalável com um clique que empacota um servidor MCP curado com arquivos de direcionamento e hooks. Isso dá ao agente de codificação do Kiro uma nova capacidade pronta para uso. Para o Smartsheet, configurar a conexão requer apenas um bloco de configuração JSON — a partir daí, o agente do Kiro pode referenciar dados de projetos ao vivo como parte do fluxo de desenvolvimento.

    Para conectar o Smartsheet MCP Server ao Kiro, basta adicioná-lo à configuração MCP do Kiro (.kiro/settings/mcp.json para escopo de workspace). Para um passo a passo completo, consultar Getting Started with Kiro and MCP Servers:

    {
      "mcpServers": {
        "smartsheet-us": {
          "type": "http",
          "url": "https://mcp.smartsheet.com",
          "headers": {
            "Authorization": "Bearer "
          }
        }
      }
    }

    Essa configuração utiliza a abordagem de Token de Acesso Pessoal (chave de API). Para implantações em produção, OAuth é recomendado. A variável SMARTSHEET_API_TOKEN deve ser definida com o Token de Acesso Pessoal do Smartsheet no ambiente.

    O Kiro carrega servidores MCP como processos em segundo plano na inicialização. Após a inicialização, as ferramentas do Smartsheet ficam disponíveis para o agente do Kiro em todos os modos: chat, planejamento de especificações e automação baseada em hooks. Detalhes completos estão na documentação do Smartsheet MCP Server.

    A partir daí, o Kiro pode referenciar dados do Smartsheet como parte dos fluxos de desenvolvimento. Exemplos de prompts mencionados no artigo:

    • “Check the Backend API project sheet for any open bugs and generate a prioritized fix list.”
    • “Pull the Q3 Roadmap sheet and create a spec for the features marked In Progress.”

    Governança corporativa

    Para equipes que trabalham em ambientes regulados ou corporativos, o modelo de segurança do Smartsheet MCP Server é construído sobre a mesma infraestrutura e camada de permissões da API REST do Smartsheet. Não se trata de uma nova fronteira de confiança:

    • Autenticação OAuth 2.0 e Token de Acesso Pessoal: o método de autenticação é escolhido conforme o suporte do cliente MCP.
    • Aplicação de permissões no nível do usuário: agentes só podem acessar dados que o usuário autenticado tem permissão para visualizar. Não há escalação de privilégios por meio de prompts em linguagem natural.
    • Controles de IA no nível organizacional: administradores de sistema podem ativar ou desativar funcionalidades de IA globalmente. O acesso a ferramentas de escrita é configurável por grupo de usuários.
    • Transporte Streamable HTTP: a liberação em firewall é feita por Nome de Domínio Totalmente Qualificado (FQDN) (mcp.smartsheet.com), não por endereço IP.

    Para arquitetos de conformidade, é importante saber que o MCP Server não armazena prompts, e o conteúdo dos prompts permanece entre o cliente de IA e o modelo. O Smartsheet recebe apenas as chamadas de ferramentas estruturadas e seus resultados.

    Limpeza de recursos

    Para quem seguiu o passo a passo e deseja remover a integração depois:

    Amazon Quick:

    • No console do Amazon Quick, navegar até Connectors.
    • Selecionar o conector Smartsheet.
    • Escolher Delete para remover a conexão. Isso revoga o token OAuth e interrompe o acesso do agente aos dados do Smartsheet.

    Kiro:

    • Abrir o arquivo de configuração MCP (.kiro/settings/mcp.json).
    • Remover a entrada smartsheet-us do objeto mcpServers.
    • Reiniciar o Kiro para descarregar o servidor.

    Próximos passos

    Para entender os bastidores de como o servidor funciona, vale consultar How Smartsheet built a remote MCP server on AWS.

    Após conectar o Smartsheet MCP Server ao sistema de escolha, o artigo original sugere quatro ações para experimentar:

    • Monitorar planilhas de projetos ativos: pedir ao agente de chat para identificar linhas marcadas como Blocked ou At Risk, anotar projetos com comentários de discussão e entregar um resumo estruturado para a equipe. Esse fluxo encadeia get_sheet_summary, search e create_discussion_on_row.
    • Reconciliar status de tarefas: o agente pode buscar dados via Smartsheet MCP Server para reconciliar status de tarefas entre o rastreador de issues e o plano de projeto no Smartsheet. Ele pode sinalizar divergências e atualizar as linhas afetadas, usando get_sheet_summary, get_columns, update_rows e create_discussion_on_row em sequência.
    • Agregar sinais de saúde do projeto: usar relatórios e dashboards para produzir um briefing estruturado sem coleta manual de dados, utilizando list_reports, get_report, list_dashboards, get_dashboard e search.
    • Criar trilha de auditoria: usar o agente para acompanhar cada escrita com um comentário de discussão explicando o que mudou e por quê. Isso cria uma trilha de auditoria legível dentro do Smartsheet, combinando update_rows e create_discussion_on_row.

    Todos os quatro padrões funcionam nos dois caminhos apresentados: Amazon Quick para fluxos de trabalho voltados a usuários de negócio e Kiro para ações iniciadas por desenvolvedores.

    Para quem estiver construindo algo com Smartsheet MCP e AWS, a Smartsheet Developer Community é um bom ponto de partida para compartilhar experiências e trocar ideias.

    Fonte

    Work management context for AI agents with Smartsheet MCP on AWS (https://aws.amazon.com/blogs/machine-learning/work-management-context-for-ai-agents-with-smartsheet-mcp-on-aws/)

  • Saídas Estruturadas para Modelos Claude Disponíveis no Amazon Bedrock

    O que foi anunciado

    A AWS anunciou que o Amazon Bedrock passa a suportar saídas estruturadas para todos os modelos Anthropic Claude disponíveis na plataforma. A novidade vale tanto para o endpoint bedrock-runtime quanto para o endpoint bedrock-mantle, cobrindo as duas principais formas de integração com esses modelos.

    Como funciona na prática

    Independentemente de como a aplicação se comunica com o Claude — seja via boto3 e as APIs do bedrock-runtime, ou pela Messages API através do endpoint bedrock-mantle — agora é possível receber respostas em JSON estritamente compatíveis com um esquema previamente definido.

    Na prática, isso elimina a necessidade de escrever lógica customizada de parsing, implementar retentativas por falhas de formato ou fazer pós-processamento dos dados retornados pelo modelo. O JSON que chega já está no formato esperado pela aplicação.

    Casos de uso suportados

    A AWS destaca que o recurso abre caminho para automação confiável em diversas indústrias. Entre os exemplos citados estão:

    • Extração de campos obrigatórios em relatórios financeiros e documentos de conformidade regulatória;
    • Conversão de anotações clínicas em registros estruturados para Prontuários Eletrônicos de Saúde (EHR — Electronic Health Records);
    • Enriquecimento de catálogos de produtos com dados validados e consistentes;
    • Análise de contratos para identificação de termos-chave, partes envolvidas e obrigações;
    • Roteamento inteligente de tickets de suporte, garantindo que intenções, sentimentos e entidades estejam sempre alinhados ao modelo de dados da aplicação.

    Disponibilidade

    O suporte a saídas estruturadas está disponível nas mesmas regiões onde os modelos Claude já podem ser utilizados no Amazon Bedrock. Para verificar a disponibilidade regional, consulte a disponibilidade regional dos modelos Anthropic.

    Para se aprofundar na implementação, a AWS disponibiliza a documentação oficial do Amazon Bedrock com detalhes técnicos sobre como utilizar saídas estruturadas com os modelos Claude.

    Fonte

    Structured outputs for Claude models available on Amazon Bedrock (https://aws.amazon.com/about-aws/whats-new/2026/10/claude-structured-outputs-bedrock/)