Blog

  • Amazon EKS Capabilities agora suporta CloudWatch Vended Logs

    Monitoramento de logs do EKS Capabilities chega ao CloudWatch Vended Logs

    A AWS anunciou uma novidade importante para quem trabalha com o Amazon Elastic Kubernetes Service (Amazon EKS): o EKS Capabilities agora pode ser configurado como fonte de entrega de logs usando o Amazon CloudWatch Vended Logs. Trata-se de um avanço relevante para equipes que precisam de mais visibilidade sobre o funcionamento dos controladores gerenciados que rodam na infraestrutura da própria AWS.

    O que muda na prática

    Até então, monitorar o comportamento interno das capacidades do EKS exigia soluções alternativas. Com essa atualização, passa a ser possível habilitar a entrega de logs diretamente para cada capacidade suportada, usando as APIs do CloudWatch ou o Console da AWS.

    Os logs são configurados como uma fonte de entrega do CloudWatch Vended Logs, o que garante entrega confiável e segura para três destinos possíveis:

    • CloudWatch Logs — para análise e alertas em tempo real
    • Amazon S3 — para armazenamento de longo prazo e auditoria
    • Amazon Kinesis Data Firehose — para ingestão em pipelines de dados e ferramentas de observabilidade externas

    Quais capacidades são cobertas

    O suporte a logs está disponível para as seguintes capacidades gerenciadas do EKS:

    • Argo CD — ferramenta de entrega contínua declarativa para Kubernetes
    • AWS Controllers for Kubernetes (ACK) — permite gerenciar recursos da AWS diretamente via Kubernetes
    • kro (Kubernetes Resource Orchestrator) — orquestrador de recursos Kubernetes

    Em todos os casos, os logs coletados vêm dos controladores gerenciados que rodam na infraestrutura da AWS, oferecendo uma janela de observabilidade antes inacessível para os times de operações.

    Disponibilidade e preços

    O recurso está disponível em todas as regiões AWS onde o EKS Capabilities já é suportado. Em relação aos custos, a AWS esclarece que a precificação padrão do CloudWatch Vended Logs se aplica de acordo com o destino escolhido — e que não há cobrança adicional pelo EKS em si.

    Para saber mais sobre o EKS Capabilities e como configurar a entrega de logs, consulte a documentação oficial do Amazon EKS.

    Fonte

    Amazon EKS Capabilities now supports Amazon CloudWatch Vended Logs (https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-eks-capabilities-logging)

  • Amazon Cognito ganha novas capacidades com infraestrutura de nova geração

    O que mudou no Amazon Cognito

    O Amazon Cognito acaba de receber um conjunto significativo de melhorias — e o que torna essa história interessante é que elas só foram possíveis graças a uma reformulação profunda da infraestrutura interna do serviço. A AWS migrou centenas de milhões de perfis de usuário para uma nova camada de armazenamento, e a grande maioria dos clientes simplesmente não percebeu que isso aconteceu.

    Neste artigo, a CloudTroop explica o que foi anunciado, como a nova arquitetura funciona por baixo dos panos e quais lições a própria AWS compartilhou sobre esse processo de modernização em larga escala.

    Novas capacidades disponíveis no Cognito

    A migração para a nova infraestrutura não foi apenas uma questão de manutenção técnica — ela criou a base para entregar funcionalidades que resolvem problemas reais dos clientes. Três capacidades se destacam:

    Alto desempenho para cargas de trabalho exigentes

    A nova arquitetura suporta volumes de requisições muito maiores, mantendo a baixa latência que as aplicações modernas exigem. O serviço agora é capaz de suportar dezenas de milhões de usuários por user pool e milhares de transações por segundo (TPS). Isso atende diretamente às demandas de aplicações em escala que antes encontravam limitações no Cognito.

    Chaves gerenciadas pelo cliente

    Com as chaves gerenciadas pelo cliente, agora é possível usar chaves de criptografia próprias, armazenadas no Serviço de Gerenciamento de Chaves da AWS (AWS KMS), para criptografar dados em repouso. Isso oferece controle aprimorado de segurança e dá ao cliente a propriedade total sobre o ciclo de vida das suas chaves de criptografia — um requisito frequente em ambientes regulados e com políticas de conformidade mais rígidas.

    Replicação multi-região

    A replicação multi-região permite que os clientes sincronizem todos os dados do seu user pool — incluindo senhas, atributos e configurações — com outro user pool em uma região de sua escolha. Com isso, é possível implementar estratégias de continuidade de negócios e manter a disponibilidade da autenticação mesmo em caso de falha regional, garantindo que as aplicações continuem acessíveis aos usuários durante interrupções inesperadas.

    A arquitetura por trás da inovação

    A nova infraestrutura do Cognito usa uma camada de armazenamento desenvolvida especificamente para operações de identidade, com foco em extensibilidade e escala. A AWS ancorou as decisões arquiteturais em três princípios orientadores:

    • Design centrado em identidade: a camada de armazenamento entende identidades de usuário. Não há lógica de negócio específica de cliente nem generalizações além do gerenciamento de identidade, mantendo o sistema focado, portátil e otimizado.
    • Evitar decisões irreversíveis: entregar valor de forma incremental, mantendo as escolhas arquiteturais reversíveis para que o serviço possa evoluir conforme novas necessidades surjam.
    • Compatibilidade retroativa: mudanças na infraestrutura subjacente jamais devem quebrar as aplicações dos clientes.

    Esses princípios moldaram cada decisão arquitetural do projeto. A nova arquitetura separa o sistema em domínios implantáveis de forma independente. Anteriormente, enquanto o serviço usava o Amazon Cloud Directory, a arquitetura dependia de um único armazenamento de dados para persistir todas as informações dos clientes. Essa abordagem oferecia mecanismos diretos de travessia de dados, mas exigia coordenação entre múltiplos serviços para ajustar o esquema do banco de dados sempre que novos recursos eram necessários.

    A nova arquitetura utiliza conjuntos de dados distintos, permitindo que cada um evolua de forma independente e acelerando as iterações de novas funcionalidades.

    Migração com zero tempo de inatividade

    Migrar usuários em escala exige cuidados extremos. A estratégia adotada pela AWS priorizou tanto a estabilidade imediata quanto a flexibilidade de longo prazo, por meio de quatro camadas de proteção:

    Validação em modo sombra

    As requisições de API dos clientes foram executadas simultaneamente nas infraestruturas antiga e nova, com comparação de estruturas de resposta, códigos de status e características comportamentais. A validação foi projetada para que informações sensíveis nunca ficassem expostas em texto simples durante as comparações. Variações conhecidas — como pequenas diferenças em timestamps — foram contabilizadas para que apenas discrepâncias significativas gerassem alertas acionáveis.

    Preenchimento retroativo de dados

    Antes de migrar um user pool para a nova infraestrutura, a AWS realizou um preenchimento em massa de todos os registros de usuários existentes do sistema legado para o novo armazenamento. Esse processo ocorreu em paralelo com o tráfego em produção, com uma arquitetura de escrita dupla capturando qualquer alteração feita durante a janela de migração — garantindo que nenhum dado fosse perdido ou ficasse desatualizado.

    Arquitetura de escrita dupla

    Todas as operações de identidade foram escritas simultaneamente nos sistemas legado e novo, com validação abrangente para garantir consistência. Mesmo quando uma escrita dupla para a nova infraestrutura falhava, a operação ainda era concluída com sucesso no sistema legado, preservando todas as requisições iniciadas pelos clientes. Isso significa que qualquer falha na escrita dupla era contida como um problema interno de consistência, sem impacto para o cliente.

    Validação anti-entropia

    Foi implementado um sistema de validação e correção de dados que comparava continuamente os registros entre as infraestruturas antiga e nova, detectando e resolvendo qualquer divergência. As varreduras comparavam atributos de usuário, hashes de credenciais, associações a grupos e configurações, entre outros registros. Quando discrepâncias reais eram encontradas, o sistema as reconciliava automaticamente usando o sistema legado como fonte de verdade. Essa camada conseguiu capturar casos extremos que o modo sombra e as escritas duplas, por si só, não cobriam.

    Implantação incremental com capacidade de reversão

    Foram estabelecidas fases de implantação controladas com capacidade de reversão imediata. Após migrar um user pool para a nova infraestrutura, a AWS continuou replicando todas as escritas de volta para o sistema legado, garantindo a possibilidade de reverter qualquer user pool à infraestrutura anterior a qualquer momento, sem perda de dados. Se uma reversão fosse necessária durante a migração, um orquestrador reproduzia as entradas em ordem cronológica, sincronizando os perfis de usuário de volta ao sistema legado.

    Lições aprendidas para modernização de infraestrutura

    A AWS optou por compartilhar os aprendizados desse processo de modernização, reconhecendo que os princípios se aplicam a qualquer projeto de infraestrutura em larga escala. Três lições se destacam:

    Padrões de acesso dos clientes guiam as decisões de arquitetura

    A análise dos padrões reais de acesso dos clientes revelou que cargas de trabalho de identidade seguem padrões previsíveis. Isso permitiu adotar uma abordagem de escrita dupla síncrona que equilibrou completude com simplicidade operacional. O princípio se aplica a qualquer migração específica de domínio: entenda os padrões de acesso reais da sua carga de trabalho antes de escolher soluções de uso geral.

    Preservar o comportamento exige técnicas além dos testes tradicionais

    Garantir funcionalidade equivalente entre sistemas antigos e novos foi relativamente simples. Preservar o comportamento idêntico da API foi muito mais desafiador. Testes funcionais validam comportamentos intencionais, mas a AWS identificou cenários em que clientes haviam construído aplicações em torno de comportamentos específicos da API — de modo que uma mudança poderia ter quebrado silenciosamente essas aplicações.

    Por exemplo, escritas concorrentes para o mesmo usuário poderiam resultar em estados finais diferentes entre os sistemas, mesmo com todas as escritas sendo bem-sucedidas. Da mesma forma, clientes que escrevem um atributo e imediatamente o leem são afetados pela janela de consistência — diferenças sutis de tempo em quando as atualizações se tornam visíveis podem causar leituras de dados desatualizados. Esses não são falhas funcionais, mas o comportamento sob padrões de tráfego real pode variar. A verificação em modo sombra revelou casos extremos que testes automatizados sozinhos não teriam detectado.

    Validação gradual constrói confiança que testes sozinhos não conseguem

    A recomendação da AWS é usar múltiplas técnicas de validação independentes em camadas — como modo sombra, escritas duplas e varreduras anti-entropia — cada uma cobrindo um padrão de acesso diferente. Nenhuma abordagem isolada captura tudo, e é justamente nas lacunas entre elas que os problemas em produção se escondem. A implantação incremental com capacidade de reversão imediata permite validar cada etapa enquanto mantém a habilidade de reverter rapidamente.

    O que isso significa na prática

    A nova infraestrutura do Cognito já está em produção. As capacidades como chaves gerenciadas pelo cliente e replicação multi-região estão disponíveis agora. À medida que a migração avança, todos os clientes do Cognito terão acesso a essas funcionalidades no mesmo serviço que já utilizam hoje, sem necessidade de nenhuma ação da parte deles.

    Para equipes que gerenciam autenticação em aplicações de grande escala, reguladas ou com requisitos de alta disponibilidade, essas mudanças representam um salto relevante nas possibilidades do serviço. Vale revisar as configurações de criptografia e avaliar se a replicação multi-região faz sentido para a estratégia de continuidade de negócios da sua organização.

    Para saber mais, acesse a página oficial do Amazon Cognito.

    Fonte

    Amazon Cognito unlocks advanced capabilities with next-generation infrastructure (https://aws.amazon.com/blogs/security/amazon-cognito-unlocks-advanced-capabilities-with-next-generation-infrastructure/)

  • Visibilidade total em ataques DDoS com flow logs no AWS Shield Advanced

    O problema que os flow logs resolvem

    Reconstruir o tráfego de um ataque de negação de serviço distribuído — Distributed Denial of Service (DDoS) — costumava ser um trabalho de arqueologia: você combinava dados de múltiplas fontes depois que o estrago já havia acontecido. A AWS mudou essa dinâmica com os attack flow logs do Shield Advanced, que capturam metadados de tráfego durante os ataques, permitindo identificar origens, confirmar se as mitigações funcionaram e alimentar os pipelines de análise que você já usa.

    Os logs são publicados no Amazon Simple Storage Service (Amazon S3), no Amazon CloudWatch Logs ou no Amazon Data Firehose, usando a mesma infraestrutura de entrega do CloudWatch Logs que outros flow logs da AWS já utilizam. Isso significa que eles se encaixam diretamente nas ferramentas de monitoramento e análise que você já tem em operação.

    Como ataques DDoS afetam suas aplicações

    Um ataque DDoS inunda uma aplicação com tráfego até torná-la indisponível para os usuários. Ataques na camada de infraestrutura saturam a banda disponível e esgotam as tabelas de conexão — o resultado prático são perdas de pacotes e timeouts.

    O AWS Shield Advanced é um serviço gerenciado de proteção contra DDoS que detecta e mitiga ataques para os seguintes recursos: distribuições do Amazon CloudFront, balanceadores de carga do Elastic Load Balancing, zonas hospedadas do Amazon Route 53, aceleradores padrão do AWS Global Accelerator e endereços Elastic IP (EIP). Consulte a documentação do AWS Shield Advanced para ver a lista completa de recursos suportados.

    Inicialmente, a AWS disponibilizou os flow logs de ataques na camada de infraestrutura para proteções de EIP, com suporte a outros tipos de recursos previsto para o futuro.

    Principais benefícios dos flow logs

    Os flow logs ajudam as equipes de segurança de várias formas práticas:

    • Reconstruir padrões de tráfego: é possível consultar os logs após um ataque para analisar volume, distribuição de origens e mix de protocolos, sem depender apenas das métricas agregadas do CloudWatch.
    • Identificar origens dos ataques: os campos srccountry e location mostram de onde o tráfego se originou e por qual localização de borda da AWS ele entrou.
    • Verificar o comportamento de mitigação: o campo action registra o que o Shield fez com cada fluxo de tráfego.

    Os logs podem ser enviados para o Amazon S3, CloudWatch Logs ou Data Firehose. A partir daí, você pode consultá-los com o Amazon Athena (serviço serverless de consulta de dados no S3), encaminhá-los para plataformas de Gerenciamento de Informações e Eventos de Segurança — Security Information and Event Management (SIEM) de terceiros — ou criar consultas no CloudWatch Logs Insights, tudo isso sem precisar implantar nenhuma infraestrutura nova.

    O que os attack flow logs capturam

    Cada registro de log captura endereços IP de origem e destino, portas, protocolo, contagem de pacotes e bytes, a ação tomada pelo Shield Advanced, flags TCP, a localização de entrada na AWS e um código de país de duas letras para a origem do tráfego (quando disponível).

    Os logs são gravados em intervalos de 5 minutos e ficam disponíveis tanto durante um ataque ativo quanto após sua conclusão. O tamanho máximo de cada arquivo é 75 MB. Se esse limite for atingido dentro da janela de 5 minutos, o arquivo é fechado, publicado e um novo arquivo começa a ser gravado.

    Os flow logs suportam os formatos de saída JSON, texto simples, W3C e Parquet. Os campos disponíveis em cada registro são:

    • protection_arn — Nome de Recurso da Amazon (ARN) da proteção do Shield
    • event_timestamp — Timestamp de geração do log
    • version — Versão do flow log
    • srcaddr — Endereço IP de origem
    • dstaddr — Endereço IP de destino
    • srcport — Porta de origem
    • dstport — Porta de destino
    • protocol — Número do protocolo IP
    • packets — Contagem de pacotes na janela de agregação
    • bytes — Contagem de bytes na janela de agregação
    • starttime — Início da janela de agregação
    • endtime — Fim da janela de agregação
    • action — Ação tomada pelo Shield
    • location — Localização de entrada na AWS
    • sampling_rate — Taxa de amostragem usada no processamento de pacotes
    • tcp_flags — Flags TCP do pacote
    • srccountry — Código de país de duas letras para a origem do tráfego

    Como configurar os flow logs para proteções do Shield Advanced

    A seguir, o passo a passo para criar os recursos de entrega do CloudWatch Logs que conectam uma proteção do Shield Advanced ao destino de log de sua preferência.

    Pré-requisitos

    Antes de configurar os flow logs, certifique-se de ter:

    Os flow logs incorrem nas cobranças padrão de vended logs do CloudWatch Logs, e os recursos de destino (armazenamento em bucket S3, grupo de logs do CloudWatch Logs ou processamento de dados no Firehose) têm cobranças separadas. Revise a entrada de Vended Logs na página de preços do CloudWatch e os preços do serviço de destino escolhido antes de habilitar os flow logs em recursos de alto tráfego.

    Como funciona a entrega de logs

    A entrega de logs requer três objetos:

    • DeliverySource — Representa a proteção do Shield Advanced que produz os logs
    • DeliveryDestination — Representa para onde os logs devem ser enviados (Amazon S3, CloudWatch Logs ou Amazon Data Firehose)
    • Delivery — Conecta a origem ao destino

    Esse modelo de três objetos permite reutilizar destinos em múltiplas origens e gerenciar pipelines de entrega de forma independente. Por exemplo, é possível enviar logs de múltiplas proteções do Shield para o mesmo bucket S3 criando múltiplos objetos DeliverySource que referenciam o mesmo DeliveryDestination.

    Como os attack flow logs do Shield Advanced usam a infraestrutura de entrega do CloudWatch Logs, eles podem ser agregados entre contas e regiões assim como outros vended logs. É possível entregar diretamente para um bucket S3 centralizado com política cross-account, replicar grupos de logs do CloudWatch usando regras de centralização cross-account e cross-Region, ou transmitir para um stream compartilhado do Firehose usando assinaturas cross-account.

    Passo 1: Criar o recurso de destino

    Escolha um destino:

    Passo 2: Configurar a política do recurso de destino (se necessário)

    O recurso de destino precisa de uma política que conceda permissões de escrita ao serviço de entrega do CloudWatch Logs. A política varia conforme o tipo de destino. Para mais informações, consulte Logs enviados ao Amazon S3, Logs enviados ao CloudWatch Logs ou Logs enviados ao Firehose.

    Para destinos no Amazon S3, há duas opções: criação automática de política (se o bucket não tiver política de recurso existente e você tiver as permissões s3:GetBucketPolicy e s3:PutBucketPolicy, a AWS cria a política necessária automaticamente ao criar a entrega no passo 6) ou atualização manual da política (se precisar customizá-la ou se sua organização exigir políticas pré-aprovadas, siga as instruções em Logs enviados ao Amazon S3).

    Passo 3: Obter o ARN da proteção

    O Shield Advanced é um serviço global e usa a região us-east-1 para gerenciamento. Execute o comando abaixo para listar suas proteções do Shield Advanced:

    aws shield list-protections \
    --region us-east-1

    Na saída, copie o valor de ProtectionArn da proteção que você deseja registrar.

    Passo 4: Criar a origem de entrega (DeliverySource)

    Execute o comando abaixo para criar a origem de entrega, substituindo <protection-arn> pelo valor de ProtectionArn obtido no passo 3:

    aws logs put-delivery-source \
    --name my-shield-delivery-source \
    --resource-arn <protection-arn> \
    --log-type FLOW_LOGS \
    --region us-east-1

    O parâmetro --resource-arn é o ARN da proteção do Shield Advanced — não o do recurso protegido em si. O Shield Advanced cria um objeto de proteção separado que envolve seu recurso, e os flow logs são gerados por essa camada de proteção, não pelo recurso subjacente.

    Passo 5: Criar o destino de entrega (DeliveryDestination)

    Execute o comando abaixo para criar o destino de entrega, substituindo <resource-arn> pelo ARN do recurso de destino criado no passo 1:

    aws logs put-delivery-destination \
    --name my-shield-delivery-destination \
    --output-format plain \
    --delivery-destination-configuration '{"destinationResourceArn":"<resource-arn>"}' \
    --region us-east-1

    O parâmetro --delivery-destination-configuration recebe um objeto JSON com a chave destinationResourceArn, cujo valor é o ARN do seu bucket S3, grupo de logs ou stream do Firehose. Na saída, copie o valor do campo ARN de nível superior — este é o ARN do destino de entrega (diferente do ARN do bucket). Você usará esse valor no passo 6.

    Passo 6: Criar a entrega (Delivery)

    Execute o comando abaixo para conectar a origem ao destino, substituindo <delivery-destination-arn> pelo ARN do destino de entrega obtido no passo 5:

    aws logs create-delivery \
    --delivery-source-name my-shield-delivery-source \
    --delivery-destination-arn <delivery-destination-arn> \
    --region us-east-1

    Passo 7: Verificar a entrega

    Execute o comando abaixo para confirmar que a entrega está ativa:

    aws logs describe-deliveries \
    --region us-east-1

    Após a entrega estar ativa, o Shield Advanced publica registros de flow logs no seu destino durante eventos de DDoS.

    Limpeza dos recursos

    Para evitar cobranças contínuas, exclua os recursos criados seguindo a ordem abaixo.

    Exclua a entrega:

    aws logs delete-delivery \
    --id <delivery-id> \
    --region us-east-1

    Exclua a origem de entrega:

    aws logs delete-delivery-source \
    --name my-shield-delivery-source \
    --region us-east-1

    Exclua o destino de entrega:

    aws logs delete-delivery-destination \
    --name my-shield-delivery-destination \
    --region us-east-1

    Opcionalmente, faça backup dos dados de flow log se precisar retê-los para conformidade ou análise. Em seguida, exclua o recurso de destino.

    Atenção: excluir o recurso de destino apagará permanentemente todos os dados de flow log.

    Para um bucket S3:

    aws s3 rb s3://<bucket-name> \
    --force \
    --region <region>

    Para um grupo de logs do CloudWatch Logs:

    aws logs delete-log-group \
    --log-group-name <log-group-name> \
    --region <region>

    Para um stream do Firehose:

    aws firehose delete-delivery-stream \
    --delivery-stream-name <stream-name> \
    --region <region>

    Próximos passos

    Com os flow logs habilitados nas proteções do Shield Advanced, a AWS recomenda explorar as seguintes possibilidades para aprofundar a análise:

    Para a referência completa sobre configuração de flow logs, consulte a documentação do AWS Shield Advanced.

    Fonte

    Gain visibility into DDoS attacks with flow logs in AWS Shield Advanced (https://aws.amazon.com/blogs/security/gain-visibility-into-ddos-attacks-with-flow-logs-in-aws-shield-advanced/)

  • Amazon SageMaker Data Agent agora integra contexto de negócio nas conversas

    O que mudou no SageMaker Data Agent

    A AWS anunciou uma atualização relevante para o Amazon SageMaker Data Agent: o agente agora se integra ao contexto de negócio e aos metadados armazenados no SageMaker Catalog. Na prática, isso significa que profissionais de dados podem interagir com o agente usando a linguagem do dia a dia da empresa — sem precisar conhecer os nomes técnicos e muitas vezes crípticos das tabelas no banco de dados.

    Por que essa integração importa

    Muitas organizações investem meses construindo e refinando seus catálogos de dados: documentando glossários de negócio, criando formulários de metadados personalizados, escrevendo resumos de ativos e READMEs explicativos. Até agora, esse investimento ficava desconectado das ferramentas de geração de código e consulta. Com essa integração, o SageMaker Data Agent passa a aproveitar exatamente esse contexto acumulado.

    Isso inclui também catálogos sincronizados a partir de ferramentas externas como Collibra, Atlan e Alation — plataformas populares de governança e catalogação de dados no mercado corporativo.

    Como funciona na prática

    Com a integração ativa, um profissional de dados pode fazer perguntas como:

    • “Calcule a taxa de retenção de clientes”
    • “Quais dados eu tenho sobre churn de clientes?”

    O agente então percorre os glossários de termos de negócio, formulários de metadados personalizados, resumos de ativos e conteúdo de README para identificar as tabelas e colunas corretas — e gera o código SQL ou Python correspondente.

    Além disso, o agente é capaz de:

    • Gerar código mais preciso já na primeira tentativa, por entender o contexto de negócio;
    • Planejar fluxos de trabalho em múltiplas etapas com a sequência correta de tabelas e transformações;
    • Respeitar a governança de dados, verificando o status de assinatura dos ativos e fornecendo links de solicitação de acesso quando necessário.

    Benefício para as equipes de dados

    O ponto central dessa novidade é que as organizações não precisam mudar seus fluxos de trabalho atuais para se beneficiar. O SageMaker Data Agent passa a usar o que já existe no catálogo, reduzindo o tempo entre a pergunta e o insight, e permitindo que as equipes trabalhem em linguagem de negócio em vez de decifrar nomes técnicos de tabelas.

    Disponibilidade

    A integração está disponível nos notebooks e no Query Editor do Amazon SageMaker Unified Studio, em todas as regiões AWS onde o Amazon SageMaker Unified Studio está disponível. Para se aprofundar, a AWS disponibiliza a documentação oficial do Amazon SageMaker Data Agent.

    Fonte

    Amazon SageMaker Data Agent integrates business context into conversations (https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-sagemaker-data-agent-bdc/)

  • Amazon Cognito passa a suportar replicação multi-região

    O que mudou no Amazon Cognito

    A AWS anunciou uma novidade importante para quem usa o Amazon Cognito como base de autenticação: o serviço agora suporta replicação multi-região. Isso significa que é possível sincronizar dados de identidade de usuários e máquinas — incluindo credenciais, configurações do user pool e integrações de federação — para um user pool secundário em uma região de standby designada, em tempo quase real.

    Como funciona na prática

    A lógica é simples: você mantém um user pool principal em uma região e configura uma réplica em outra região de standby. Se houver uma interrupção na região primária, o tráfego pode ser redirecionado para o user pool secundário sem que os usuários precisem se autenticar novamente.

    Usuários que já estavam com sessão ativa continuam acessando suas aplicações normalmente. Usuários já cadastrados conseguem fazer login com as mesmas credenciais existentes. Não há impacto visível para o usuário final durante o processo de failover.

    Métodos de autenticação suportados na região secundária

    Todos os principais métodos de autenticação continuam funcionando na região de standby, incluindo:

    • Usuário e senha tradicionais
    • Federação com provedores de identidade social
    • Federação via SAML e OIDC (Linguagem de Marcação para Asserções de Segurança e Conexão OpenID)
    • Fluxos de autorização máquina a máquina

    Disponibilidade e regiões suportadas

    A replicação multi-região está disponível como um complemento pago para user pools nos planos de funcionalidades Essentials ou Plus. O recurso já está ativo nas seguintes regiões da AWS:

    • EUA Leste (Ohio e Norte da Virgínia)
    • EUA Oeste (Norte da Califórnia e Oregon)
    • Ásia-Pacífico (Mumbai, Seul, Singapura, Sydney e Tóquio)
    • Canadá (Central)
    • Europa (Frankfurt, Irlanda, Londres, Paris e Estocolmo)
    • América do Sul (São Paulo)

    A região de São Paulo já está incluída desde o lançamento, o que é uma boa notícia para equipes brasileiras que precisam de alta disponibilidade com conformidade de dados no país.

    Como começar a usar

    Para ativar a replicação multi-região, basta adicionar um user pool réplica usando o Console de Gerenciamento da AWS, a Interface de Linha de Comando (CLI) da AWS ou os Kits de Desenvolvimento de Software (SDKs) da AWS. Consulte a página de preços para detalhes de custos e o guia do desenvolvedor para instruções de configuração.

    Fonte

    Amazon Cognito now supports multi-Region replication (https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-cognito-multi-region/)

  • Personalize o login federado com o novo trigger Lambda do Amazon Cognito

    O desafio da federação de identidades

    O Amazon Cognito já permite que aplicações web e mobile autentiquem usuários de diversas formas: contas gerenciadas com senha, fluxos sem senha ou por meio de provedores de identidade (IdP) externos via SAML, OIDC (OpenID Connect) e provedores sociais como Google, Facebook, Apple e Login with Amazon.

    Para o usuário final, a federação significa menos senhas para lembrar e uma experiência de login mais fluida. Para fornecedores de Software como Serviço (SaaS) no modelo B2B (Business-to-Business), significa que os clientes corporativos mantêm o controle sobre suas próprias identidades. Mas a federação também traz desafios reais para desenvolvedores e equipes de segurança.

    O que acontece quando o provedor SAML de um cliente corporativo envia centenas de grupos que ultrapassam os limites de tamanho de atributos? Ou quando um usuário de e-commerce esquece que já tem uma conta e tenta entrar com um provedor social diferente, criando registros duplicados? Para resolver exatamente esses cenários, a AWS anunciou o inbound federation Lambda trigger para o Amazon Cognito.

    Como funciona o inbound federation Lambda trigger

    Esse trigger do AWS Lambda é invocado logo após o Amazon Cognito receber e validar a resposta do provedor de identidade externo. Nesse ponto, antes de qualquer criação ou atualização de perfil no user pool, a função Lambda recebe o payload com os dados do usuário e pode adicionar, modificar ou suprimir atributos conforme a necessidade da aplicação.

    O payload enviado à função Lambda inclui os parâmetros comuns dos triggers do Cognito (como userPoolId e clientId), o nome e o tipo do provedor externo utilizado (providerName e providerType), além dos atributos do usuário vindos do IdP. O formato desses atributos varia conforme o tipo de provedor: para SAML, chegam como um mapeamento JSON de chave-valor da asserção; para OIDC ou provedores sociais, chegam os tokens de acesso e os dados do endpoint /userinfo. Mais detalhes sobre os parâmetros do trigger estão disponíveis na documentação oficial.

    O fluxo completo funciona assim: o usuário acessa a aplicação, seleciona o IdP desejado na tela de login gerenciado (ou o cliente passa o parâmetro identity_provider diretamente), o Cognito encaminha a requisição ao IdP externo, o usuário se autentica, o IdP responde ao Cognito, que valida a assinatura criptográfica — e só então invoca o Lambda. Os atributos retornados pela função são mapeados para o perfil do usuário. Na sequência, o fluxo OAuth 2.0 continua normalmente com a emissão dos tokens. Vale lembrar que é uma boa prática de segurança usar clientes confidenciais (confidential clients) e a extensão Prova de Chave para Troca de Código (PKCE) sempre que possível.

    Casos de uso práticos

    Caso de uso 1: Filtragem de atributos de grupo excessivos (B2B)

    Em aplicações B2B e SaaS, é comum usar os grupos do IdP para determinar o nível de acesso do usuário dentro do serviço. O problema é que clientes corporativos podem inadvertidamente enviar todos os grupos do Active Directory a que um usuário pertence — o que pode chegar a centenas. Se esse atributo for mapeado para um atributo do Cognito, o limite de 2.048 caracteres por atributo pode ser facilmente ultrapassado, causando falha na autenticação.

    Outro problema comum é a inconsistência de formato: o mesmo grupo pode chegar como nome canônico (example.com/groups/myApp-readOnly), nome distinto (distinguished name, como cn=myApp-readOnly,OU=groups,DC=example,DC=com) ou texto simples (myApp-readOnly). Antes desse trigger, a solução exigia coordenação com o departamento de TI do cliente para modificar a configuração SAML na origem — um processo que podia levar semanas.

    Com o inbound federation Lambda trigger, é possível resolver isso programaticamente. O exemplo de código abaixo filtra o atributo de grupos para incluir apenas os relevantes para a aplicação e normaliza os diferentes formatos de nome:

    // Configure the group prefix to filter on (e.g. "App1-", "myApp-", etc.)
    // Change this to match the prefix your IdP uses for relevant group names.
    const GROUP_PREFIX = process.env.GROUP_PREFIX || 'myApp-';
    
    // The SAML attribute/claim name that contains group membership.
    // Common values: "groups", "memberOf", "http://schemas.xmlsoap.org/claims/Group", etc.
    const GROUP_ATTRIBUTE = process.env.GROUP_ATTRIBUTE || 'groups';
    
    /**
     * Extracts the short group name from common IdP formats:
     * - Plain text: "myApp-readOnly"
     * - Leading slash: "/myApp-readOnly"
     * - Canonical/URL: "example.com/groups/myApp-readOnly"
     * - Distinguished name (DN): "cn=myApp-readOnly,OU=groups,DC=example,DC=com"
     * Returns the last meaningful segment so all formats normalize to "myApp-readOnly".
     */
    function extractGroupName(raw) {
      let name = raw.trim();
      // Some IdPs prefix group names with "/" to indicate a top level group — strip it before format detection
      if (name.startsWith('/')) {
        name = name.substring(1);
      }
      // DN format — extract the CN (common name) value
      if (/^cn=/i.test(name) || /,\s*(ou|dc)=/i.test(name)) {
        const cnMatch = name.match(/^cn=([^,]+)/i);
        return cnMatch ? cnMatch[1].trim() : name;
      }
      // URL / path format — take the last segment after the final "/"
      if (name.includes('/')) {
        const segments = name.split('/').filter(Boolean);
        return segments[segments.length - 1];
      }
      return name;
    }
    
    export const handler = async (event) => {
      try {
        console.log('Full event:', JSON.stringify(event, null, 2));
        console.log('Provider type:', event.request?.providerType);
    
        // Initialize the response structure
        event.response = event.response || {};
    
        if (event.request?.providerType?.toLowerCase() === "saml") {
          const samlResponse = event.request.attributes?.samlResponse;
    
          if (samlResponse) {
            console.log('Original SAML Attributes:', JSON.stringify(samlResponse, null, 2));
    
            // Build the attribute map — you MUST include every attribute you want Cognito to retain. Anything omitted from userAttributesToMap is dropped.
            const mappedAttributes = {};
    
            Object.keys(samlResponse).forEach(key => {
              if (key === GROUP_ATTRIBUTE) {
                // Parse the groups JSON string from the SAML assertion
                let groupsArray = [];
                try {
                  groupsArray = JSON.parse(samlResponse[GROUP_ATTRIBUTE]);
                } catch (error) {
                  console.error(`Error parsing ${GROUP_ATTRIBUTE}:`, error);
                }
    
                // Normalize each group name, then filter to the configured prefix
                const normalizedGroups = groupsArray.map(extractGroupName);
                const filteredGroups = normalizedGroups.filter(group =>
                  group.startsWith(GROUP_PREFIX)
                );
    
                console.log(`Original ${GROUP_ATTRIBUTE}:`, groupsArray);
                console.log(`Normalized ${GROUP_ATTRIBUTE}:`, normalizedGroups);
                console.log(`Filtered ${GROUP_ATTRIBUTE}:`, filteredGroups);
    
                // Only include the groups attribute if there are matching groups
                if (filteredGroups.length > 0) {
                  mappedAttributes[GROUP_ATTRIBUTE] = filteredGroups.map(group => `'${group}'`).join(', ');
                }
              } else {
                // Pass all other SAML attributes through unchanged
                mappedAttributes[key] = samlResponse[key];
              }
            });
    
            event.response.userAttributesToMap = mappedAttributes;
            console.log('Response to Cognito:', JSON.stringify(event.response, null, 2));
          }
        }
    
        // For any unhandled provider type (or missing samlResponse), this intentionally does NOT set userAttributesToMap and tells Cognito to keep all original IdP attributes unchanged (no-op).
        // To handle OIDC or social providers, add additional logic here using event.request.attributes.idToken, .userInfo, and/or .tokenResponse.
        return event;
    
      } catch (error) {
        console.error('Error in Lambda:', error);
        throw error;
      }
    };

    Com essa abordagem, a lista de grupos é reduzida apenas ao que é relevante para a aplicação. A autenticação passa a funcionar sem depender de mudanças na configuração do IdP do cliente.

    Caso de uso 2: Vinculação automática de contas (B2C)

    Em aplicações voltadas ao consumidor, como lojas virtuais, é muito comum o seguinte cenário: um cliente cria uma conta com e-mail e senha para fazer uma compra. Meses depois, ele volta ao site, não lembra da conta e decide entrar pelo botão “Login with Amazon”. Sem vinculação de contas, o Cognito cria um novo perfil federado — e agora o mesmo cliente tem dois registros separados, com históricos de compras distintos e preferências fragmentadas.

    Embora a vinculação de contas também possa ser implementada em um trigger de pré-cadastro, o inbound federation trigger tem uma vantagem importante: ele é executado em todos os logins federados, não apenas no primeiro. Isso garante acesso contínuo aos atributos mais recentes do IdP e permite aplicar a lógica de vinculação de forma consistente.

    O exemplo abaixo demonstra como implementar essa vinculação automática. A lógica é direta: ao receber um login federado, a função extrai o e-mail do usuário, busca no user pool se já existe uma conta local com esse mesmo e-mail e, se encontrar, vincula a identidade federada a ela. Se não existir conta local, cria uma nova conta sem senha (confirmada, com autenticação por OTP via e-mail) e já a vincula ao provedor externo. Em ambos os casos, a conta local se torna a identidade primária — garantindo que o campo sub dos tokens JSON Web (JWT) seja sempre o mesmo, independentemente de como o usuário fizer login.

    import {
      CognitoIdentityProviderClient,
      ListUsersCommand,
      AdminCreateUserCommand,
      AdminLinkProviderForUserCommand
    } from "@aws-sdk/client-cognito-identity-provider";
    
    const client = new CognitoIdentityProviderClient();
    
    export const handler = async (event) => {
      try {
        console.log('Full event:', JSON.stringify(event, null, 2));
    
        const { userPoolId, request, userName } = event;
        const { providerName, providerType, attributes } = request;
    
        // Extract email and profile attributes based on provider type
        const { email, givenName, surname } = extractAttributes(providerType, attributes);
    
        if (!email) {
          console.error('No email found in federated response');
          return event;
        }
    
        console.log(`Processing federated login for email: ${email}, provider: ${providerName} (${providerType})`);
    
        // Check if a local user exists with this email
        const existingUser = await findLocalUserByEmail(userPoolId, email);
    
        if (existingUser) {
          console.log(`Found existing local user: ${existingUser.Username}`);
          if (isAlreadyLinked(existingUser, providerName, userName)) {
            console.log(`Federated identity ${providerName}:${userName} is already linked to ${existingUser.Username}, skipping link`);
          } else {
            await linkFederatedUser(userPoolId, existingUser.Username, providerName, userName);
          }
        } else {
          console.log('No existing local user found, creating new one');
          const newUsername = await createLocalUser(userPoolId, email, givenName, surname);
          await linkFederatedUser(userPoolId, newUsername, providerName, userName);
        }
    
        return event;
    
      } catch (error) {
        console.error('Error in account linking Lambda:', error);
        throw error;
      }
    };
    
    /**
     * Check if the federated identity is already linked to the local user by inspecting the identities attribute from the ListUsers response.
     */
    function isAlreadyLinked(user, providerName, federatedUsername) {
      const identities = user.Attributes?.find(a => a.Name === 'identities');
      if (!identities?.Value) return false;
      try {
        const parsed = JSON.parse(identities.Value);
        return parsed.some(id => id.providerName === providerName && id.userId === federatedUsername);
      } catch {
        return false;
      }
    }
    
    /**
     * Extract email and profile attributes based on provider type.
     * - SAML: attributes come from samlResponse
     * - OIDC/Social: attributes come from userInfo, falling back to idToken (if one exists)
     */
    function extractAttributes(providerType, attributes) {
      if (providerType?.toLowerCase() === 'saml') {
        const saml = attributes?.samlResponse;
        return {
          email: saml?.email || null,
          givenName: saml?.givenName || '',
          surname: saml?.surname || ''
        };
      }
      // OIDC and social providers: prefer userInfo, fall back to idToken
      const userInfo = attributes?.userInfo;
      const idToken = attributes?.idToken;
      const source = userInfo?.email ? userInfo : idToken;
      return {
        email: source?.email || null,
        givenName: source?.given_name || '',
        surname: source?.family_name || ''
      };
    }
    
    /**
     * Find a local Cognito user (not EXTERNAL_PROVIDER) by email address.
     */
    async function findLocalUserByEmail(userPoolId, email) {
      try {
        const command = new ListUsersCommand({
          UserPoolId: userPoolId,
          Filter: `email = "${email}"`
        });
        const response = await client.send(command);
        console.log('ListUsers response:', JSON.stringify(response, null, 2));
    
        if (!response.Users || response.Users.length === 0) {
          return null;
        }
        // Find the first user that is a true local account (not a federated-only profile)
        const localUser = response.Users.find(u => u.UserStatus !== 'EXTERNAL_PROVIDER');
        return localUser || null;
      } catch (error) {
        console.error('Error finding user by email:', error);
        throw error;
      }
    }
    
    /**
     * Create a new local Cognito user without a password.
     * With passwordless (email OTP) enabled on the user pool, the user is created with UserStatus=CONFIRMED and no FORCE_CHANGE_PASSWORD state.
     */
    async function createLocalUser(userPoolId, email, givenName, surname) {
      try {
        const userAttributes = [
          { Name: 'email', Value: email }
        ];
        if (givenName) userAttributes.push({ Name: 'given_name', Value: givenName });
        if (surname) userAttributes.push({ Name: 'family_name', Value: surname });
    
        const command = new AdminCreateUserCommand({
          UserPoolId: userPoolId,
          Username: email,
          UserAttributes: userAttributes,
          MessageAction: 'SUPPRESS'
        });
    
        const response = await client.send(command);
        console.log(`Created local user: ${email}`, JSON.stringify(response, null, 2));
        return email;
      } catch (error) {
        console.error('Error creating local user:', error);
        throw error;
      }
    }
    
    /**
     * Link a federated user identity to a local Cognito user.
     * The local user becomes the primary profile — all future JWTs will represent this local user regardless of sign-in method.
     */
    async function linkFederatedUser(userPoolId, localUsername, providerName, federatedUsername) {
      try {
        const command = new AdminLinkProviderForUserCommand({
          UserPoolId: userPoolId,
          DestinationUser: {
            ProviderName: 'Cognito',
            ProviderAttributeValue: localUsername
          },
          SourceUser: {
            ProviderName: providerName,
            ProviderAttributeName: 'Cognito_Subject',
            ProviderAttributeValue: federatedUsername
          }
        });
    
        const response = await client.send(command);
        console.log(`Linked federated user ${federatedUsername} to local user ${localUsername}`);
        console.log('Link response:', JSON.stringify(response, null, 2));
        return response;
      } catch (error) {
        if (error.name === 'AliasExistsException' || error.message?.includes('already linked')) {
          console.log(`User already linked: ${error.message}`);
          return;
        }
        console.error('Error linking federated user:', error);
        throw error;
      }
    }

    Um detalhe importante: o recurso Hide My Email da Apple gera um endereço de e-mail único por aplicativo, o que impede a vinculação automática por e-mail. Nesses casos, a aplicação precisará implementar um fluxo de vinculação iniciado pelo próprio usuário, pedindo que ele confirme a propriedade de ambos os endereços antes de chamar a API AdminLinkProviderForUser.

    Boas práticas de implementação

    Ao colocar esses padrões em prática, algumas orientações merecem atenção:

    • Tempo de execução: a função Lambda deve concluir em até 5 segundos. Otimize para velocidade e, se fizer chamadas externas — como consultas ao Amazon DynamoDB ou APIs externas — implemente cache sempre que possível.
    • Tratamento de erros: se a função lançar uma exceção, a autenticação pode falhar para o usuário. Considere registrar o erro em log e retornar o evento original ao Cognito em vez de interromper o fluxo. Consulte as boas práticas para funções Lambda para mais orientações.
    • Observabilidade: monitore a performance da função com as métricas do Amazon CloudWatch. Configure alertas para erros, timeouts e throttling. Durante o desenvolvimento inicial, capture payloads de exemplo a partir de um grupo de logs do CloudWatch — eles são valiosos para testes locais e depuração, especialmente porque diferentes IdPs (SAML e OIDC, em particular) podem responder com formatos e valores de atributos bastante variados.
    • Alertas de segurança: configure alarmes no CloudWatch para notificar as equipes de segurança e operações caso haja pico de falhas de autenticação, o que pode indicar tentativa de ataque, má configuração ou oportunidade de otimização do trigger.

    Disponibilidade e próximos passos

    O novo trigger está disponível em todas as regiões AWS onde o Amazon Cognito opera e funciona com provedores SAML, OIDC e provedores sociais suportados. Para saber mais sobre esse e outros triggers disponíveis, a AWS disponibiliza o Guia do Desenvolvedor do Amazon Cognito. Dúvidas e discussões sobre casos de uso específicos podem ser levadas ao AWS re:Post.

    Fonte

    Customize federated sign-in with new Amazon Cognito Lambda trigger (https://aws.amazon.com/blogs/security/customize-federated-sign-in-with-new-amazon-cognito-lambda-trigger/)

  • NVIDIA Nemotron 3 Ultra já está disponível no Amazon SageMaker JumpStart

    Disponibilidade imediata no SageMaker JumpStart

    A AWS anunciou a disponibilidade do NVIDIA Nemotron 3 Ultra no Amazon SageMaker JumpStart desde o primeiro dia de lançamento do modelo. Com isso, equipes que trabalham com Inteligência Artificial (IA) agêntica agora podem implantar esse modelo de grande porte com um único clique, sem precisar configurar infraestrutura ou frameworks de serviço manualmente.

    O Nemotron 3 Ultra é um modelo de linguagem aberto desenvolvido pela NVIDIA com foco em raciocínio de fronteira e orquestração em agentes autônomos de longa duração. Segundo a AWS, ele entrega inferência 5x mais rápida e até 30% de redução de custos para cargas de trabalho agênticas em relação a modelos densos de qualidade equivalente.

    O que é o NVIDIA Nemotron 3 Ultra

    O Nemotron 3 Ultra é um Modelo de Linguagem de Grande Escala (LLM) de código aberto com 550 bilhões de parâmetros totais e 55 bilhões de parâmetros ativos. Ele é construído sobre uma arquitetura híbrida Transformer-Mamba de Mistura de Especialistas (MoE), projetada para entregar inteligência de fronteira com uma fração do custo computacional de modelos densos de qualidade equivalente.

    A tabela abaixo resume as especificações técnicas do modelo:

    • Arquitetura: Transformer-Mamba MoE híbrido
    • Parâmetros: 550B totais / 55B ativos
    • Comprimento de contexto: Até 1 milhão de tokens
    • Entrada / Saída: Texto para texto
    • Precisão: NVFP4
    • Velocidade de inferência: 5x mais rápido para fluxos de agentes de longa duração
    • Custo: Até 30% menor para tarefas agênticas complexas

    O modelo é otimizado para o formato NVFP4, o que o torna significativamente mais rápido e econômico para hospedar.

    Imagem original — fonte: Aws

    Por que agentes de IA precisam de modelos construídos para isso

    Diferente de um chatbot comum que responde uma vez e encerra a interação, agentes de IA planejam, chamam ferramentas, delegam tarefas para sub-agentes, verificam resultados e continuam operando ao longo de centenas de turnos. Cada etapa adiciona tokens e demanda computacional — o que torna as métricas relevantes bem diferentes das de um modelo conversacional simples. O que importa aqui é a conclusão de tarefas com precisão útil, o tempo total para finalizar e o custo por tarefa.

    O Nemotron 3 Ultra foi desenvolvido exatamente para esse cenário. Sua arquitetura MoE ativa apenas 55 bilhões dos 550 bilhões de parâmetros a cada passagem direta pelo modelo, mantendo a taxa de transferência elevada mesmo com contextos de até um milhão de tokens. Na prática, isso significa que agentes conseguem sustentar ciclos de planejamento, chamadas de ferramentas e auto-correção ao longo de centenas de turnos, preservando coerência e controlando custos.

    Casos de uso empresariais

    O Nemotron 3 Ultra se destaca especialmente em cargas de trabalho que exigem raciocínio encadeado e sustentado por múltiplas etapas:

    • Orquestradores de agentes: coordenam múltiplos sub-agentes e gerenciam estado ao longo de longas cadeias de chamadas de ferramentas
    • Agentes de codificação: geram, testam, depuram e iteram sobre código em repositórios de grande porte
    • Pesquisa aprofundada: sintetizam informações de múltiplas fontes e mantêm raciocínio coerente em contextos estendidos
    • Fluxos de trabalho corporativos complexos: automatizam processos de negócio com múltiplas etapas, ramificações de decisão e recuperação de erros

    Como implantar no SageMaker JumpStart

    O modelo pode ser implantado pelo Amazon SageMaker JumpStart com experiência de um clique, eliminando a necessidade de gerenciar infraestrutura ou configurar frameworks de serviço.

    Pré-requisitos

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

    • Uma conta AWS ativa
    • Permissões adequadas para o SageMaker JumpStart
    • Cota de serviço suficiente para instâncias GPU — por exemplo, ml.p5en.48xlarge, ml.p5.48xlarge ou ml.g7e.48xlarge

    Atenção: a implantação desse modelo cria um endpoint no SageMaker que gera cobranças enquanto estiver em execução. Instâncias GPU como a ml.p5en.48xlarge podem custar vários dólares por hora. Consulte a página de preços do Amazon SageMaker AI para detalhes. Lembre-se de excluir o endpoint ao terminar para evitar cobranças contínuas.

    Implantação pelo SageMaker Studio

    1. Abra o Amazon SageMaker Studio
    2. No painel de navegação à esquerda, selecione SageMaker JumpStart
    3. Pesquise por Nemotron 3 Ultra
    4. Selecione o cartão do modelo
    5. Clique em Deploy
    6. Selecione o tipo de instância (os tipos suportados são ml.p5en.48xlarge, ml.p5.48xlarge ou ml.g7e.48xlarge)
    7. Revise as configurações de implantação (os padrões são suficientes para a maioria dos casos)
    8. Clique em Deploy para criar o endpoint
    9. Aguarde o status do endpoint mudar para InService antes de prosseguir para a inferência

    Implantação pelo SDK Python do SageMaker

    import sagemaker
    from sagemaker.jumpstart.model import JumpStartModel
    
    model = JumpStartModel(
        model_id="huggingface-reasoning-nvidia-nemotron-3-ultra-550b-a55b-nvfp4",
        # Verify in SageMaker JumpStart model card
        role=sagemaker.get_execution_role(),
        # Your SageMaker execution role ARN
    )
    
    predictor = model.deploy(accept_eula=True)

    Executando inferência

    payload = {
        "messages": [{
            "role": "user",
            "content": "Break this task into subtasks, identify which tools are needed, and run them in sequence."
        }],
        "max_tokens": 20480,
        "temperature": 0.6,
        "top_p": 0.95,
    }
    
    response = predictor.predict(payload)
    print(response["choices"][0]["message"]["content"])

    Limpeza do ambiente

    Para evitar cobranças desnecessárias, exclua o endpoint do SageMaker ao finalizar:

    predictor.delete_endpoint()

    Conclusão

    O NVIDIA Nemotron 3 Ultra chega ao Amazon SageMaker JumpStart como uma opção de raciocínio de fronteira com inferência 5x mais rápida e até 30% de redução de custos para cargas de trabalho agênticas. Sua arquitetura híbrida Transformer-Mamba MoE e a janela de contexto de um milhão de tokens fazem dele um modelo construído especificamente para o raciocínio sustentado e de múltiplas etapas que agentes em produção exigem — seja para orquestração de agentes, codificação, pesquisa aprofundada ou automação corporativa complexa. O modelo já está disponível para implantação pelo SageMaker JumpStart.

    Fonte

    NVIDIA Nemotron 3 Ultra now available on Amazon SageMaker JumpStart (https://aws.amazon.com/blogs/machine-learning/nvidia-nemotron-3-ultra-now-available-on-amazon-sagemaker-jumpstart/)

  • AWS Step Functions adiciona etapa de raciocínio agêntico com AgentCore

    O que foi anunciado

    A AWS anunciou que o AWS Step Functions agora suporta a adição de etapas de raciocínio agêntico em workflows, por meio de uma integração otimizada com o harness gerenciado do Amazon Bedrock AgentCore — recurso atualmente disponível em prévia.

    Contexto: o que são essas ferramentas

    O AWS Step Functions é um serviço de orquestração visual que conecta serviços da AWS em fluxos de trabalho automatizados, com tratamento de erros embutido, execução paralela e suporte a etapas de aprovação humana. Já o harness do AgentCore funciona como um ambiente gerenciado onde você declara um agente via configuração — especificando o modelo, as ferramentas e o comportamento desejado — e o AgentCore cuida de executar o loop do agente do início ao fim.

    O que essa integração permite fazer

    Com essa novidade, equipes de desenvolvimento podem incorporar tarefas de raciocínio automatizado diretamente nos seus workflows. Alguns exemplos práticos mencionados pela AWS incluem:

    • Classificação automática de documentos
    • Extração de informações de formulários não estruturados

    Além disso, é possível executar múltiplos agentes em paralelo ou em sequência em diferentes pontos de decisão de um mesmo workflow, e ainda inserir uma etapa de aprovação humana antes de ações críticas.

    Observabilidade e rastreamento

    O histórico de execução do workflow registra entrada, saída, consumo de tokens e duração de cada agente, com links para os detalhes de cada turno no Amazon CloudWatch. Isso permite rastrear e auditar cada decisão tomada pelo agente ao longo do fluxo.

    Flexibilidade na configuração

    É possível reutilizar um harness já existente ou criar um novo diretamente pelo Workflow Studio, o construtor visual do Step Functions. Com substituições por invocação — como modelo, prompt de sistema e ferramentas —, o agente pode ser adaptado ao contexto de cada workflow sem duplicar configurações. O contexto do agente também pode ser persistido entre invocações usando um ID de sessão, que funciona dentro ou entre execuções de workflow.

    Disponibilidade e preços

    A integração está disponível nas regiões da AWS onde a prévia do harness do AgentCore já está ativa: Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Frankfurt) e Ásia-Pacífico (Sydney). A cobrança segue o modelo padrão do Step Functions para execução de workflows, sem taxas adicionais pela integração em si. Os custos de inferência de modelos e recursos do AgentCore seguem a precificação padrão do Amazon Bedrock e do AgentCore.

    Para saber mais sobre como adicionar raciocínio agêntico aos seus workflows, consulte a documentação oficial do AWS Step Functions.

    Fonte

    AWS Step Functions adds AgentCore-powered agentic reasoning step (https://aws.amazon.com/about-aws/whats-new/2026/06/aws-step-functions-agentcore/)

  • Amazon SageMaker Data Agent agora suporta histórico de conversas

    Continuidade nas análises de dados com o SageMaker Data Agent

    A AWS anunciou uma atualização relevante para equipes de dados: o Amazon SageMaker Data Agent, disponível no SageMaker Unified Studio, passa a suportar histórico de conversas. A novidade permite que analistas e cientistas de dados mantenham o contexto de suas sessões analíticas entre diferentes momentos de trabalho, sem precisar reconstruir o raciocínio do zero a cada vez.

    O que muda na prática

    Antes dessa atualização, cada sessão com o agente começava do zero. Agora, profissionais podem retomar análises de múltiplas etapas exatamente de onde pararam, reutilizar código gerado pelo agente em sessões anteriores e revisitar interações de troubleshooting feitas em execuções passadas de notebooks ou no Query Editor.

    O acesso ao histórico é simples: um ícone de relógio no cabeçalho do painel de chat abre uma lista rolável com todas as conversas anteriores. Cada conversa recebe automaticamente um título e um registro de data e hora, facilitando a identificação rápida da sessão desejada.

    Por que isso importa para times de dados

    Em ambientes onde analistas e cientistas de dados trabalham em múltiplos projetos de forma simultânea, perder o fio da meada entre sessões é um problema real. Com o histórico de conversas, o contexto fica preservado — o que significa menos retrabalho, mais agilidade e foco no que realmente importa: extrair insights dos dados.

    A funcionalidade é especialmente útil em análises complexas, que naturalmente se desenvolvem ao longo de várias sessões de trabalho, e em fluxos de troubleshooting que exigem revisitar decisões tomadas anteriormente.

    Disponibilidade

    O histórico de conversas já está disponível em todas as regiões da AWS onde o Amazon SageMaker Data Agent está disponível. Para explorar mais sobre o serviço e aprender a utilizar essa funcionalidade nos seus fluxos de trabalho analíticos, a AWS disponibiliza a página do produto Amazon SageMaker e a documentação do Amazon SageMaker Unified Studio.

    Fonte

    Amazon SageMaker Data Agent now supports conversation history (https://aws.amazon.com/about-aws/whats-new/2026/06/amazon-sagemaker-data-agent/)

  • Como construir operações de IA autônomas no Amazon Bedrock em escala

    O desafio de operar IA generativa em escala

    O Amazon Bedrock já é a base de IA generativa de mais de 100.000 organizações no mundo. À medida que essas organizações expandem seus workloads — adotando múltiplos modelos fundacionais em produção — o gerenciamento operacional proativo se torna um fator crítico para manter a velocidade de inovação.

    O problema é conhecido: equipes de Engenharia de Confiabilidade de Sites de IA (AI SRE, na sigla em inglês) frequentemente ficam sabendo de problemas operacionais apenas quando usuários de negócio reportam impacto. Isso força uma postura reativa, com pouco tempo para investigar antes que o problema escale. Além disso, cada novo modelo adotado exige sua própria configuração de monitoramento, e cada aumento de cota aprovado demanda recálculo manual dos limites de alarme no Amazon CloudWatch.

    Para endereçar esses desafios, a AWS publicou uma solução chamada Amazon Bedrock Ops Alert: um sistema de monitoramento automatizado em três camadas que detecta problemas proativamente, ajusta limites dinamicamente, classifica alarmes por categoria e abre chamados de suporte com contexto rico — tudo sem intervenção manual.

    Otimização antes de aumentar cotas

    Antes de entrar na solução de monitoramento em si, o artigo original destaca que muitas necessidades de capacidade podem ser resolvidas com otimização de workload, sem precisar aumentar cotas.

    A inferência entre regiões (cross-region inference) ajuda a absorver picos de tráfego não planejados distribuindo o processamento entre Regiões AWS. A inferência global entre regiões (global cross-region inference) vai além, roteando requisições para Regiões comerciais ao redor do mundo, oferecendo maior throughput e aproximadamente 10% de economia em custos em relação à inferência geográfica entre regiões.

    O cache de prompts (prompt caching) é outro recurso que reduz latência e custos de tokens de entrada. Ao armazenar partes do contexto em cache, o modelo evita reprocessar entradas repetidas — o que pode reduzir custos em até 90% e latência em até 85%, diminuindo diretamente o consumo de tokens por minuto. O post Como usar efetivamente o cache de prompts no Amazon Bedrock detalha como estruturar prompts para maximizar os acertos de cache.

    Técnicas adicionais como inferência em lote e o Roteamento Inteligente de Prompts (Intelligent Prompt Routing) também reduzem o overhead por requisição ao selecionar dinamicamente o modelo mais econômico para cada chamada.

    Visão geral da solução: Amazon Bedrock Ops Alert

    O Amazon Bedrock Ops Alert é uma solução baseada em AWS CloudFormation que implementa observabilidade abrangente de workloads de IA generativa por meio de três camadas de detecção complementares. A solução utiliza alarmes do Amazon CloudWatch, funções AWS Lambda, Amazon Simple Notification Service (Amazon SNS), a API de Cotas de Serviço (Service Quotas) e a API do AWS Support.

    O fluxo de funcionamento é o seguinte: durante a implantação, uma função Lambda (Calculadora de Cotas) consulta a API de Cotas de Serviço para obter os valores atuais de Requisições por Minuto (RPM) e Tokens por Minuto (TPM), calculando os limites de alarme com base em percentuais configuráveis. Os limites calculados são armazenados no AWS Systems Manager Parameter Store, e os contatos de e-mail da equipe de AI SRE ficam no AWS Secrets Manager.

    O Amazon Bedrock publica métricas de tempo de execução — invocações, contagens de tokens, erros, throttles e latência — no CloudWatch. A partir daí, as três camadas de monitoramento atuam de forma independente.

    As três camadas de monitoramento

    Camada 1: Detecção de erros críticos

    A primeira camada monitora métricas de erro que indicam problemas operacionais imediatos:

    • Alarme ClientErrors: monitora a métrica InvocationClientErrors para identificar requisições rejeitadas por problemas do lado do cliente, como cotas excedidas, erros de validação ou parâmetros inválidos.
    • Alarme ServerErrors: monitora a métrica InvocationServerErrors para identificar erros do lado do serviço que podem exigir investigação.
    • Alarme Throttles: monitora a métrica InvocationThrottles para identificar requisições explicitamente limitadas quando o limite de taxa é atingido.

    Configurar o limite de erro em zero com um único período de avaliação dispara alertas imediatos ao primeiro erro; valores mais altos oferecem tolerância a problemas transitórios.

    Camada 2: Monitoramento de taxa de uso

    A segunda camada monitora métricas de uso em relação a limites calculados dinamicamente, fornecendo alertas proativos antes de atingir os limites de cota:

    • Alarme HighInvocationRate: monitora a métrica Invocations e dispara quando a taxa de requisições da API ultrapassa o percentual configurado do limite de RPM.
    • Alarme HighTPMQuotaUsage: monitora a métrica EstimatedTPMQuotaUsage e dispara quando o consumo estimado de cota de TPM ultrapassa o percentual configurado (inclui tokens de escrita em cache e multiplicadores de consumo de saída).
    • Alarme HighLatency: monitora a métrica InvocationLatency e dispara quando o tempo de resposta ultrapassa o limite configurado.

    Os limites são calculados automaticamente a partir da API de Cotas de Serviço. Por exemplo: com um percentual de 80% e uma cota de 100 RPM, o alarme de RPM dispara em 80 requisições por minuto. Para TPM, o mesmo percentual de 80% sobre uma cota de 1.000.000 TPM resulta em um limite efetivo de 800.000 tokens.

    Camada 3: Detecção de anomalias

    A terceira camada usa a detecção de anomalias do CloudWatch (machine learning) para identificar padrões incomuns:

    • InvocationAnomaly: identifica mudanças incomuns no volume de requisições.
    • InputTokenAnomaly: identifica uso anormal de tokens de entrada.
    • OutputTokenAnomaly: identifica uso anormal de tokens de saída.
    • LatencyAnomaly: identifica tendências de degradação de performance.

    O machine learning do CloudWatch analisa dados históricos para estabelecer baselines de comportamento normal e alerta quando as métricas atuais excedem o limite superior esperado. A solução monitora apenas desvios para cima — quedas de uso são sinais positivos que não exigem intervenção. Essa abordagem detecta problemas que limites estáticos não capturariam, como aumentos graduais de consumo de cota ou picos inesperados de uso.

    Gerenciamento automatizado de limites

    Um dos pontos mais práticos da solução é a recalculação automática de limites de alarme. Uma regra do Amazon EventBridge dispara periodicamente uma função Lambda (Atualizadora de Alarmes) que consulta a API de Cotas de Serviço, recalcula os limites e atualiza os alarmes do CloudWatch. Os limites calculados são armazenados no Parameter Store, recurso do AWS Systems Manager, com timestamps para rastreamento de histórico.

    Isso elimina o trabalho manual de recalcular e atualizar configurações de alarme toda vez que um aumento de cota é aprovado. O sistema se autocorrige.

    Abertura automática de chamados de suporte

    Quando um alarme composto é disparado, a solução pode criar automaticamente um chamado no AWS Support — recurso que exige plano Business ou Enterprise. O processo funciona assim:

    1. A função Lambda consulta o estado do alarme composto e identifica quais alarmes filhos dispararam.
    2. Ela lê os limites armazenados no Parameter Store e compara o uso de pico dos últimos 14 dias com esses limites para determinar o cenário do chamado.
    3. O alarme é classificado como relacionado a cota ou não relacionado a cota.
    4. A função verifica se já existe um chamado aberto da mesma categoria (janela configurável, padrão de 60 dias). Se existir, acrescenta uma comunicação ao chamado existente; caso contrário, cria um novo.

    A classificação dos alarmes determina o tipo de chamado:

    • Alarmes específicos de RPM (HighInvocationRate, InvocationAnomaly): solicitam aumento de cota de RPM apenas.
    • Alarmes específicos de TPM (HighTPMQuotaUsage, InputTokenAnomaly, OutputTokenAnomaly): solicitam aumento de cota de TPM apenas.
    • Alarmes de cota indeterminada (Throttles, ClientErrors): solicitam aumento de ambas as cotas.
    • Alarmes não relacionados a cota (ServerErrors, HighLatency, LatencyAnomaly): geram um chamado de “Solicitação de Investigação” sem detalhes de aumento de cota.

    Árvore de decisão para validação de uso

    Antes de criar um chamado relacionado a cota, a solução compara o uso de pico dos últimos 14 dias com os limites armazenados para determinar a resposta adequada:

    • Modelo novo (pico de RPM = 0 e pico de TPM = 0): o chamado inclui detalhes de aumento de cota, observando que o modelo foi implantado recentemente com histórico de uso limitado.
    • Uso alto (pico atinge ou supera o limite): o chamado inclui dados de uso confirmando tendências sustentadas de consumo. Para severidade crítica, inclui nota indicando que o uso está se aproximando dos limites de taxa.
    • Uso baixo (pico abaixo do limite): a solução envia notificação por e-mail para a equipe investigar a causa raiz primeiro. O chamado inclui detalhes de aumento de cota apenas como referência, caso a investigação confirme a necessidade.

    Essa validação garante que os chamados de aumento de cota reflitam padrões reais de uso, enquanto ainda fornecem contexto para o engenheiro de suporte.

    Notificações e prevenção de chamados duplicados

    Após o processamento do chamado, a solução envia notificações por e-mail formatadas para as partes interessadas por meio de um segundo tópico SNS. Se um chamado foi criado, o e-mail inclui o ID do caso e um link direto para o console do AWS Support. O conteúdo do e-mail é adaptado para a perspectiva da equipe de AI SRE, enquanto o conteúdo do chamado é adaptado para o engenheiro de suporte.

    A detecção de duplicatas com consciência de categoria impede a criação de chamados redundantes: um chamado de solicitação de cota para um tipo de alarme não bloqueia um chamado de investigação para um tipo diferente, e vice-versa. Os parâmetros dos chamados ficam no Parameter Store e podem ser atualizados sem reimplantar a stack do CloudFormation.

    Resultados esperados

    Segundo a AWS, o Amazon Bedrock Ops Alert entrega os seguintes benefícios:

    • Maior eficiência operacional: a equipe de AI SRE migra do monitoramento manual para trabalhos de maior valor.
    • Classificação inteligente de alarmes: alarmes não relacionados a cota são roteados para chamados de investigação, acelerando a resolução de causa raiz.
    • Chamados validados por uso: a solução confirma que as solicitações de aumento de cota refletem padrões reais de uso.
    • Redução do tempo médio de resolução (MTTR): a criação automática de chamados reduz o esforço manual de horas para minutos.
    • Gestão proativa de cotas: solicitações de aumento são iniciadas antes de atingir os limites em produção.
    • Sem manutenção manual de limites: os alarmes permanecem precisos conforme as cotas aprovadas mudam, sem intervenção de engenheiros.
    • Base escalável: modelos adicionais do Bedrock podem ser monitorados implantando instâncias adicionais da stack.

    Como implantar a solução

    Para instruções detalhadas de implantação — incluindo pré-requisitos, empacotamento, implantação da stack do CloudFormation, referência de parâmetros, testes e limpeza — a AWS disponibilizou o Guia de Implantação no repositório do GitHub. Para começar, acesse o repositório do Amazon Bedrock Ops Alert no GitHub. Para saber mais sobre cotas do Amazon Bedrock, consulte endpoints e cotas do Amazon Bedrock.

    Conclusão

    O monitoramento de IA generativa é diferente do monitoramento de infraestrutura tradicional. À medida que equipes não técnicas passam a usar aplicações de IA generativa construídas sobre modelos hospedados no Amazon Bedrock, as organizações precisam repensar sua estratégia de monitoramento operacional para acompanhar essa nova realidade.

    O Amazon Bedrock Ops Alert representa uma abordagem que combina detecção de erros críticos, monitoramento de taxa de uso e reconhecimento de padrões anômalos em uma única solução nativa AWS. A classificação inteligente de alarmes, a validação de uso antes de abrir chamados e a prevenção de duplicatas mantêm as investigações focadas. Juntas, essas capacidades movem as operações de um modelo reativo para um modelo proativo, reduzindo o MTTR e liberando as equipes de AI SRE para focar no que realmente importa: construir aplicações de IA generativa.

    Fonte

    How to build self-driving AI operations on Amazon Bedrock at scale (https://aws.amazon.com/blogs/machine-learning/how-to-build-self-driving-ai-operations-on-amazon-bedrock-at-scale/)