Category: Uncategorized

  • AWS HealthOmics passa a suportar políticas de sessão IAM

    O que mudou no AWS HealthOmics

    A AWS anunciou que o AWS HealthOmics passou a suportar políticas de sessão IAM (Gerenciamento de Identidade e Acesso). Com essa novidade, equipes de saúde e ciências da vida conseguem restringir permissões para execuções individuais de workflows sem precisar criar e gerenciar múltiplas roles IAM separadas.

    Até então, não havia como reduzir dinamicamente o escopo de permissões para uma única execução. Isso obrigava times a criarem uma role IAM dedicada para cada tenant ou para cada run — uma abordagem que aumenta a complexidade operacional e o esforço de manutenção.

    Como funcionam as políticas de sessão IAM

    Uma política de sessão IAM é uma política inline que limita as permissões máximas de uma execução sem precisar alterar a role de serviço subjacente. Na prática, as permissões efetivas durante uma execução passam a ser a interseção entre o que a política baseada em identidade permite e o que a política de sessão temporária permite.

    Ou seja: a política de sessão nunca amplia permissões — ela apenas restringe. Isso garante um modelo de segurança mais granular e controlado para cada run.

    Casos de uso práticos

    A AWS destaca alguns cenários em que esse suporte é especialmente valioso:

    • Aplicações multi-tenant: é possível passar uma política de sessão que limita o acesso de uma execução apenas aos buckets do Amazon S3 daquele tenant específico, sem precisar provisionar uma role IAM dedicada para cada cliente.
    • Acesso temporário a objetos específicos: times podem conceder acesso temporário a objetos específicos do Amazon S3 para uma única execução.
    • Isolamento de recursos sensíveis: o acesso a recursos sensíveis pode ser isolado por execução, reduzindo a superfície de exposição.

    Disponibilidade

    O suporte a políticas de sessão IAM já está disponível em todas as regiões AWS onde o AWS HealthOmics opera: Leste dos EUA (Norte da Virgínia e Ohio), Oeste dos EUA (Oregon), Europa (Frankfurt, Irlanda e Londres), Israel (Tel Aviv) e Ásia-Pacífico (Tóquio, Singapura e Seul).

    Vale lembrar que o AWS HealthOmics é um serviço elegível para HIPAA, voltado para clientes das áreas de saúde e ciências da vida que precisam acelerar descobertas científicas com workflows de bioinformática totalmente gerenciados.

    Para saber como configurar políticas de sessão IAM nas suas execuções, consulte a seção de permissões do Guia do Usuário do AWS HealthOmics.

    Fonte

    AWS HealthOmics now supports IAM session policies (https://aws.amazon.com/about-aws/whats-new/2026/09/omics-iam-session-policy/)

  • Como arquitetar uma landing zone segura na AWS European Sovereign Cloud

    A EUSC é uma partição independente — e isso muda tudo

    A AWS European Sovereign Cloud (EUSC) é uma nuvem independente, fisicamente e logicamente separada das demais regiões AWS, operada inteiramente dentro da União Europeia. Ela oferece os mesmos serviços, funcionalidades e APIs das regiões comerciais da AWS, mas funciona como uma partição distinta: aws-eusc. Essa partição tem seu próprio plano de controle, AWS Identity and Access Management (IAM), faturamento, console e endpoints de serviço.

    A AWS organiza suas regiões em partições. As regiões comerciais estão na partição aws, as regiões da China em aws-cn, as GovCloud em aws-us-gov, e agora a EUSC em aws-eusc — com sua primeira região em Brandemburgo, Alemanha (eusc-de-east-1). Compreender esse conceito de partição é a chave para responder corretamente perguntas sobre consolidação de faturamento, SSO, roles entre contas, AWS Direct Connect e distribuição de imagens.

    Algumas diferenças práticas entre a AWS comercial e a EUSC merecem atenção:

    • O prefixo de ARN muda de arn:aws: para arn:aws-eusc:
    • O domínio dos endpoints passa de amazonaws.com para amazonaws.eu
    • O AWS Organizations, o IAM Identity Center e o faturamento são instâncias completamente separadas
    • Funcionalidades entre partições — como sts:AssumeRole, VPC peering, Transit Gateway, AWS RAM e replicação S3 — não estão disponíveis entre aws e aws-eusc

    Isso significa que qualquer integração entre a nuvem comercial e a EUSC deve acontecer na camada de rede ou de API, com credenciais separadas para cada partição.

    IaC com consciência de partição

    Um dos erros mais comuns ao migrar infraestrutura para a EUSC é deixar ARNs com arn:aws: fixos no código. A AWS recomenda que os scripts Terraform e templates CloudFormation derivem a partição dinamicamente, garantindo que o mesmo código funcione tanto em regiões comerciais quanto na EUSC.

    No Terraform, o padrão é usar o data source aws_partition para construir ARNs de forma dinâmica:

    # Terraform: partition-aware ARNs (works unchanged in aws and aws-eusc)
    data "aws_partition" "current" {}
    data "aws_region" "current" {}
    data "aws_caller_identity" "current" {}
    data "aws_organizations_organization" "current" {}
    
    locals {
      partition = data.aws_partition.current.partition  # "aws" or "aws-eusc"
      account_id = data.aws_caller_identity.current.account_id
      org_id     = data.aws_organizations_organization.current.id
      ecs_task_execution_policy_arn = "arn:${local.partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
      central_logs_bucket_arn       = "arn:${local.partition}:s3:::${local.org_id}-central-logs"
    }
    
    resource "aws_iam_role" "amazon_ecs_role" {
      name = "AmazonECSrole"
      assume_role_policy = jsonencode({
        Version = "2012-10-17"
        Statement = [
          {
            Action = "sts:AssumeRole"
            Effect = "Allow"
            Sid    = ""
            Principal = {
              # IAM service principals are "amazonaws.com" across all partitions,
              # this stays literal (do NOT use ${AWS::URLSuffix} here).
              Service = "ecs-tasks.amazonaws.com"
            }
          },
        ]
      })
    }
    
    resource "aws_iam_role_policy_attachment" "amazon_ecs_role_attach" {
      role       = "AmazonECSrole"
      # Use ${local.partition} rather than hardcoding "aws" in the ARN.
      policy_arn = "arn:${local.partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
    }

    No AWS CloudFormation, o pseudo-parâmetro ${AWS::Partition} cumpre o mesmo papel — nunca se deve fixar o valor literal aws em ARNs dentro de templates:

    # CloudFormation: use the AWS::Partition pseudo parameter, never a literal "aws"
    AWSTemplateFormatVersion: "2010-09-09"
    Description: >-
      Creates an ECS task execution role. Demonstrates using the ${AWS::Partition}
      pseudo parameter in ARNs instead of hardcoding "aws", so the template works
      across partitions (aws, aws-cn, aws-us-gov, aws-eusc).
    Resources:
      ExecRole:
        Type: AWS::IAM::Role
        Properties:
          RoleName: AmazonECSroleCF
          AssumeRolePolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Principal:
                  Service:
                    # IAM service principals are "amazonaws.com" across all partitions,
                    # so this stays literal (do NOT use ${AWS::URLSuffix} here).
                    - "ecs-tasks.amazonaws.com"
                Action: "sts:AssumeRole"
          ManagedPolicyArns:
            # Use ${AWS::Partition} rather than hardcoding "aws" in the ARN.
            - !Sub "arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
    Outputs:
      ExecRoleArn:
        Description: ARN of the created ECS task execution role
        Value: !GetAtt ExecRole.Arn

    Vale notar que os service principals do IAM (amazonaws.com) permanecem iguais em todas as partições — este é um dos poucos pontos onde não se usa a variável de partição.

    Estrutura de contas e governança

    A AWS recomenda seguir o modelo multi-conta do AWS Security Reference Architecture (AWS SRA) para implantações na EUSC. O AWS Control Tower está disponível na partição e orquestra o AWS Organizations, o AWS Service Catalog e o AWS IAM Identity Center para montar uma landing zone em menos de uma hora.

    A conta de gerenciamento deve ser usada exclusivamente para governança. Guardrails de segurança universais devem ser aplicados via SCPs (Políticas de Controle de Serviço), RCPs (Políticas de Controle de Recursos) e implantações de serviços como o AWS CloudTrail que afetam todas as contas-membro da organização.

    Diferente do que ocorre em regiões comerciais, SCPs de bloqueio de região não são obrigatórios na EUSC no momento — a separação física e lógica da partição já garante o isolamento. Porém, se novas regiões EUSC forem adicionadas no futuro e for necessário restringir o uso a um subconjunto delas, um SCP de bloqueio de região passará a ser relevante.

    Identidade: IAM Identity Center como infraestrutura como código

    O IAM Identity Center está disponível na EUSC como uma instância independente dentro da partição. É possível conectá-lo ao provedor de identidade corporativo (IdP) — Microsoft Entra ID, Okta, entre outros — via SAML/SCIM, exatamente como nas regiões comerciais. Se a organização já usa o Identity Center na partição comercial, basta apontar uma segunda integração para o mesmo IdP corporativo, mantendo um único conjunto de credenciais para os usuários.

    A recomendação é gerenciar permission sets e atribuições como código. O Terraform abaixo define um permission set com política gerenciada pela AWS e política inline de menor privilégio, atribuindo um grupo a uma conta-alvo:

    data "aws_ssoadmin_instances" "this" {}
    data "aws_partition" "current" {}
    
    # Workload account the group is assigned to.
    variable "analytics_workload_account_id" {
      type        = string
      description = "Account ID of the workload account to assign the permission set to"
    }
    
    locals {
      sso_instance_arn  = tolist(data.aws_ssoadmin_instances.this.arns)[0]
      identity_store_id = tolist(data.aws_ssoadmin_instances.this.identity_store_ids)[0]
    }
    
    resource "aws_ssoadmin_permission_set" "analytics_operator" {
      name             = "AnalyticsOperator"
      description      = "Operate analytics workloads; no IAM or billing"
      instance_arn     = local.sso_instance_arn
      session_duration = "PT4H"
    }
    
    # Attach an AWS managed policy
    resource "aws_ssoadmin_managed_policy_attachment" "analytics_ro" {
      instance_arn       = local.sso_instance_arn
      permission_set_arn = aws_ssoadmin_permission_set.analytics_operator.arn
      managed_policy_arn = "arn:${data.aws_partition.current.partition}:iam::aws:policy/ReadOnlyAccess"
    }
    
    # Add a least-privilege inline policy (note the partition-aware ARNs)
    resource "aws_ssoadmin_permission_set_inline_policy" "analytics_inline" {
      instance_arn       = local.sso_instance_arn
      permission_set_arn = aws_ssoadmin_permission_set.analytics_operator.arn
      inline_policy = jsonencode({
        Version = "2012-10-17"
        Statement = [{
          Sid    = "OperateAnalyticsData"
          Effect = "Allow"
          Action = ["s3:GetObject", "s3:PutObject", "s3:ListBucket"]
          Resource = [
            "arn:${data.aws_partition.current.partition}:s3:::analytics-*",
            "arn:${data.aws_partition.current.partition}:s3:::analytics-*/*"
          ]
          Condition = {
            StringEquals = {
              "aws:RequestedRegion" = "eusc-de-east-1"
            }
          }
        }]
      })
    }
    
    # Group for analytics operators.
    resource "aws_identitystore_group" "analytics" {
      identity_store_id = local.identity_store_id
      display_name      = "analytics-operators"
      description       = "Analytics operators"
    }
    
    # Assign the group to a workload account with the permission set
    resource "aws_ssoadmin_account_assignment" "analytics_to_workload" {
      instance_arn       = local.sso_instance_arn
      permission_set_arn = aws_ssoadmin_permission_set.analytics_operator.arn
      principal_id       = aws_identitystore_group.analytics.group_id
      principal_type     = "GROUP"
      target_id          = var.analytics_workload_account_id
      target_type        = "AWS_ACCOUNT"
    }

    Nenhum usuário recebe acesso direto à conta de gerenciamento — todo acesso humano flui via permission sets do IAM Identity Center atribuídos a contas não-gerenciais. Roles entre contas dentro da partição EUSC funcionam normalmente para governança, logging e ferramentas de segurança:

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:${AWS::Partition}:iam:::role/SecurityAuditCollector"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "eusc-sec-audit"
          },
          "ArnLike": {
            "aws:PrincipalArn": "arn:${AWS::Partition}:iam::*:role/SecurityAuditCollector"
          }
        }
      }]
    }

    Uma role na partição aws não pode assumir uma role na aws-eusc, e vice-versa.

    Logging e monitoramento centralizados na EUSC

    Uma arquitetura de logging soberana requer três elementos: um repositório único e imutável para todos os logs de auditoria e operação, uma conta de segurança central que executa controles detectivos e correlaciona findings, e um caminho confiável dentro da partição para alimentar o SIEM sem que os dados saiam do limite soberano.

    A conta de Log Archive armazena a trilha organizacional e o bucket central de logs. Uma diferença importante em relação à AWS comercial: na EUSC, eventos de serviços globais como o IAM são registrados dentro da própria partição EUSC, pois o plano de controle é independente e localizado inteiramente na UE.

    O Amazon GuardDuty e o AWS Security Hub estão disponíveis na EUSC, mas algumas funcionalidades de habilitação automática em nível organizacional podem diferir da AWS comercial. A recomendação é configurar a conta de Security Tooling como administrador delegado onde suportado. Se a habilitação automática por organização ainda não estiver disponível, use AWS CloudFormation StackSets para habilitar por conta via IaC. Consulte a lista de serviços e funcionalidades da EUSC como fonte de verdade.

    Rede e perímetro, incluindo Direct Connect

    A EUSC possui seus próprios pontos de presença (PoPs) do AWS Direct Connect, com infraestrutura dedicada e conectividade de provedores europeus. Uma conexão Direct Connect ou gateway Direct Connect da partição comercial não pode ser estendida para a aws-eusc. Para alcançar VPCs na EUSC, é necessário provisionar uma conexão Direct Connect separada que chegue à conta de Rede da partição EUSC.

    O design recomendado termina o Direct Connect em uma conta de Rede dedicada e compartilha a conectividade para VPCs de workload usando Transit Gateway (com AWS RAM).

    Imagem original — fonte: Aws

    Os principais elementos do design de perímetro incluem:

    • Egresso centralizado e inspeção — rotear o tráfego de saída dos workloads por uma VPC de inspeção na conta de Rede (Gateway Load Balancer com firewall de escolha, ou AWS Network Firewall), mantendo VPCs de workload privadas sem internet gateway
    • Acesso privado a serviços — usar VPC interface endpoints (VPCe) para chamadas a serviços AWS, mantendo o tráfego na rede AWS dentro da partição
    • DNS — a EUSC tem seu próprio Amazon Route 53; para nomes que precisam resolver entre nuvens, usar delegação de subdomínio ou regras de encaminhamento do Resolver sobre o link DX ou VPN
    • Segmentação como código — expressar a segmentação com security groups referenciando prefix lists e manter os ranges de IP da EUSC atualizados a partir do arquivo ip-ranges publicado pela partição

    Proteção de dados e gerenciamento de chaves

    O AWS Key Management Service (AWS KMS) está disponível na EUSC. A recomendação é usar chaves gerenciadas pelo cliente para todos os datastores sensíveis e impor seu uso via SCPs e políticas de chave.

    Para workloads onde regulamentações exigem que o material de chave nunca resida na infraestrutura do provedor de nuvem, a AWS disponibiliza o AWS KMS External Key Store (XKS) na região EUSC. O proxy XKS conecta o AWS KMS ao HSM (Módulo de Segurança de Hardware) baseado na UE — on-premises ou hospedado com um provedor de serviços de confiança europeu — e todas as operações de criptografia e descriptografia são realizadas pelo gerenciador de chaves externo. É importante considerar as contrapartidas: maior latência, SLA de disponibilidade reduzido e maior carga operacional. O XKS deve ser reservado para o subconjunto de dados onde obrigações regulatórias ou contratuais explicitamente o exigem.

    A região EUSC já alcançou as certificações SOC 2, BSI C5 Type 1 e sete certificações ISO, incluindo ISO 27001, 27017, 27018 e 27701.

    CI/CD seguro e distribuição de imagens entre partições

    Não é possível usar replicação cross-partition do Amazon Elastic Container Registry (Amazon ECR), cópia de Amazon Machine Image (AMI) ou replicação do Amazon S3 entre a AWS comercial e a EUSC. A EUSC deve ser tratada como um destino independente na cadeia de suprimentos de software:

    • Imagens de container — construir (ou re-taguear e re-assinar) imagens e publicar em um registro ECR dentro da EUSC. A replicação cross-Region do ECR funciona dentro da partição, mas a travessia inicial da nuvem comercial é um push explícito via pipeline usando credenciais EUSC.
    • AMIs e imagens — reconstruir imagens golden na EUSC com o EC2 Image Builder (executando o pipeline nativamente na EUSC), ou importar imagens de VM usando o Amazon S3 na EUSC e o comando aws ec2 import-image. Não há cópia direta de AMI entre partições.
    • Binários e artefatos — armazenar em um bucket de artefatos na conta de Shared Services da EUSC. Mover pacotes entre partições com aws s3 sync ou AWS DataSync sobre DX ou VPN.

    O exemplo abaixo mostra como publicar uma imagem de container no ECR dentro da EUSC (note o endpoint .eu):

    # Push a container image to ECR inside EUSC (note the .eu endpoint).
    # Credentials/profile must be for the aws-eusc partition.
    aws ecr get-login-password --region eusc-de-east-1 --profile eusc-shared-services \
      | docker login --username AWS --password-stdin \
        111122223333.dkr.ecr.eusc-de-east-1.amazonaws.eu
    
    docker tag company/runtime:7.x \
      111122223333.dkr.ecr.eusc-de-east-1.amazonaws.eu/company/runtime:7.x
    
    docker push \
      111122223333.dkr.ecr.eusc-de-east-1.amazonaws.eu/company/runtime:7.x

    Para o plano de implantação, a recomendação é rodar um pipeline nativo na EUSC — AWS CodePipeline, AWS CodeBuild, AWS CodeDeploy ou ferramentas equivalentes implantadas dentro da partição — na conta de Shared Services, com roles de deploy entre contas para os workloads. Se um sistema de CI da partição comercial precisar implantar na EUSC, ele deve ter credenciais separadas para cada partição, pois não existe assunção de role entre partições.

    // Deploy role in an EUSC workload account, trusted by the EUSC Shared Services pipeline role
    {
      "Version": "2012-10-17",
      "Statement": [{
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws-eusc:iam:::role/PipelineDeployRole"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "EUSC-deploy"
          }
        }
      }]
    }

    Para vending de contas e landing-zone-as-code, a AWS recomenda usar o Account Factory for Terraform (AFT) implantado na EUSC. O estado Terraform de cada partição deve ser mantido em um backend Amazon S3 dentro da EUSC com uma tabela de lock no Amazon DynamoDB — nunca compartilhando estado entre partições.

    O Landing Zone Accelerator on AWS (LZA) é uma alternativa de implantação que provisiona uma arquitetura de segurança de base com customizações por partição. Uma configuração baseline para a European Sovereign Cloud foi recentemente disponibilizada, acompanhada de um LZA Compliance Workbook que mapeia padrões europeus de segurança a mais de 200 configurações implantadas pelo LZA.

    Faturamento e governança de custos

    O faturamento deve ser consolidado dentro da organização EUSC — não entre partições. A EUSC possui um payer separado (faturado em EUR pela entidade contratante europeia). A recomendação é habilitar o faturamento consolidado na conta de gerenciamento da EUSC e entregar os AWS Data Exports (Cost and Usage Report 2.0) a um bucket S3 em uma conta de finanças ou governança dedicada. Dados de faturamento não podem ser replicados para a partição comercial.

    Conclusão

    Arquitetar na AWS European Sovereign Cloud é, em grande parte, construir uma segunda landing zone AWS bem gerenciada, com um princípio organizador que resolve quase todas as dúvidas de design: ela é uma partição independente. A centralização de governança, identidade, logging e faturamento é totalmente alcançável — mas dentro da partição EUSC.

    Os limites entre a AWS comercial e a EUSC — sem roles, peering, replicação ou faturamento entre partições — são as garantias de soberania funcionando como esperado. A base deve ser construída como código: uma landing zone AWS Control Tower conduzida pelo AFT, permission sets do IAM Identity Center em Terraform federados ao IdP corporativo, um repositório central imutável de logs, chaves de criptografia gerenciadas pelo cliente restritas à região soberana, e uma conta de Rede terminando um Direct Connect dedicado.

    Para acelerar a implantação, a AWS disponibiliza a LZA Universal Configuration for European Sovereign Cloud no GitHub, que empacota muitos dos padrões descritos neste artigo em uma baseline pronta para implantação. Para complementar com conformidade, o LZA Independent Assessment Report for C5:2020 avalia como a baseline de segurança do LZA mapeia para os requisitos técnicos do C5:2020, disponível para download no AWS Artifact.

    Leituras recomendadas

    Fonte

    Architecting a secure landing zone in the AWS European Sovereign Cloud (https://aws.amazon.com/blogs/security/architecting-a-secure-landing-zone-in-the-aws-european-sovereign-cloud/)

  • AWS STS simplifica limites de token de sessão e adiciona monitoramento de tamanho

    O que mudou no AWS STS

    O Serviço de Token de Segurança da AWS (AWS STS) passou por uma atualização relevante para quem trabalha com credenciais temporárias na nuvem. A AWS simplificou os limites de tamanho dos tokens de sessão e passou a reportar essas métricas de forma muito mais transparente. Se você usa AssumeRole, federação com SAML ou WebIdentity, ou qualquer outro mecanismo baseado em credenciais temporárias, essa mudança afeta diretamente o seu ambiente.

    Em resumo: o antigo modelo de dois limites separados foi substituído por um único limite de 4.096 bytes para o token de sessão montado. Além disso, o tamanho do token agora é reportado nas respostas de API, nos eventos do AWS CloudTrail e nas métricas do Amazon CloudWatch.

    Entendendo o que era o problema antes

    Antes dessa mudança, o AWS STS aplicava dois limites distintos sobre os tokens de sessão. O primeiro incidia sobre o que era chamado de packed policy — a representação serializada e comprimida das políticas de sessão e tags que você passa na chamada. O segundo era um limite geral sobre o token montado como um todo, que incluía o packed policy mais o contexto adicionado pela própria AWS.

    O grande problema? Quando uma requisição falhava por exceder qualquer um dos dois limites, a exceção retornada era a mesma: PackedPolicyTooLargeException. Ou seja, você recebia o erro mas não sabia qual dos dois limites havia sido ultrapassado. Isso tornava o diagnóstico frustrante e os ajustes, no mínimo, baseados em tentativa e erro.

    O que mudou de fato

    A AWS realizou três alterações principais nesse comportamento:

    1. Limite único

    O modelo de dois limites foi descartado. Agora existe apenas um: o token de sessão montado não pode ultrapassar 4.096 bytes. O limite separado do packed policy, que tornava as falhas difíceis de prever, foi removido. Quando o token excede esse único limite, o STS ainda retorna PackedPolicyTooLargeException — mas agora a mensagem de erro informa o tamanho atual do token e o máximo permitido, em bytes. O código de tratamento de erros existente continua funcionando sem necessidade de atualização de SDK.

    2. Visibilidade do tamanho do token

    Cada resposta bem-sucedida das APIs de emissão de sessão do STS agora inclui dois novos campos:

    • SessionTokenSize: tamanho do token em bytes.
    • SessionTokenUtilization: percentual do limite de 4.096 bytes que o token está consumindo.

    Para garantir compatibilidade retroativa, o campo PackedPolicySize continua presente nas respostas, mas agora ele reporta o mesmo valor percentual que SessionTokenUtilization. Isso significa que aplicações que usam versões mais antigas do SDK conseguem monitorar a utilização sem precisar atualizar nada. Vale notar que os valores de PackedPolicySize podem parecer menores do que antes, mesmo sem mudança no conteúdo do token — isso é esperado e reflexo da mudança de semântica do campo.

    Esses campos também são registrados nos eventos do CloudTrail. Um exemplo de resposta da API ficaria assim:

    {
      "Credentials": {
        "AccessKeyId": "REDACTED",
        "SecretAccessKey": "REDACTED",
        "SessionToken": "REDACTED",
        "Expiration": "2026-06-30T12:00:00Z"
      },
      "AssumedRoleUser": {
        "...": "..."
      },
      "PackedPolicySize": 61,
      "SessionTokenSize": 2532,
      "SessionTokenUtilization": 61
    }

    E no CloudTrail, o evento de AssumeRole passaria a registrar:

    {
      "eventName": "AssumeRole",
      "responseElements": {
        "credentials": {
          "...": "..."
        },
        "assumedRoleUser": {
          "...": "..."
        },
        "packedPolicySize": 61,
        "sessionTokenUtilization": 61,
        "sessionTokenSize": 2532
      }
    }

    No Amazon CloudWatch, o STS publica as métricas SessionTokenSize e SessionTokenMaxSize no namespace AWS/STS, permitindo a criação de dashboards e alarmes baseados no tamanho real dos tokens em circulação.

    3. Novo parâmetro para testes: MinimumSessionTokenSize

    A AWS adicionou o parâmetro opcional MinimumSessionTokenSize nas APIs de emissão de sessão do STS. Com ele, é possível forçar a geração de um token com pelo menos o tamanho especificado — até o máximo de 4.096 bytes. Isso torna os testes de infraestrutura muito mais diretos: em vez de tentar estimar o tamanho do token a partir do conteúdo das políticas e tags, você simplesmente solicita um token do tamanho que deseja testar.

    O que essa mudança significa para você

    O impacto varia de acordo com a situação de cada ambiente. A AWS descreve os cenários mais comuns:

    Se você nunca enfrentou erro de tamanho de token

    Provavelmente não vai notar diferença imediata. Os tokens permanecem do tamanho atual e ganham mais margem. Com o tempo, porém, eles podem crescer além do que seus sistemas já lidaram. A recomendação é usar MinimumSessionTokenSize para descobrir qual é o tamanho máximo que sua infraestrutura consegue suportar.

    Se você já recebeu PackedPolicyTooLargeException

    Algumas requisições que antes falhavam agora podem ter sucesso com o limite único. Vale revisar os contornos (workarounds) que foram implementados especificamente para evitar erros de tamanho e avaliar se ainda são necessários. As boas práticas gerais continuam válidas: usar casing consistente em tags e reutilizar valores de tags melhora a compressão, assim como manter as políticas de sessão mais concisas. Nenhuma mudança de código é necessária para o tratamento de erros.

    Se seus sistemas têm limites próprios de tamanho para credenciais

    Se a sua aplicação usa um SDK da AWS para obter credenciais temporárias e fazer chamadas de API, o SDK gerencia o token de sessão internamente — o tamanho não afeta o código da aplicação. O foco deve ser nos sistemas que armazenam ou repassam tokens de sessão: balanceadores de carga, proxies, caches e bancos de dados. Esses sistemas podem ter limites que tokens menores nunca alcançavam. Por exemplo, uma coluna de banco de dados definida como varchar(2048) não consegue armazenar um token de 4.096 bytes. Mapeie onde você persiste ou repassa tokens e identifique o tamanho máximo que cada sistema suporta.

    O que fazer a seguir

    A AWS recomenda três passos para preparar os ambientes para essa mudança:

    1. Valide o tamanho máximo que seus sistemas suportam

    Use MinimumSessionTokenSize para descobrir o limite de cada sistema na sua infraestrutura. O limite de 4.096 bytes reflete as necessidades atuais, mas não é um teto permanente — pode crescer conforme a AWS introduz novas capacidades, como chaves de contexto adicionais para novos serviços, metadados de auditoria mais ricos e assinaturas criptográficas maiores na transição para algoritmos pós-quânticos. Evite fixar o valor máximo atual no código e reavalie premissas de tamanho fixo caso o limite mude.

    Um ponto importante: o STS serializa e comprime as políticas de sessão e tags ao montar o token. O resultado da compressão depende do conteúdo real, não apenas do seu comprimento. Dois conjuntos de tags com a mesma quantidade de caracteres podem gerar tokens de tamanhos diferentes. Por isso, MinimumSessionTokenSize é uma forma mais confiável de testar a infraestrutura do que estimar a partir do tamanho do conteúdo de entrada.

    O comando abaixo, usando o AWS Command Line Interface (AWS CLI), permite iniciar os testes com o maior token possível:

    aws sts assume-role \
      --role-arn arn:aws:iam::123456789012:role/MyRole \
      --role-session-name validation-test \
      --minimum-session-token-size 4096

    Se algum sistema truncar ou rejeitar o token, reduza o valor para encontrar o tamanho que a infraestrutura suporta e, onde possível, aumente esse limite. O parâmetro MinimumSessionTokenSize está disponível no SDK mais recente da AWS, no AWS CLI e nas ferramentas para PowerShell. Consulte a referência da API do STS para mais detalhes. Se o seu SDK ou CLI for anterior à adição desse parâmetro, atualize para utilizá-lo.

    2. Monitore o tamanho dos tokens de sessão

    Se a sua infraestrutura tem restrições de tamanho, o monitoramento permite identificar tokens que estão se aproximando do limite antes que uma requisição falhe. O STS reporta o tamanho por três canais:

    • Na resposta da API: lendo SessionTokenUtilization e SessionTokenSize diretamente da resposta. Requer o SDK mais recente. Se o SDK expõe SessionTokenUtilization, use esse campo — o nome reflete melhor o significado atual. Se não, use PackedPolicySize para monitorar o mesmo percentual de utilização sem precisar atualizar o SDK.
    • No CloudWatch: as métricas SessionTokenSize e SessionTokenMaxSize ficam disponíveis no namespace AWS/STS para dashboards e alarmes. Configure o alarme com base no limite que você encontrou durante os testes — não no máximo de 4.096 bytes, que é igual para todas as contas. O seu limite de infraestrutura é o que importa.
    • No CloudTrail: cada evento de emissão de sessão registra SessionTokenUtilization e SessionTokenSize para chamadas bem-sucedidas.

    A recomendação da AWS é monitorar SessionTokenSize para acompanhar o tamanho em bytes ao longo do tempo.

    Conclusão

    Com essa atualização, o AWS STS passa a oferecer mais espaço para tags de sessão, valores de tags e políticas de sessão, além de uma experiência de diagnóstico muito mais clara. A substituição dos dois limites por um único de 4.096 bytes elimina a ambiguidade nas falhas, e a visibilidade do tamanho do token via API, CloudWatch e CloudTrail permite agir de forma proativa antes que qualquer problema aconteça.

    Para equipes que trabalham com credenciais de segurança temporárias e tags de sessão no AWS STS, o próximo passo prático é validar os sistemas com MinimumSessionTokenSize e configurar monitoramento com SessionTokenUtilization e SessionTokenSize. Consulte a referência da API do AWS STS para todos os detalhes técnicos.

    Fonte

    AWS STS simplifies session token size limits and adds session token size monitoring (https://aws.amazon.com/blogs/security/aws-sts-simplifies-session-token-size-limits-and-adds-session-token-size-monitoring/)

  • Autenticação resiliente com Amazon Cognito Multi-Region Replication: arquiteturas e estratégias de failover

    Por que autenticação multi-região importa

    O sistema de Gerenciamento de Identidade e Acesso do Consumidor (CIAM) é a base da experiência do cliente: é por ele que usuários fazem login, acessam serviços e interagem com aplicações. À medida que negócios crescem em múltiplas geografias, garantir que a autenticação esteja sempre disponível deixa de ser diferencial e passa a ser requisito arquitetural.

    Historicamente, construir autenticação multi-região exigia soluções de replicação customizadas e complexas, que precisavam sincronizar dados de usuários, gerenciar consistência e orquestrar failover — tudo com alto custo operacional. A AWS endereça esse problema com o recurso de Replicação Multi-Região (MRR) do Amazon Cognito, que replica user pools entre regiões AWS automaticamente, com sincronização em tempo quase real e failover integrado.

    Como o Cognito MRR funciona

    O MRR cria um user pool réplica em outra região AWS, compartilhando o mesmo ID do user pool primário. O user pool primário permanece autoritativo: suas configurações (IDs de app client, client secrets), dados de usuários (atributos, credenciais com hash, memberships de grupos) e configurações de provedores de identidade externos (IdP) são replicados para a réplica com consistência eventual.

    O user pool réplica suporta operações de autenticação — como login, geração e revogação de tokens — e operações de leitura sobre configurações e atributos. Operações de escrita, como atualização de atributos ou configurações do user pool, não são permitidas na réplica e devem ser feitas exclusivamente no user pool primário. Ao tentar realizar essas operações na réplica, o Cognito retorna o erro Action temporarily unavailable no managed login, ou OperationNotEnabledException via SDK. A lista completa de operações de API suportadas em regiões secundárias está disponível na documentação.

    Um ponto importante: tokens JWT (Tokens Web JSON) e sessões ativas são interoperáveis entre regiões. Por exemplo, um refresh token emitido pela região primária é aceito na réplica para obter novos tokens de ID e acesso.

    Preparação para o MRR

    Chave gerenciada pelo cliente multi-região (KMS)

    Antes de habilitar o MRR, é necessário configurar o user pool para usar uma chave gerenciada pelo cliente. Essa chave deve ser uma chave simétrica multi-região do AWS Key Management Service (AWS KMS). Sem o MRR, os dados são criptografados em repouso com uma chave gerenciada pela AWS e em trânsito com TLS 1.2/1.3 com troca de chaves pós-quântica híbrida.

    Algumas considerações arquiteturais importantes sobre a chave KMS:

    • Você precisa de apenas uma chave multi-região réplica, pois o MRR do Cognito suporta somente uma região réplica adicional.
    • A administração da chave — políticas, rotação e exclusão — é responsabilidade do cliente.
    • Aplique o princípio do menor privilégio na política da chave KMS, limitando o escopo ao seu user pool com a condição kms:EncryptionContext:aws:cognito-idp:<userpool-arn>. A seção de criptografia de dados no guia do desenvolvedor traz um exemplo completo de política.

    Emissor OIDC multi-região

    Cada token de ID e acesso emitido pelo Cognito inclui a claim iss (issuer), que identifica o provedor de identidade emissor. A especificação OpenID Connect (OIDC) exige que esse valor seja uma URL HTTPS que publique um documento de metadados.

    O formato original do issuer é regional: https://cognito-idp.<region>.amazonaws.com/<userpool_id>. Com o MRR, a AWS introduz um novo tipo de issuer multi-região, no formato https://issuer-cognito-idp.<region>.amazonaws.com/<userpool_id>. Esse novo tipo mantém os endpoints de descoberta OIDC e de Conjunto de Chaves Web JSON (JWKS) disponíveis independentemente do estado da região primária ou réplica.

    A recomendação é adotar o issuer atualizado. Com ele, as aplicações conseguem buscar chaves de assinatura para verificação de tokens mesmo durante uma falha regional. Para adotá-lo, atualize suas aplicações e dependências para validar contra o novo valor de iss. Se você usa a biblioteca aws-jwt-verify, atualize para a versão v5.2.1 ou posterior.

    Se não for possível migrar imediatamente — por exemplo, porque serviços de terceiros validam o iss contra o formato original fixo — é possível habilitar o MRR mantendo o issuer original. Nesse caso, implemente uma estratégia de cache do JWKS para que suas aplicações continuem validando tokens com chaves em cache quando o endpoint estiver inacessível. Mais detalhes na seção Amazon Cognito user pools como emissor OIDC do guia do desenvolvedor.

    Dependências de serviços regionais

    O Cognito integra com vários serviços regionais da AWS para funcionalidades de customização. Todos eles precisam ser configurados de forma independente na região réplica:

    • AWS Lambda: Os triggers Lambda (pré-autenticação, pré-geração de token, etc.) devem ser implantados e associados ao user pool réplica. É possível usar a mesma lógica para ambas as regiões ou definir comportamentos distintos para a réplica.
    • AWS WAF: As listas de controle de acesso web (web ACLs) devem ser criadas na região réplica para proteger o user pool réplica.
    • Amazon Simple Notification Service (Amazon SNS): Para envio de SMS (MFA por SMS, autenticação sem senha), configure o SNS na região réplica. O tempo de registro de identidades de origem depende de vários fatores.
    • Amazon Simple Email Service (Amazon SES): Verifique domínios e endereços de e-mail na região réplica e configure o user pool réplica adequadamente.
    • Amazon CloudWatch: Configure alarmes e análises para exportação de logs e monitoramento de cotas na região réplica.

    Use ferramentas de infraestrutura como código como AWS CloudFormation ou AWS Cloud Development Kit (AWS CDK) para manter configurações consistentes entre regiões e monitorar desvios de configuração.

    Failover automático de domínio

    Para casos de uso que dependem de managed login e endpoints OAuth 2.0, o Cognito suporta failover automático para a região réplica usando um health check do Amazon Route 53. O Cognito usa o status do health check para controlar se o tráfego vai para o user pool primário ou réplica. Tanto o domínio prefixado do Cognito quanto domínios customizados suportam esse failover automático.

    Com isso, é possível usar um único domínio para servir configurações de IdPs externos, incluindo URIs de redirecionamento e URLs de consumidor de asserção SAML — sem precisar contatar administradores de IdPs externos ao habilitar o MRR.

    Alternativas ao MFA por TOTP e cotas

    O MFA baseado em Senha de Uso Único Baseada em Tempo (TOTP) não é suportado em user pools réplica. Usuários configurados com TOTP precisam autenticar pela região primária. Se sua aplicação depende de TOTP como segundo fator, planeje habilitar alternativas como OTP por SMS, OTP por e-mail ou passkey.

    Ao ativar um user pool réplica, você ganha um conjunto separado de cotas padrão na região réplica — cotas reservadas previamente na região primária não são transferidas. Ao selecionar a região réplica, considere também os requisitos de soberania e residência de dados da sua organização. O post Soberania digital prática: navegando pelos pilares de conformidade, continuidade e controle oferece orientações relevantes.

    Arquiteturas de referência

    Managed login e federação

    O managed login do Cognito oferece uma interface de autenticação gerenciada que cuida dos fluxos de login, cadastro e federação. Com o MRR, os endpoints do managed login são servidos pelo user pool saudável com base no health check do Route 53. O fluxo funciona assim:

    • O usuário acessa a aplicação e é redirecionado para o managed login.
    • O managed login usa o health check do Route 53 para controlar o roteamento.
    • Se o health check retornar status saudável, todo o tráfego flui para o user pool da região primária.
    • Para usuários federados, o user pool primário redireciona para o IdP externo ou social.
    • Se o health check retornar status não saudável, o tráfego flui para o user pool réplica. Criação de usuários e atualizações de atributos falharão até o health check se recuperar.

    Arquitetura M2M (Máquina a Máquina)

    Em uma arquitetura M2M, serviços autenticam usando o grant de credenciais de cliente do OAuth 2.0. Esse fluxo não envolve usuários humanos — serviços de backend trocam credenciais de cliente por tokens de acesso.

    Imagem original — fonte: Aws

    O fluxo de autenticação é:

    • Clientes de aplicação enviam uma requisição POST ao endpoint /token do Cognito com as credenciais de cliente.
    • O Route 53 determina se o tráfego deve fluir para o user pool primário ou réplica com base no health check.
    • Se saudável, o tráfego vai para a região primária; se não saudável, para a réplica. Ao recuperar, o tráfego retorna para o user pool primário.

    Arquitetura baseada em SDK

    Para aplicações que usam o AWS SDK ou as APIs do Amazon Cognito diretamente — em vez do managed login — o fluxo de autenticação fica embutido no código da aplicação, oferecendo mais controle sobre a experiência do usuário, mas exigindo considerações adicionais para failover.

    Imagem original — fonte: Aws

    O fluxo é:

    • O usuário acessa a aplicação e faz login por uma interface customizada via APIs ou SDKs.
    • Um health check do Route 53 (opcional) monitora os endpoints proxy regionais para determinar o roteamento.
    • Se saudável, o tráfego flui para o proxy da região primária, que repassa as requisições ao endpoint regional do Cognito via Amazon API Gateway.
    • Se não saudável, o tráfego flui para o proxy da região réplica até o health check se recuperar.

    Nessa arquitetura, também é possível configurar roteamento customizado para balancear requisições de autenticação, direcionando leituras para ambas as regiões e mantendo escritas apenas na primária. A AWS recomenda configurar um endpoint customizado para simplificar a orquestração de failover.

    Estratégias de failover

    Monitoramento com health checks do Route 53

    O failover para managed login e todos os fluxos OAuth 2.0 é acionado por health checks do Amazon Route 53 associados ao domínio do Cognito. Uma abordagem prática para começar:

    • Crie um canary sintético com o Amazon CloudWatch Synthetics para exercitar periodicamente um fluxo real de autenticação — por exemplo, uma requisição de token de credenciais de cliente contra o endpoint /oauth2/token ou uma chamada à API AdminInitiateAuth com credenciais de teste.
    • Associe o canary a um alarme do CloudWatch na métrica SuccessPercent, com um threshold que considere erros transitórios (por exemplo, alarmar quando o sucesso cair abaixo de 90% por três períodos consecutivos).
    • Conecte o alarme ao health check do Route 53 para failover automático. Se preferir intervenção humana, configure o alarme para notificar a equipe de operações, que inverte o health check manualmente.

    Após configurar o health check, associe-o ao domínio do Cognito usando a API UpdateUserPoolDomain ou o console do Cognito.

    Failover apenas de autenticação vs. failover completo

    Antes de implementar o failover, é importante entender como a camada de autenticação se relaciona com o restante da aplicação. Existem dois padrões comuns:

    • Failover apenas de autenticação: A aplicação permanece em uma única região, mas o tráfego de autenticação falha para a réplica se apenas o serviço de autenticação da região primária estiver comprometido. Funciona quando a aplicação consegue operar com tokens já emitidos e as APIs downstream não dependem da mesma região do user pool.
    • Failover completo de stack: Toda a aplicação — computação, armazenamento, APIs e autenticação — falha para a região réplica. Nesse modelo, o MRR do Cognito é um componente de uma arquitetura multi-região mais ampla, onde os fluxos de autenticação têm dependências regionais (como triggers Lambda chamando tabelas do Amazon DynamoDB regionais) que precisam estar co-localizadas com o user pool.

    Para o failover completo, a AWS recomenda usar o Amazon Application Recovery Controller (ARC) para coordenar o failover de todos os componentes com uma única ação. O ARC oferece três capacidades relevantes para arquiteturas de autenticação multi-região:

    • Controles de roteamento: Controles de plano de dados extremamente confiáveis para mudar tráfego DNS entre regiões, com regras de segurança que evitam failovers parciais ou não intencionais.
    • Verificações de prontidão: Monitoramento contínuo de cotas de recursos, capacidade e políticas de roteamento de rede na região secundária.
    • Region switch: Orquestração de recuperação multi-região centralizada, automatizada e observável em múltiplas contas e recursos AWS.

    Saiba mais sobre o ARC no post Apresentando o Amazon Route 53 Application Recovery Controller.

    Quando acionar o failover

    Acionar failover cedo demais gera interrupções desnecessárias; tarde demais compromete a disponibilidade. Os fatores a balancear incluem: monitorar a saúde dos fluxos de autenticação críticos, usar health checks compostos combinando múltiplos sinais, definir thresholds apropriados para distinguir erros transitórios de falhas reais, e considerar dependências como triggers Lambda e IdPs externos. Para arquiteturas baseadas em SDK com SPAs (Aplicações de Página Única), considere implementar lógica de retry no lado do cliente com failover de região.

    Entender e definir os objetivos de tempo de recuperação (RTO) e ponto de recuperação (RPO) também são fatores determinantes. O post Estabelecendo metas de RPO e RTO para aplicações em nuvem oferece orientações adicionais.

    Testando a prontidão do failover

    Se você usa health check do Route 53, comece invertendo-o manualmente durante uma janela de manutenção — no console do Route 53, habilite Invert health check status para forçar o estado de falha e acionar o failover para a região réplica sem mudanças de infraestrutura. Valide os fluxos críticos (login, refresh de token, federação) e desabilite a inversão para restaurar o tráfego.

    Para simulações mais realistas, use o AWS Fault Injection Service (FIS) criando templates de experimento que perturbam as dependências do Cognito na região primária. Use condições de parada para interromper automaticamente experimentos se impactos inesperados forem detectados. A AWS recomenda realizar testes de failover em cadência regular e após mudanças significativas na arquitetura de autenticação.

    Próximos passos

    Para começar com o MRR do Cognito, certifique-se de que seu user pool está no plano de recursos Essentials ou Plus, configure a chave KMS multi-região e o issuer OIDC, e crie sua primeira réplica. As instruções passo a passo estão disponíveis em Replicação Multi-Região para user pools. Para dúvidas, a AWS sugere abrir um tópico no Amazon Cognito re:Post ou contatar o suporte AWS.

    Fonte

    Architecting resilient authentication with Amazon Cognito multi-Region replication (https://aws.amazon.com/blogs/security/architecting-resilient-authentication-with-amazon-cognito-multi-region-replication/)

  • Automatizando Remediação de IAM no Pipeline de CI/CD com Privilégio Mínimo

    O problema real com permissões IAM em escala

    Manter o princípio de privilégio mínimo — conceder apenas as permissões estritamente necessárias — é fácil de defender em teoria, mas difícil de sustentar na prática. Quando equipes sobem aplicações na AWS, é comum conceder permissões mais amplas do que o necessário para agilizar a entrega, com a intenção de ajustar depois. Esse “depois” raramente acontece.

    Com o tempo, permissões se acumulam. Papéis do AWS Identity and Access Management (IAM) que precisavam de acesso amplo no início do projeto continuam com essas permissões muito depois de deixarem de ser necessárias. Alguns papéis chegam a cair em desuso completo. E revisões manuais não escalam — elas viram um backlog que cresce mais rápido do que qualquer equipe consegue resolver.

    A AWS publicou uma solução que trata esse problema de forma sistemática, conectando o AWS IAM Access Analyzer diretamente ao pipeline de CI/CD para automatizar a remediação. Vale entender como ela funciona.

    O que o IAM Access Analyzer já faz — e onde ele para

    O IAM Access Analyzer já resolve bem a parte de detecção: ele identifica permissões não utilizadas em papéis e usuários IAM, aponta ações que nunca foram executadas, serviços que nunca foram acessados e papéis que nunca foram assumidos. Para cada achado, ele gera uma política recomendada com as permissões em excesso removidas.

    O problema está no passo seguinte. Um engenheiro de segurança pode ajustar um papel diretamente no console hoje — mas se esse papel estiver definido em um template do AWS CloudFormation ou em uma stack do AWS Cloud Development Kit (AWS CDK), o próximo deploy restaura as permissões originais. A correção precisa acontecer onde o papel foi definido, e nem todo papel tem a mesma origem.

    Alguns papéis são gerenciados por infraestrutura como código (IaC). Outros foram criados manualmente pelo console. E alguns simplesmente não estão sendo usados. Cada cenário exige uma estratégia de remediação diferente.

    Visão geral da solução automatizada

    A solução proposta pela AWS conecta quatro capacidades: o IAM Access Analyzer para detecção e recomendações de política, o CloudTrail para identificar a origem de cada papel, o Amazon Bedrock para gerar código CDK e explicações em linguagem natural, e o pipeline de CI/CD existente para executar a remediação.

    O fluxo funciona assim: um evento agendado no Amazon EventBridge dispara diariamente uma função AWS Lambda orquestradora. Essa função consulta os achados ativos do IAM Access Analyzer, usa o CloudTrail para determinar como cada papel foi criado e, com base nessa classificação, roteia cada achado para um dos três caminhos de remediação.

    Imagem original — fonte: Aws

    Os três caminhos de remediação

    Papéis gerenciados por IaC — Pull Request automático

    Quando o CloudTrail indica que um papel foi criado via CloudFormation ou CDK, a automação identifica o repositório de origem (a partir de uma tag Repository definida no deploy) e abre um pull request nesse repositório. O PR inclui o código CDK gerado pelo Amazon Bedrock implementando exatamente a política recomendada pelo IAM Access Analyzer, um diff mostrando quais permissões estão sendo removidas, e uma explicação em linguagem natural do que muda e por quê.

    A equipe dona do papel revisa o PR pelo processo normal de code review. Após o merge, a correção é implantada de forma consistente por todo o pipeline de CI/CD existente. A correção passa a ser permanente — não um ajuste pontual que some no próximo deploy.

    Papéis criados manualmente — Issue com orientação

    Papéis criados pelo console da AWS ou pela AWS Command Line Interface (AWS CLI) não têm uma representação em código que possa ser atualizada programaticamente. Para esses casos, a automação cria uma issue no sistema de rastreamento de tarefas da equipe contendo a política recomendada pelo IAM Access Analyzer, um diff das mudanças, a explicação gerada pelo Amazon Bedrock e um guia passo a passo para importar o papel para IaC.

    Isso oferece um caminho imediato de remediação enquanto incentiva a adoção de IaC a longo prazo.

    Papéis sem uso — Desativação controlada

    Para papéis que nunca foram assumidos, a automação adota uma abordagem conservadora. Em vez de deletar diretamente, ela cria uma issue recomendando um fluxo de desativação em três etapas: anexar uma política de negação total (deny-all) ao papel, monitorar por 30 dias para confirmar que nenhuma carga de trabalho depende dele, e então deletar.

    Essa cautela é proposital. Deletar um papel é irreversível — você perde a política de confiança, as políticas anexadas e qualquer referência em políticas baseadas em recursos. A etapa de desativação suave serve como rede de segurança: se algo quebrar durante o período de monitoramento, remover a política deny-all restaura o acesso imediatamente.

    Detalhes técnicos relevantes

    Filtragem por exclusões

    Antes de processar qualquer achado, a função Lambda carrega uma configuração de exclusões para evitar que a automação tente remediar papéis que legitimamente precisam de permissões amplas. O exemplo abaixo mostra a estrutura dessa configuração:

    {
      "excluded_roles": [
        "arn:aws:iam::123456789012:role/BreakGlassRole",
        "arn:aws:iam::123456789012:role/ServiceLinkedRole"
      ],
      "excluded_permissions": [
        "iam:*",
        "sts:AssumeRole"
      ],
      "excluded_by_tag": {
        "NoRemediation": ["true"],
        "CriticalService": ["true"]
      },
      "min_unused_days": 30
    }

    O parâmetro min_unused_days evita falsos positivos com cargas de trabalho sazonais: um papel que executou um job trimestral há 25 dias não vai gerar um achado.

    Atribuição de origem via CloudTrail

    A função Lambda consulta o evento CreateRole no CloudTrail para classificar a origem de cada papel. Um papel criado via IaC tem o principal de serviço cloudformation.amazonaws.com como identidade. Um papel criado manualmente mostra o tipo IAMUser com agente de usuário console.amazonaws.com ou aws-cli/2.x.x. Essa distinção determina qual dos três caminhos de remediação será seguido.

    Geração de código com Amazon Bedrock

    Para papéis gerenciados por IaC, a função Lambda recupera a política recomendada pelo IAM Access Analyzer e envia ao Amazon Bedrock para gerar o código CDK em Python. É uma divisão clara de responsabilidades: o IAM Access Analyzer decide o que a política deve conter, e o Amazon Bedrock cuida de como isso se traduz em código CDK pronto para produção.

    O código gerado passa por uma etapa de validação antes de entrar em qualquer PR: a função Lambda compila o Python para verificar erros de sintaxe e confirma que os padrões CDK necessários estão presentes. Se a validação falhar, o achado é registrado como erro em vez de gerar um PR com código quebrado.

    A solução usa o modelo Anthropic Claude Sonnet no Amazon Bedrock para geração de código (onde precisão é crítica) e o Claude Haiku para as explicações em linguagem natural (onde velocidade e custo importam mais). Os IDs dos modelos são variáveis de ambiente configuráveis.

    Suporte a múltiplas contas

    A solução funciona tanto em modo de conta única quanto em modo organizacional. No modo organizacional, um analisador ORGANIZATION_UNUSED_ACCESS implantado em uma conta administradora delegada gera achados de todas as contas-membro. A função Lambda extrai o ID da conta do Nome de Recurso da Amazon (ARN) de cada achado e usa um papel entre contas para consultar o CloudTrail e as APIs do IAM na conta de origem.

    Controles operacionais e escalabilidade

    Na primeira execução em ambientes grandes, o volume de achados pode ser significativo — especialmente com um analisador organizacional. Dois controles de limitação evitam sobrecarregar as equipes: max_findings_per_run (padrão: 50) limita o total de achados de permissões não usadas processados por execução da Lambda, e MAX_UNUSED_ROLE_ISSUES (padrão: 10) limita as issues de papéis sem uso por execução. Os achados restantes são processados na próxima execução agendada.

    Para papéis sensíveis — com permissões administrativas ou acesso a dados críticos — é possível configurar o campo approval_required_for_tags nas exclusões. Papéis com essas tags geram issues para revisão manual em vez de PRs automáticos, independentemente de serem gerenciados por IaC.

    Após cada execução, a função Lambda publica métricas no Amazon CloudWatch: total de achados processados, papéis classificados como IaC, criados manualmente ou sem uso, PRs e issues criados, e erros de processamento. Acompanhar a proporção entre papéis IaC e manuais ao longo do tempo é um indicador natural da maturidade de governança do ambiente.

    Modo dry-run e implantação

    Antes de criar PRs e issues reais, é possível executar a automação em modo dry-run configurando "dry_run": true na configuração de CI/CD ou definindo a variável de ambiente CI_CD_PLATFORM como dryrun. Nesse modo, a função processa os achados e classifica os papéis, mas apenas registra o que criaria — sem fazer chamadas reais às APIs do repositório. É o ponto de partida recomendado para validar a acurácia da classificação e ajustar as exclusões antes de ir ao ar.

    A solução é distribuída como dois stacks CDK. O repositório GitHub com o código-fonte completo inclui os stacks, templates de configuração e instruções detalhadas de implantação para GitHub e GitLab, além do guia para configuração organizacional entre contas.

    Considerações de custo

    A solução utiliza Lambda (custo mínimo com execução diária), CloudTrail (geralmente já habilitado), IAM Access Analyzer (cobrado por papel ou usuário IAM analisado por mês para o analisador de acesso não utilizado) e Amazon Bedrock (pagamento por token para geração de código e explicações). O uso de tokens do Amazon Bedrock é a maior variável de custo, escalando com o número de achados processados por dia e a complexidade de cada política. Em implantações organizacionais, o custo do IAM Access Analyzer escala com o número de papéis analisados em todas as contas-membro.

    Conclusão

    A solução apresentada pela AWS transforma a remediação de permissões IAM de uma tarefa periódica de compliance em uma prática operacional contínua. Ao conectar os achados do IAM Access Analyzer ao pipeline de CI/CD, a correção de permissões excessivas passa a fazer parte do fluxo normal de revisão de código — o mesmo processo que as equipes já seguem.

    A abordagem em três caminhos é realista: papéis IaC recebem PRs com código pronto para produção, papéis criados manualmente recebem issues acionáveis com orientação para migrar para IaC, e papéis sem uso seguem um plano de desativação controlada que protege contra interrupções acidentais. Com o tempo, a proporção de papéis gerenciados por código aumenta e a remediação se torna cada vez mais automatizada.

    A recomendação é começar com um piloto: escolher 10 a 20 papéis de não-produção, rodar em modo dry-run, revisar os resultados de classificação, ajustar as exclusões e só então habilitar a remediação real. O código-fonte completo está disponível no repositório GitHub.

    Fonte

    Operationalizing least privilege: Automate IAM remediation through your CI/CD pipeline (https://aws.amazon.com/blogs/security/operationalizing-least-privilege-automate-iam-remediation-through-your-ci-cd-pipeline/)

  • Gerencie o consentimento OAuth de usuários finais para agentes de IA com o Amazon Bedrock AgentCore

    O problema: infraestrutura de consentimento OAuth que cada equipe precisava construir do zero

    Agentes de IA frequentemente precisam acessar serviços externos — como GitHub e Slack — em nome de um usuário real. Para isso, o usuário precisa se autenticar com o provedor e aprovar explicitamente os acessos solicitados. O sistema, por sua vez, precisa associar com segurança essa autorização ao usuário que a concedeu. Esse processo é chamado de vinculação de sessão (session binding).

    Até recentemente, quem usava o fluxo OAuth de três pernas (3LO) — também conhecido como fluxo de código de autorização do OAuth 2.0 — dentro do AgentCore Identity precisava construir e hospedar toda essa infraestrutura por conta própria. Isso incluía exibir a URL de autorização, hospedar um callback HTTPS público, autenticar o usuário de retorno, gerenciar sessões de navegador e chamar o endpoint CompleteResourceTokenAuth para concluir o fluxo.

    A AWS anunciou uma solução gerenciada para esse problema: o Consent Portal, uma experiência web integrada ao AgentCore Identity, que elimina a necessidade de construir essa infraestrutura manualmente.

    O que é o Consent Portal e como ele funciona

    O Consent Portal é uma interface web gerenciada e um endpoint de vinculação de sessão para o AgentCore Gateway. O administrador cria um portal associado a um gateway e compartilha a URL com os usuários. A partir daí, o fluxo é completamente gerenciado:

    • O usuário se autentica com o Provedor de Identidade (IdP) da organização.
    • O portal lista os serviços disponíveis para o agente e seus respectivos status de conexão.
    • O usuário concede consentimento individualmente para cada provedor (por exemplo, GitHub ou Slack).
    • O portal gerencia os redirecionamentos do navegador e a vinculação de sessão.
    • O AgentCore Identity armazena os tokens resultantes em seu cofre de tokens.

    Essa funcionalidade é especialmente útil para agentes acessados via Ambiente de Desenvolvimento Integrado (IDE) e clientes do Protocolo de Contexto de Modelo (MCP), como Kiro, Claude Code, Cursor e Visual Studio Code. O usuário concede o consentimento antes de invocar uma ferramenta, e as chamadas subsequentes já usam o token armazenado para aquele usuário.

    Cenário de exemplo: assistente de desenvolvimento com acesso ao GitHub e Slack

    Para ilustrar o funcionamento, a AWS usa o exemplo de uma empresa fictícia chamada Example Corp, que fornece aos seus desenvolvedores um assistente de codificação com IA via AgentCore Gateway. O assistente possui dois alvos configurados:

    • Um alvo GitHub, capaz de listar repositórios e criar issues.
    • Um alvo Slack, capaz de listar canais públicos e postar mensagens.

    A empresa usa seu IdP corporativo para autenticar funcionários. O objetivo é que cada autorização OAuth do GitHub e do Slack fique vinculada ao funcionário que a aprovou, e que os desenvolvedores possam conectar cada provedor de forma independente, sem precisar repetir o processo toda vez que voltam à IDE.

    Pré-requisitos

    Antes de iniciar a configuração, são necessários:

    Configuração pelo administrador (Passos 1 a 6)

    Passo 1: Preparar o IdP corporativo e as conexões do gateway

    O administrador precisa anexar uma política do Gerenciamento de Identidade e Acesso (IAM) à sua identidade para executar os passos iniciais. A política cobre ações como criar o Consent Portal, gerenciar provedores de credenciais OAuth2, listar e atualizar alvos do gateway, e criar e repassar a role de execução. O trecho abaixo mostra a política exata documentada pela AWS:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "ManageConsentPortalResources",
          "Effect": "Allow",
          "Action": [
            "bedrock-agentcore:CreateConsentPortal",
            "bedrock-agentcore:GetConsentPortal",
            "bedrock-agentcore:ListConsentPortals",
            "bedrock-agentcore:CreateOauth2CredentialProvider",
            "bedrock-agentcore:GetOauth2CredentialProvider",
            "bedrock-agentcore:ListOauth2CredentialProviders",
            "bedrock-agentcore:GetGateway",
            "bedrock-agentcore:ListGateways",
            "bedrock-agentcore:CreateGatewayTarget",
            "bedrock-agentcore:GetGatewayTarget",
            "bedrock-agentcore:ListGatewayTargets",
            "bedrock-agentcore:UpdateGatewayTarget"
          ],
          "Resource": "*"
        },
        {
          "Sid": "CreateAndPassExecutionRole",
          "Effect": "Allow",
          "Action": [
            "iam:CreateRole",
            "iam:GetRole",
            "iam:PutRolePolicy",
            "iam:GetRolePolicy",
            "iam:PassRole"
          ],
          "Resource": "arn:aws:iam::111122223333:role/service-role/AmazonBedrockAgentCoreConsentPortal*"
        }
      ]
    }

    Passo 2: Configurar o aplicativo no IdP corporativo

    No IdP corporativo, o administrador cria um aplicativo web OpenID Connect (OIDC) para o Consent Portal. É necessário habilitar o grant de código de autorização, gerar um client ID e um client secret, e configurar os escopos de login — no mínimo openid. O administrador também deve registrar a URL de descoberta OIDC, que o portal usa para localizar o endpoint de autorização, o endpoint de token e as chaves de assinatura.

    Um ponto importante: o IdP precisa emitir um Token Web JSON (JWT) de acesso que o portal consiga validar. No caso do Okta, isso exige um servidor de autorização customizado com uma política de acesso adequada. No Auth0, pode ser necessário configurar um audience para que o IdP retorne um JWT assinado em vez de um token opaco.

    Passo 3: Criar o provedor de credenciais do IdP

    O portal lê o client ID e o client secret do IdP a partir de um provedor de credenciais OAuth2. No console do Amazon Bedrock AgentCore, em Build > Identity > Outbound Auth, o administrador adiciona um novo cliente OAuth com o nome, o client ID, o client secret e a configuração de descoberta OIDC do IdP corporativo.

    Passo 4: Verificar os pré-requisitos de saída

    Antes de criar o Consent Portal, é necessário confirmar que:

    • Os aplicativos OAuth do GitHub e do Slack estão registrados, com seus client secrets armazenados no AWS Secrets Manager.
    • O AgentCore Identity possui provedores de credenciais OAuth separados para GitHub e Slack, e a URL de callback gerada por cada um está registrada no respectivo aplicativo provedor.
    • Os alvos do gateway para GitHub e Slack usam o grant de código de autorização, solicitam apenas os escopos necessários e estão com status Ready.
    • A role de execução do Consent Portal consegue ler os secrets gerenciados pelo cliente referenciados pelos provedores de credenciais de saída.

    Passo 5: Criar o Consent Portal

    Na página de Identity do console, a seção Consent portals lista os portais existentes na conta e região. Para criar um novo portal, o administrador define um nome (de 1 a 50 caracteres, usando letras, números, hífens e underscores), uma descrição opcional de até 512 caracteres, e seleciona o gateway do assistente de desenvolvimento.

    Vale destacar: o nome do gateway fica visível para os usuários finais no Consent Portal, então é importante escolher um nome claro e reconhecível. Além disso, cada gateway suporta apenas um Consent Portal, e o gateway não pode ser alterado após a criação.

    Nas configurações de credenciais do IdP, o administrador seleciona o provedor OAuth2 criado no Passo 3 e mantém o escopo openid como obrigatório. Para as permissões, o console oferece a opção de criar automaticamente uma service role com as permissões necessárias.

    Enquanto o portal está sendo provisionado, o Número de Recurso da Amazon (ARN) e a role de execução já ficam visíveis, mas a URL ainda não é atribuída. Quando o provisionamento termina, o status muda para Active e a URL do portal passa a aparecer no console, seguindo o padrão https://<gateway-name>.consent-portal.bedrock-agentcore.<region>.amazonaws.com.

    Passo 6: Registrar as URLs de callback e compartilhar o portal

    Com a URL do portal em mãos, o administrador precisa atualizar as configurações de callback em três lugares distintos:

    • No aplicativo do IdP corporativo (Cognito, Okta, Auth0, etc.): substituir o callback temporário por <portal-url>/callback.
    • Em cada alvo 3LO do gateway: definir a URL de retorno padrão como <portal-url>/connect/callback.
    • Nos aplicativos GitHub e Slack: confirmar que a callbackUrl gerada pelo AgentCore Identity já está registrada (isso deve ter sido feito no Passo 4).

    Após validar tudo em um navegador, o administrador compartilha a URL do portal com a equipe de desenvolvimento por um canal de comunicação aprovado.

    Experiência do usuário final (Passo 7)

    Com a URL em mãos, o desenvolvedor acessa o portal no navegador, clica em Sign in e é redirecionado para o IdP corporativo. Após autenticar com as credenciais corporativas, o portal usa sua role de execução IAM para recuperar os alvos configurados no gateway e seus estados de conexão.

    Na página de Conexões, o desenvolvedor vê os clientes OAuth do GitHub e do Slack com seus respectivos status. Ao clicar em Connect para o GitHub, o GitHub exibe os escopos e os acessos de organização solicitados pelo aplicativo OAuth para que o usuário os aprove.

    Imagem original — fonte: Aws

    Após o GitHub retornar o resultado da autorização, o portal conclui a vinculação de sessão e exibe o cliente OAuth e o alvo como Connected. O Slack, por sua vez, permanece como Not connected — demonstrando que os consentimentos são independentes para cada provedor.

    Imagem original — fonte: Aws

    Se o agente precisar do Slack, o desenvolvedor pode conectar esse provedor de forma análoga. Caso contrário, basta deixar desconectado até que seja necessário. Após conceder o acesso, o desenvolvedor retorna à IDE ou ao cliente MCP configurado para usar o mesmo AgentCore Gateway e executa normalmente as chamadas de ferramentas do GitHub ou Slack.

    O que acontece por baixo dos panos

    O fluxo técnico interno funciona da seguinte forma:

    • O portal valida a resposta do IdP e estabelece uma sessão de navegador criptografada.
    • Usando sua role de execução, o portal lista os alvos 3LO do gateway associado.
    • Quando o usuário clica em Connect, o portal chama GetResourceOauth2Token e recebe uma URL de autorização e um URI de sessão.
    • Após o provedor retornar o código de autorização ao AgentCore Identity, o navegador é redirecionado para o endpoint gerenciado de vinculação de sessão do portal.
    • O portal chama CompleteResourceTokenAuth com o contexto do usuário autenticado.
    • Quando o provedor retorna um refresh token, o AgentCore Identity o armazena e o usa automaticamente para obter novos access tokens após a expiração do token atual.

    Caso nenhum refresh token válido esteja disponível — porque o provedor não emitiu um, ou ele expirou ou foi revogado — o usuário precisa retornar ao Consent Portal e reautorizar. A AWS recomenda configurar os provedores para emitir refresh tokens sempre que suportado: por exemplo, habilitando a expiração de tokens user-to-server no GitHub ou a rotação de tokens no Slack.

    Na próxima vez que o desenvolvedor abrir o portal, os provedores já conectados continuam visíveis como conectados. Não é necessário aprovar novamente, a menos que o grant seja revogado, expire ou exija novo consentimento. O desenvolvedor também pode desconectar um provedor e reconectá-lo posteriormente.

    Auditoria com AWS CloudTrail

    O Amazon Bedrock AgentCore registra as operações de consentimento no AWS CloudTrail. Para auditar a atividade, basta filtrar o histórico de eventos pela fonte bedrock-agentcore.amazonaws.com e revisar os seguintes eventos:

    • GetResourceOauth2Token: quando o portal inicia a autorização OAuth para um provedor.
    • CompleteResourceTokenAuth: quando a vinculação de sessão é concluída.
    • GetWorkloadAccessTokenForJWT: quando o portal obtém acesso ao gateway para o usuário autenticado.

    Um evento GetResourceOauth2Token identifica o provedor de credenciais, os escopos solicitados, o fluxo OAuth, a role de execução do portal e a região. Valores sensíveis de token e estado são ocultados. O exemplo abaixo mostra a estrutura do evento:

    {
      "eventSource": "bedrock-agentcore.amazonaws.com",
      "eventName": "GetResourceOauth2Token",
      "awsRegion": "ap-southeast-2",
      "userIdentity": {
        "type": "AssumedRole",
        "arn": "arn:aws:sts::111122223333:assumed-role/AmazonBedrockAgentCoreConsentPortalDefaultServiceRole-example/consent-dashboard-example"
      },
      "requestParameters": {
        "workloadIdentityToken": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "resourceCredentialProviderName": "gateway-demo-github",
        "scopes": ["read:user", "repo"],
        "oauth2Flow": "USER_FEDERATION",
        "customState": "HIDDEN_DUE_TO_SECURITY_REASONS"
      },
      "resources": [
        {
          "accountId": "111122223333",
          "type": "AWS::BedrockAgentCore::OAuth2CredentialProvider",
          "ARN": "arn:aws:bedrock-agentcore:ap-southeast-2:111122223333:token-vault/default/oauth2credentialprovider/gateway-demo-github"
        }
      ],
      "managementEvent": true
    }

    Em caso de falhas, os campos errorCode e errorMessage, combinados com o horário do evento, a role assumida, a região, o provedor de credenciais e os escopos solicitados, ajudam a identificar a causa.

    Limpeza dos recursos

    Quando os recursos não forem mais necessários, a AWS recomenda a seguinte ordem de remoção:

    • Excluir o Consent Portal no console do Amazon Bedrock AgentCore.
    • Remover as URLs de callback do portal no aplicativo do IdP corporativo e nos alvos do gateway.
    • Excluir os alvos do gateway que referenciam os provedores de credenciais de saída.
    • Excluir os provedores de credenciais OAuth de saída e o provedor de credenciais do IdP corporativo, se não estiverem sendo usados em outro lugar.
    • Excluir a role de execução do portal, se nenhum outro recurso a utilizar.

    Atenção: é necessário excluir o alvo do gateway antes de excluir seu provedor de credenciais de saída. Um provedor ainda referenciado por um alvo não pode ser excluído.

    Exemplos e documentação adicional

    Para exemplos completos usando Microsoft Entra ID e Okta, a AWS disponibilizou repositórios no GitHub com os seguintes materiais:

    Para saber mais, acesse a página do Amazon Bedrock AgentCore.

    Fonte

    Manage end-user OAuth consent for AI agents with Amazon Bedrock AgentCore (https://aws.amazon.com/blogs/machine-learning/manage-end-user-oauth-consent-for-ai-agents-with-amazon-bedrock-agentcore/)

  • AWS Security Reference Architecture: Um Mergulho Profundo na Conformidade com PCI DSS

    A AWS publica guia aprofundado de conformidade PCI DSS para a AWS SRA

    A Amazon Web Services (AWS) anunciou a publicação do Guia Aprofundado de Conformidade com o Padrão de Segurança de Dados da Indústria de Cartões de Pagamento (PCI DSS) para a Arquitetura de Referência de Segurança da AWS (AWS SRA). O material não substitui a AWS SRA existente — ele a estende, adicionando uma camada de orientação prescritiva e específica para organizações que armazenam, processam ou transmitem dados de titulares de cartões na nuvem AWS.

    Por muito tempo, empresas sujeitas ao PCI DSS buscaram um recurso abrangente que conectasse as boas práticas gerais de segurança da AWS com os controles técnicos e organizacionais exigidos para alcançar e manter a conformidade. Esse novo guia preenche exatamente essa lacuna.

    O que é o Guia Aprofundado de PCI DSS para a AWS SRA?

    A AWS SRA é uma referência de arquitetura de segurança holística e prescritiva que descreve como os serviços de segurança da AWS se encaixam em um ambiente multi-conta. Ela é construída em torno de uma arquitetura web modular de três camadas e foi projetada intencionalmente para ser adaptada conforme a necessidade — nem toda carga de trabalho precisa de todos os serviços, mas a AWS SRA apresenta o espectro completo de opções e seus relacionamentos arquiteturais.

    O novo guia de PCI DSS aprofunda essa base de duas formas principais:

    • Mapeamento de tipos de conta para limites de escopo do PCI DSS: mostra quais contas estão dentro do escopo, conectadas ou com impacto de segurança, e quais estão fora do escopo em uma arquitetura típica de pagamentos.
    • Sobreposição de controles específicos do PCI DSS às configurações existentes da AWS SRA: por exemplo, maior granularidade de logging, requisitos de criptografia ou restrições de rede que vão além da linha de base da AWS SRA.

    Os padrões arquiteturais e controles descritos no guia se aplicam tanto a comerciantes quanto a provedores de serviços.

    Para quem é esse guia?

    O material foi desenvolvido para diferentes perfis de profissionais que trabalham com segurança e conformidade em ambientes AWS:

    • Arquitetos de segurança que estão projetando ou expandindo uma landing zone multi-conta AWS para cargas de trabalho sob o escopo do PCI DSS.
    • Engenheiros de conformidade que precisam mapear controles AWS para os requisitos do PCI DSS durante avaliações.
    • Equipes de plataforma de nuvem que constroem serviços de segurança compartilhados e precisam acomodar um Ambiente de Dados de Titulares de Cartões (CDE — Cardholder Data Environment).
    • Avaliadores de Segurança Qualificados (QSAs — Qualified Security Assessors) e Avaliadores de Segurança Internos (ISAs — Internal Security Assessors) que desejam entender como os padrões da AWS SRA endereçam a intenção do PCI DSS.

    Seis princípios de design da AWS SRA aplicados ao PCI DSS

    O guia aplica seis princípios fundamentais da AWS SRA que são especialmente relevantes para a conformidade com o PCI DSS:

    1. Implementar uma base de identidade sólida

    Aplicar o princípio do menor privilégio, separação de funções e gerenciamento centralizado de identidade. Eliminar a dependência de credenciais estáticas de longo prazo.

    2. Habilitar rastreabilidade

    Monitorar, alertar e auditar ações em tempo real. Integrar a coleta de logs e métricas com sistemas automatizados de investigação e resposta.

    3. Aplicar segurança em todas as camadas

    Defesa em profundidade com controles preventivos e detectivos na borda, na Nuvem Privada Virtual (VPC — Virtual Private Cloud), no balanceamento de carga, na computação, no sistema operacional, na aplicação e no código.

    4. Proteger dados em trânsito e em repouso

    Classificar dados por sensibilidade e aplicar criptografia, tokenização e mecanismos de controle de acesso.

    5. Manter pessoas longe dos dados

    Reduzir ou eliminar o acesso direto aos dados de titulares de cartões por meio de automação e ferramentas adequadas.

    6. Preparar-se para eventos de segurança

    Estabelecer processos de gerenciamento de incidentes, executar simulações e implementar detecção e recuperação automatizadas.

    Como usar o guia na prática

    O guia pode ser consumido de duas formas, dependendo do objetivo do profissional:

    • Como narrativa: lendo do início ao fim, começando pelo primer de PCI DSS, passando pela arquitetura e modelo de escopo de contas, até os mapeamentos detalhados de requisitos. Essa abordagem oferece uma compreensão completa de como a AWS SRA e o PCI DSS se conectam.
    • Como referência: navegando diretamente para requisitos específicos do PCI DSS ou tipos de conta da AWS SRA relevantes para o projeto em andamento. O guia inclui diagramas de arquitetura, tabelas de mapeamento de requisitos e configurações específicas por serviço que podem ser usadas de forma independente.

    O material também disponibiliza diagramas de arquitetura para download e tabelas detalhadas de mapeamento de controles, tornando mais simples a referência durante revisões de segurança e avaliações de PCI DSS.

    Próximos passos recomendados

    A AWS recomenda que as organizações revisem o Guia Aprofundado de PCI DSS para a AWS SRA e comecem a mapear seus padrões para o próprio Ambiente de Dados de Titulares de Cartões. Em seguida, é indicado validar os ambientes existentes em relação às boas práticas da SRA utilizando o SRA Verify.

    Para quem precisar de suporte na arquitetura ou implementação de um ambiente AWS em conformidade com PCI DSS, a AWS indica o contato com o AWS Security Assurance Services, o AWS Professional Services, o time de conta AWS ou a Rede de Parceiros AWS.

    Fonte

    AWS Security Reference Architecture: A deep dive into PCI DSS compliance (https://aws.amazon.com/blogs/security/aws-security-reference-architecture-a-deep-dive-into-pci-dss-compliance/)

  • Detecção de loops recursivos do AWS Lambda agora disponível na Europe Sovereign Cloud

    Proteção contra loops recursivos chega à Europe Sovereign Cloud

    A AWS expandiu a disponibilidade da detecção de loops recursivos do Lambda para funções que rodam na Europe Sovereign Cloud. O recurso, que já estava disponível em outras regiões, agora protege também os ambientes soberanos europeus contra um dos problemas mais silenciosos — e potencialmente caros — em arquiteturas orientadas a eventos.

    O problema: loops recursivos não intencionais

    Em aplicações orientadas a eventos, é comum usar fontes de eventos como Amazon S3, Amazon SQS e Amazon SNS para acionar funções Lambda. O problema surge quando uma má configuração ou um defeito no código faz com que o evento seja reenviado para a mesma origem que disparou a função — criando um loop recursivo que se retroalimenta indefinidamente.

    Esse tipo de situação pode passar despercebido por algum tempo, gerando uso não intencional e, consequentemente, cobranças inesperadas na conta da AWS. É exatamente esse cenário que a detecção de loops recursivos foi projetada para evitar.

    Como a detecção funciona

    Quando a AWS identifica um loop recursivo em andamento, o processamento do evento é interrompido automaticamente. Além disso, o usuário recebe uma notificação no AWS Health Dashboard com orientações de diagnóstico para ajudar a identificar a causa raiz do problema.

    O recurso fica ativado por padrão em funções Lambda que utilizam uma versão do SDK compatível, sem necessidade de configuração adicional.

    E se o loop for intencional?

    Existem cenários legítimos em que uma função Lambda precisa invocar a si mesma ou acionar recursivamente outros serviços de forma controlada. Para esses casos, a AWS disponibiliza a API PutFunctionRecursionConfig, que permite desativar a detecção de loops recursivos em funções específicas.

    Ou seja, quem precisa do comportamento recursivo intencional não fica bloqueado — basta ajustar a configuração da função individualmente.

    Por que isso importa para quem usa a Europe Sovereign Cloud

    A Europe Sovereign Cloud é voltada para organizações com requisitos rigorosos de residência de dados e conformidade regulatória na Europa. Com essa expansão, os clientes que operam nesse ambiente passam a contar com o mesmo nível de proteção operacional já disponível nas demais regiões da AWS — o que é especialmente relevante em ambientes onde qualquer anomalia de custo ou comportamento precisa ser detectada e contida rapidamente.

    Para saber mais sobre como o recurso funciona em detalhes, a AWS disponibiliza a documentação oficial do Lambda com todas as informações técnicas necessárias.

    Fonte

    AWS Lambda recursive loop detection is now available in Europe Sovereign Cloud (https://aws.amazon.com/about-aws/whats-new/2026/09/lambda-recursion-europe-sovereign-cloud)

  • Como automatizar permissões personalizadas por usuário no Amazon QuickSight

    O problema de escalar controle de acesso no QuickSight

    Conforme os ambientes do Amazon QuickSight crescem — especialmente com a expansão das funcionalidades de IA — gerenciar permissões personalizadas de forma manual se torna inviável. O princípio do menor privilégio exige que cada usuário tenha acesso apenas ao que precisa, e fazer isso na mão para centenas ou milhares de usuários é receita para erro.

    O QuickSight trabalha com uma hierarquia de três camadas para aplicar permissões: conta, função (role) e usuário. As configurações de usuário sobrepõem as de função, que por sua vez sobrepõem as de conta. Isso permite políticas de segurança em camadas bastante flexíveis. A AWS documentou quatro cenários práticos para automatizar essa atribuição nos momentos críticos do ciclo de vida do usuário.

    Cenário 1: Aplicar permissões no momento do cadastro via API

    Para quem controla o processo de criação de usuários de ponta a ponta — como plataformas SaaS que incorporam o QuickSight para seus clientes — a abordagem mais simples é incluir o parâmetro --custom-permissions-name diretamente na chamada da API RegisterUser. O perfil de permissão é aplicado no ato da criação, sem necessidade de infraestrutura adicional.

    aws quicksight register-user \
      --aws-account-id 123456789012 \
      --namespace default \
      --identity-type QUICKSIGHT \
      --user-role AUTHOR \
      --email user@example.com \
      --user-name user_name \
      --custom-permissions-name "Restricted-Author-Profile"

    Um exemplo prático: restringir automaticamente funcionalidades premium — como relatórios paginados e GenBI — com base no plano contratado pelo cliente, no momento em que o usuário é provisionado.

    Cenário 2: Definir padrões no nível de conta ou função

    Antes de construir automações mais elaboradas, a AWS recomenda configurar padrões que se aplicam automaticamente a todos os usuários, atuais e futuros, com esforço operacional mínimo. Há duas APIs nativas para isso, e a escolha depende do nível de granularidade desejado.

    Padrão no nível de conta

    A API UpdateAccountCustomPermission define um perfil de fallback aplicado a qualquer usuário sem perfil explícito atribuído — incluindo novos usuários criados via provisionamento Just-In-Time.

    aws quicksight update-account-custom-permission \
      --aws-account-id 123456789012 \
      --custom-permissions-name "Restricted-User-Profile"

    Padrão no nível de função

    Já a API UpdateRoleCustomPermission permite definir um perfil padrão por função do QuickSight (READER, AUTHOR, ADMIN e funções PRO).

    aws quicksight update-role-custom-permission \
      --aws-account-id 123456789012 \
      --role AUTHOR \
      --namespace default \
      --custom-permissions-name "Restricted-Author-Profile"

    Um cenário real: uma empresa com 50.000 usuários que precisa bloquear todas as novas funcionalidades de GenBI enquanto a equipe de segurança faz uma revisão de 60 a 90 dias. O padrão no nível de conta aplica essa restrição instantaneamente, sem automação por usuário e sem janela de exposição.

    Cenário 3: Automação orientada a eventos com EventBridge e Lambda

    Quando a organização precisa de perfis de permissão diferentes por grupo, é necessária uma arquitetura mais sofisticada. O QuickSight não oferece uma API nativa para atribuir permissões diretamente a grupos, então a solução detecta quando um usuário é adicionado ou removido de um grupo e aplica o perfil correspondente automaticamente.

    A AWS recomenda combinar este cenário com o Cenário 2. Quando um usuário é provisionado via federação Just-In-Time, existe uma janela entre a criação da conta e a adição ao grupo correto. O Cenário 2 fecha essa janela com um padrão restritivo; o Cenário 3 refina as permissões assim que o usuário é atribuído ao grupo. A configuração no nível de usuário do Cenário 3 tem precedência sobre o padrão do Cenário 2 — sem conflito, apenas camadas complementares.

    Como a arquitetura funciona

    O QuickSight e o IAM Identity Center (IDC) emitem eventos distintos no AWS CloudTrail para mudanças de membros em grupos. O QuickSight emite CreateGroupMembership ao adicionar e DeleteGroupMembership ao remover. O IDC emite AddMemberToGroup ao adicionar e RemoveMemberFromGroup ao remover. O Amazon EventBridge detecta esses eventos e aciona o AWS Lambda, que aplica o perfil correto via API UpdateUserCustomPermission.

    Pré-requisitos

    • Uma conta AWS com acesso administrativo
    • Permissões do AWS IAM para criar e gerenciar recursos via AWS CloudFormation
    • AWS CloudTrail habilitado na região de destino
    • AWS IAM Identity Center: necessário apenas se usar gatilhos baseados em grupos do IDC
    • Python 3.9+ e AWS CLI v2 (para o script de atualização em lote do Cenário 4)

    Implantação com CloudFormation

    É possível implantar o pipeline completo — função IAM, função Lambda e regra do EventBridge — usando o template CloudFormation fornecido pela AWS. O stack deve ser implantado na mesma região da assinatura do QuickSight, pois as regras do EventBridge capturam eventos apenas dentro da própria região. Os parâmetros do template incluem: UseIdentityCenter, TargetGroupName, PermissionProfileName, QuickSightNamespace e LambdaFunctionPrefixName.

    Implantação manual: passo a passo

    Passo 1: Criar a função IAM para o Lambda. No Console do IAM, crie uma política chamada QuickSight-Lambda-Policy com as permissões necessárias para logs, QuickSight e Identity Store (se usar IDC). Em seguida, crie a função QuickSight-Auto-Permissions-Role vinculada a essa política.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents"
          ],
          "Resource": "arn:aws:logs:*:YOUR_ACCOUNT_ID:log-group:/aws/lambda/Auto-Assign-QS-Permissions:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "quicksight:UpdateUserCustomPermission",
            "quicksight:DeleteUserCustomPermission",
            "quicksight:UpdateUser",
            "quicksight:DescribeUser"
          ],
          "Resource": "arn:aws:quicksight:*:*:user/*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "identitystore:DescribeUser",
            "identitystore:DescribeGroup"
          ],
          "Resource": "*"
        }
      ]
    }

    Passo 2: Implantar a função Lambda. Crie a função Auto-Assign-QS-Permissions com runtime Python 3.14 (ou a versão mais recente disponível), usando a role criada no passo anterior. Aumente o timeout para 30 segundos e configure as variáveis de ambiente: PERMISSION_PROFILE, TARGET_GROUP_NAME e NAMESPACE. Cole o código abaixo no editor:

    import logging
    import os
    import time
    import boto3
    
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    quicksight = boto3.client("quicksight")
    identity_store = boto3.client("identitystore")
    
    def lambda_handler(event, context):
        detail = event.get("detail", {})
        event_source = detail.get("eventSource", "")
        event_name = detail.get("eventName", "")
        permission_profile = os.environ["PERMISSION_PROFILE"]
        target_group = os.environ["TARGET_GROUP_NAME"]
        namespace = os.environ["NAMESPACE"]
        account_id = (
            detail.get("userIdentity", {}).get("accountId")
            or detail.get("recipientAccountId")
        )
        logger.info(
            "Event received: source=%s, name=%s", event_source, event_name
        )
        try:
            if event_source == "sso-directory.amazonaws.com":
                return handle_idc_event(detail, account_id, namespace, permission_profile, target_group)
            elif event_source == "quicksight.amazonaws.com":
                return handle_quicksight_event(detail, account_id, namespace, permission_profile, target_group)
            else:
                logger.warning("Unknown event source: %s", event_source)
                return {"statusCode": 200, "body": "Unknown event source"}
        except Exception as e:
            logger.error("Error processing event: %s", str(e))
            return {"statusCode": 500, "body": str(e)}
    
    def handle_idc_event(detail, account_id, namespace, permission_profile, target_group):
        """Handle AddMemberToGroup or RemoveMemberFromGroup from sso-directory.amazonaws.com."""
        request_params = detail.get("requestParameters") or {}
        identity_store_id = request_params.get("identityStoreId")
        group_id = request_params.get("groupId")
        member_id = (request_params.get("memberId") or (request_params.get("member") or {}).get("memberId"))
        if not identity_store_id or not group_id or not member_id:
            logger.warning("Missing identityStoreId, groupId, or memberId.")
            return {"statusCode": 200, "body": "Missing IDC event info"}
        group_resp = identity_store.describe_group(
            IdentityStoreId=identity_store_id,
            GroupId=group_id,
        )
        group_name = group_resp.get("DisplayName", "")
        logger.info("IDC group resolved: '%s' (ID: %s)", group_name, group_id)
        if group_name != target_group:
            logger.info(
                "Group '%s' does not match target '%s'. Skipping.",
                group_name, target_group,
            )
            return {"statusCode": 200, "body": f"Group {group_name} not targeted"}
        idc_user = identity_store.describe_user(
            IdentityStoreId=identity_store_id,
            UserId=member_id,
        )
        user_name = idc_user.get("UserName")
        if not user_name:
            logger.warning("No UserName found for IDC user %s", member_id)
            return {"statusCode": 200, "body": "No UserName in IDC"}
        logger.info("IDC user resolved: %s (ID: %s)", user_name, member_id)
        qs_user = None
        for attempt in range(5):
            try:
                qs_user = quicksight.describe_user(
                    AwsAccountId=account_id,
                    Namespace=namespace,
                    UserName=user_name,
                )
                break
            except quicksight.exceptions.ResourceNotFoundException:
                logger.info(
                    "User '%s' not yet in QuickSight (attempt %d/5). Waiting...",
                    user_name, attempt + 1,
                )
                time.sleep(3)
        if qs_user is None:
            logger.warning(
                "User '%s' not found in QuickSight after retries.", user_name,
            )
            return {"statusCode": 200, "body": f"User {user_name} not in QuickSight"}
        event_name = detail.get("eventName", "")
        if event_name == "RemoveMemberFromGroup":
            return remove_permissions(account_id, namespace, user_name)
        else:
            return apply_permissions(account_id, namespace, user_name, permission_profile)
    
    def handle_quicksight_event(detail, account_id, namespace, permission_profile, target_group):
        """Handle CreateGroupMembership or DeleteGroupMembership from quicksight.amazonaws.com."""
        request_params = detail.get("requestParameters") or {}
        group_name = request_params.get("groupName", "")
        member_name = request_params.get("memberName", "")
        if not group_name or not member_name:
            logger.warning("Missing groupName or memberName in event.")
            return {"statusCode": 200, "body": "Missing event info"}
        event_name = detail.get("eventName", "")
        action = "removed from" if event_name == "DeleteGroupMembership" else "added to"
        logger.info(
            "QuickSight group membership: user '%s' %s '%s'",
            member_name, action, group_name,
        )
        if group_name != target_group:
            logger.info(
                "Group '%s' does not match target '%s'. Skipping.",
                group_name, target_group,
            )
            return {"statusCode": 200, "body": f"Group {group_name} not targeted"}
        if event_name == "DeleteGroupMembership":
            return remove_permissions(account_id, namespace, member_name)
        else:
            return apply_permissions(account_id, namespace, member_name, permission_profile)
    
    def apply_permissions(account_id, namespace, user_name, permission_profile):
        """Apply the custom permission profile to a QuickSight user."""
        quicksight.update_user_custom_permission(
            AwsAccountId=account_id,
            Namespace=namespace,
            UserName=user_name,
            CustomPermissionsName=permission_profile,
        )
        logger.info(
            "Permission profile '%s' applied to user '%s'.",
            permission_profile, user_name,
        )
        return {
            "statusCode": 200,
            "body": f"Permission applied for user: {user_name}",
        }
    
    def remove_permissions(account_id, namespace, user_name):
        """Remove custom permissions, reverting user to account/role-level default."""
        try:
            quicksight.delete_user_custom_permission(
                AwsAccountId=account_id,
                Namespace=namespace,
                UserName=user_name,
            )
            logger.info("Permission removed for user '%s'.", user_name)
            return {
                "statusCode": 200,
                "body": f"Permission removed for user: {user_name}",
            }
        except quicksight.exceptions.ResourceNotFoundException:
            logger.info("User '%s' had no custom permission to remove.", user_name)
            return {"statusCode": 200, "body": f"No permission to remove for: {user_name}"}

    Passo 3: Criar a regra no Amazon EventBridge. No console do EventBridge, crie uma regra chamada QuickSight-Group-Membership-Creation-Rule. O padrão de evento varia conforme o tipo de autenticação da conta:

    Opção A — IAM Identity Center:

    {
      "source": ["aws.sso-directory"],
      "detail-type": ["AWS API Call via CloudTrail"],
      "detail": {
        "eventSource": ["sso-directory.amazonaws.com"],
        "eventName": ["AddMemberToGroup", "RemoveMemberFromGroup"],
        "errorCode": [{ "exists": false }]
      }
    }

    Opção B — Outros métodos de autenticação (grupos nativos do QuickSight):

    {
      "source": ["aws.quicksight"],
      "detail-type": ["AWS API Call via CloudTrail"],
      "detail": {
        "eventSource": ["quicksight.amazonaws.com"],
        "eventName": ["CreateGroupMembership", "DeleteGroupMembership"],
        "errorCode": [{ "exists": false }]
      }
    }

    Passo 4: Adicionar o gatilho do EventBridge à função Lambda. Na função Lambda, acesse Configuração → Gatilhos → Adicionar gatilho, selecione Amazon EventBridge e escolha a regra criada no passo anterior.

    Passo 5: Verificar a configuração. Adicione manualmente um usuário ao grupo alvo e monitore os logs do CloudWatch da função Lambda. A confirmação de sucesso aparece como: Permission profile '123' applied to user 'XYZ'.

    Pontos de atenção no design

    Quando um usuário é removido do grupo alvo, a função Lambda chama DeleteUserCustomPermission, revertendo o usuário ao padrão de conta ou função definido no Cenário 2. Se um usuário pertencer a múltiplos grupos com perfis diferentes, o QuickSight suporta apenas um perfil por usuário por vez — a lógica de resolução de conflito entre grupos deve ser definida pela equipe com base nas regras de prioridade da organização.

    Cenário 4: Atualização em lote para usuários já existentes

    A automação orientada a eventos do Cenário 3 só captura eventos futuros — ela não resolve o caso de grupos que já existem com usuários que precisam de restrições aplicadas retroativamente. Para isso, a solução é um script Python que itera por todos os membros de um grupo do QuickSight e aplica o perfil de permissão a cada um. O script lida com paginação via NextToken, já que a API ListGroupMemberships retorna no máximo 100 membros por chamada.

    import boto3
    import sys
    import time
    import csv
    from botocore.exceptions import ClientError
    
    # =========================================================
    # CONFIGURATION - Edit these values before running
    # =========================================================
    # 1. Your AWS Account ID
    AWS_ACCOUNT_ID = '279938032093'
    
    # 2. The QuickSight Group whose members you want to target
    TARGET_GROUP_NAME = 'BlogTestGroup'
    
    # 3. The name of the Custom Permission Profile you want to apply
    PERMISSION_PROFILE_NAME = 'TestBlog'
    
    # 4. Namespace (almost always 'default')
    NAMESPACE = 'default'
    # =========================================================
    
    qs = boto3.client('quicksight')
    
    def get_all_group_members(group_name):
        print(f"Fetching members from group: '{group_name}'...")
        next_token = None
        while True:
            try:
                api_args = {
                    'AwsAccountId': AWS_ACCOUNT_ID,
                    'Namespace': NAMESPACE,
                    'GroupName': group_name,
                    'MaxResults': 100
                }
                if next_token:
                    api_args['NextToken'] = next_token
                response = qs.list_group_memberships(**api_args)
                for member in response.get('GroupMemberList', []):
                    yield member.get('MemberName')
                next_token = response.get('NextToken')
                if not next_token:
                    break
            except qs.exceptions.ResourceNotFoundException:
                print(f"ERROR: The group '{group_name}' does not exist.")
                sys.exit(1)
            except ClientError as e:
                print(f"CRITICAL API ERROR: {e}")
                sys.exit(1)
    
    def apply_permission(user_name):
        try:
            qs.update_user_custom_permission(
                AwsAccountId=AWS_ACCOUNT_ID,
                UserName=user_name,
                Namespace=NAMESPACE,
                CustomPermissionsName=PERMISSION_PROFILE_NAME
            )
            return True, "Success"
        except qs.exceptions.ResourceNotFoundException as e:
            error_msg = str(e)
            if 'User' in error_msg or 'user' in error_msg:
                return False, "User not found (might have been deleted)"
            else:
                return False, f"Profile '{PERMISSION_PROFILE_NAME}' not found"
        except ClientError as e:
            return False, str(e)
    
    def main():
        print("--------------------------------------------")
        print(f"STARTING BATCH UPDATE")
        print(f"Target Group: {TARGET_GROUP_NAME}")
        print(f"Applying Profile: {PERMISSION_PROFILE_NAME}")
        print("--------------------------------------------\n")
        success_count = 0
        fail_count = 0
        failed_users = []
        for user_name in get_all_group_members(TARGET_GROUP_NAME):
            print(f"Processing: {user_name}...", end=" ")
            status, message = apply_permission(user_name)
            if status:
                print("OK")
                success_count += 1
            else:
                print(f"FAILED ({message})")
                fail_count += 1
                failed_users.append({'UserName': user_name, 'Error': message})
            time.sleep(0.1)
        print("\n--------------------------------------------")
        print("JOB COMPLETED")
        print(f"Total Success: {success_count}")
        print(f"Total Failed: {fail_count}")
        print("--------------------------------------------")
        if failed_users:
            csv_filename = f"failed_users_{TARGET_GROUP_NAME}.csv"
            with open(csv_filename, 'w', newline='') as f:
                writer = csv.DictWriter(f, fieldnames=['UserName', 'Error'])
                writer.writeheader()
                writer.writerows(failed_users)
            print(f"\nFailed users written to: {csv_filename}")
    
    if __name__ == "__main__":
        main()

    O script pode ser executado localmente ou diretamente no AWS CloudShell, que já vem pré-autenticado e com o Boto3 instalado. O intervalo padrão de 0,1 segundo entre chamadas (~10 requisições/segundo) é adequado para a maioria dos ambientes. Para grupos com mais de 10.000 membros, recomenda-se aumentar esse valor para evitar throttling.

    Limpeza dos recursos

    Se a implantação foi feita via CloudFormation, basta excluir o stack para remover todos os recursos criados. Na implantação manual, exclua: a regra do EventBridge (QuickSight-Group-Membership-Creation-Rule), a função Lambda (Auto-Assign-QS-Permissions), a função IAM (QuickSight-Auto-Permissions-Role) e a política IAM (QuickSight-Lambda-Policy). O script do Cenário 4 não implanta infraestrutura e não requer limpeza.

    Qual cenário usar em cada situação

    Os quatro cenários cobrem contextos distintos e, em alguns casos, se complementam:

    • Cenário 1 — Cadastro via API: ideal para portais de onboarding personalizados que controlam a criação de usuários de ponta a ponta
    • Cenário 2 — Padrões de conta ou função: restrições consistentes para todos os usuários ou por função, sem automação adicional — ponto de partida recomendado
    • Cenário 3 — Eventos com EventBridge e Lambda: perfis distintos por grupo, com suporte a grupos nativos do QuickSight e grupos do IDC
    • Cenário 4 — Atualização em lote: para usuários já existentes provisionados antes da automação entrar em vigor

    Vale reforçar: os Cenários 2 e 3 são complementares, não alternativos. O Cenário 2 estabelece a linha de base restritiva e o Cenário 3 refina as permissões conforme os usuários são atribuídos a grupos. Para quem está começando, a recomendação é partir pelo Cenário 2. Para mais detalhes, consulte a documentação de permissões personalizadas do Amazon QuickSight.

    Fonte

    Automate user-level custom permissions for Amazon Quick (https://aws.amazon.com/blogs/machine-learning/automate-user-level-custom-permissions-for-amazon-quick/)

  • Amazon Bedrock Knowledge Base ganha APIs e painel para depurar controle de acesso por documento

    O que foi anunciado

    A AWS anunciou duas novas APIs para o Amazon Bedrock Managed Knowledge Base: CheckIngestedDocumentAcl e GetIngestedDocumentAcl. Juntas, elas oferecem aos times de engenharia uma forma autônoma de investigar e auditar problemas de controle de acesso em documentos ingeridos — sem precisar abrir um chamado de suporte.

    O problema que essas APIs resolvem

    Quem trabalha com fontes de dados habilitadas para ACL (Lista de Controle de Acesso) no Bedrock Knowledge Base já conhece bem a frustração: um usuário não encontra um documento esperado nos resultados de recuperação, e fica difícil saber se o problema é uma configuração incorreta de permissão ou algum outro fator. Até então, diagnosticar essa situação exigia esforço manual considerável.

    As novas APIs e a experiência de console que as acompanha fecham exatamente essa lacuna, permitindo identificar e corrigir problemas de permissão de forma rápida e direta.

    O que cada API faz

    CheckIngestedDocumentAcl

    Permite verificar se um usuário específico tem acesso a um determinado documento já ingerido. É a ferramenta ideal para responder à pergunta direta: “por que esse usuário não está vendo esse documento?”

    GetIngestedDocumentAcl

    Retorna a ACL completa associada a um documento, possibilitando uma auditoria detalhada de todas as permissões configuradas. Com isso, é possível identificar com precisão qualquer configuração incorreta.

    Experiência no console

    Além das APIs, a AWS também introduziu uma nova seção chamada Document Access Control na página de detalhes da fonte de dados no console. Por lá, é possível:

    • Verificar o acesso de um usuário a um documento informando o ID do documento e o e-mail do usuário;
    • Recuperar a ACL completa de um documento pelo seu ID.

    Por que isso importa para equipes enterprise

    Em ambientes corporativos com grandes bases de conhecimento, gerenciar permissões em escala é um desafio real. Essas novas capacidades entregam aos administradores a visibilidade necessária para manter o controle de acesso funcionando corretamente, sem depender de processos demorados de suporte.

    Saiba mais

    Para se aprofundar nas APIs, a AWS disponibiliza a documentação de referência para CheckIngestedDocumentAcl e GetIngestedDocumentAcl na API Reference do Amazon Bedrock. Mais informações sobre o serviço estão disponíveis na página do produto Amazon Bedrock Knowledge Bases.

    Fonte

    Amazon Bedrock Managed Knowledge Base adds APIs and console support for debugging document-level access control (https://aws.amazon.com/about-aws/whats-new/2026/09/amazon-bedrock-knowledge-base-debugging-document-access-control/)