Tag: Lambda

  • Score Trust: arquitetura serverless na AWS para análise de risco (FIAP Challenge 2025)

    Score Trust: arquitetura serverless na AWS para análise de risco (FIAP Challenge 2025)

    O Score Trust foi o projeto que desenvolvemos para o FIAP Challenge 2025, como trabalho de conclusão de curso. É uma plataforma que analisa o comportamento do usuário no momento do login ou do checkout de uma aplicação e decide, em tempo real, se a operação deve ser liberada, revisada ou negada.

    Todo o backend roda em uma arquitetura serverless na AWS. Neste post de apoio ao vídeo, explico o papel de cada serviço, como o score é calculado e as decisões de segurança do projeto.

    O problema

    Fraudes em e-commerce acontecem justamente nos pontos mais sensíveis: login com credenciais vazadas, criação de contas falsas e checkout com dados roubados. Bloquear tudo gera atrito e perde vendas. Liberar tudo gera prejuízo. A ideia do Score Trust é dar a cada tentativa uma nota de risco e agir de forma proporcional:

    ScoreAção
    0 a 30ALLOW: segue normalmente
    31 a 75REVIEW: pede uma verificação extra (biometria facial)
    76 a 100DENY: bloqueia a operação

    A arquitetura na AWS

    Arquitetura serverless do Score Trust na AWS: WAF, API Gateway, Lambda, DynamoDB, S3 e Rekognition

    O e-commerce integra um SDK em JavaScript que coleta os sinais do usuário e chama a API do Score Trust. A partir daí, tudo é serverless:

    Serviço AWSPapel no Score Trust
    Route 53DNS e domínio das APIs
    AWS Certificate ManagerCertificados TLS das APIs
    AWS WAFProteção na borda, antes de qualquer requisição chegar à lógica. Veja como configurar: Como configurar o AWS WAF
    Amazon API GatewayExpõe as rotas /identity/verify, /identity/face-verify e /getRiskEvents, com API Key e planos de uso
    AWS Lambda (Python)Motor de risco, verificação facial, consulta de eventos e administração de regras
    Amazon DynamoDBTabelas de eventos, regras, pesos e dispositivos conhecidos
    Amazon S3Armazenamento das fotos usadas na biometria
    Amazon RekognitionCompareFaces para comparar a foto atual com a foto base do usuário
    AWS KMSCriptografia dos dados em repouso
    IAMRoles com permissão mínima para cada Lambda
    Amazon CloudWatchLogs e observabilidade de todas as funções

    Por que serverless

    • Custo proporcional ao uso: sem servidor ligado esperando requisição. Para um projeto que começa pequeno, isso faz muita diferença.
    • Escala automática em picos, como Black Friday, sem planejamento de capacidade.
    • Menos superfície de ataque: não há sistema operacional para manter e corrigir.

    Como o score é calculado

    A Lambda RiskEngineEvaluate soma pesos de acordo com os sinais de risco encontrados. Os pesos ficam na tabela RuleWeights do DynamoDB, então dá para ajustar o motor sem mexer no código:

    SinalPeso
    País de origem diferente do Brasil80
    User-Agent suspeito (ex.: navegador headless)50
    Dispositivo não reconhecido40
    IP privado ou suspeito40
    Biometria facial não verificada25
    Timezone inesperado (fora de America/Sao_Paulo e America/Buenos_Aires)20
    IP com reputação ruim no AbuseIPDB20
    Idioma diferente de português10

    O score final é limitado a 100 pontos e convertido em ação pelas faixas da tabela ScoringRules. A resposta da API é simples e explicável:

    {
      "score": 68,
      "action": "REVIEW",
      "reason": [
        "Dispositivo não reconhecido",
        "Timezone inesperado",
        "País de origem não é Brasil"
      ]
    }

    A lista de motivos (reason) é importante: quem opera o sistema entende por que uma decisão foi tomada, o que facilita ajustar os pesos e atender o cliente.

    Verificação facial com Amazon Rekognition

    Quando o resultado é REVIEW, o usuário pode confirmar a identidade com uma foto, pela Lambda faceVerify:

    1. Primeira captura: a foto é salva no S3 como imagem base do usuário. Nenhuma comparação é cobrada nesse momento.
    2. Capturas seguintes: a nova foto é comparada com a base usando o CompareFaces do Rekognition.
    3. Se a similaridade passa do limite configurado, o evento muda para ALLOW e o score é reduzido. Se não passa, vira DENY.

    O evento original no DynamoDB é atualizado, e não duplicado, o que mantém a linha do tempo de cada usuário limpa para auditoria.

    Decisões de segurança

    • AWS WAF na frente do API Gateway.
    • APIs separadas por tipo de uso: usuário final e administrador.
    • API Key e planos de uso no API Gateway, para limitar o consumo.
    • KMS para dados em repouso e TLS em todas as chamadas.
    • TTL no DynamoDB, para que eventos antigos expirem automaticamente (minimização de dados, alinhada à LGPD).
    • IAM Roles com privilégio mínimo em cada Lambda. É o mesmo princípio que mostro com o Secrets Manager: AWS Secrets Manager com Lambda.

    Próximos passos do projeto

    • Portal de gestão para administrar regras e pesos.
    • Detecção de vivacidade (face liveness) na biometria.
    • Aprendizado contínuo para ajustar os pesos automaticamente com base nos resultados.

    Equipe e material de apoio

    O Score Trust foi desenvolvido por Adrian Wicke, Ana Carolina, Camille, Demetrio Paszko e Luiz Pessol.

    Se você trabalha com prevenção a fraudes ou arquitetura serverless, conta nos comentários como você resolveria esse problema.

  • Como usar o AWS Secrets Manager para armazenar segredos de uma Lambda

    Como usar o AWS Secrets Manager para armazenar segredos de uma Lambda

    Chave de API no código ou em variável de ambiente em texto claro é um dos achados mais comuns em auditorias de segurança. Neste post de apoio ao vídeo, mostro como usar o AWS Secrets Manager para guardar credenciais e lê-las a partir de uma AWS Lambda, usando uma IAM Role com permissão mínima.

    O exemplo é um projeto real e open source: uma Lambda que consulta diariamente as CVEs publicadas na NVD, filtra as críticas e envia alertas para o Telegram.

    O projeto: CVE Lambda Notifier

    A função roda todos os dias e:

    1. Consulta a API da NVD (National Vulnerability Database) pelas CVEs publicadas nas últimas 24 horas.
    2. Filtra por palavras-chave de tecnologias que você usa (ex.: apache, nginx, docker, zabbix) e por criticidade, com CVSS maior ou igual a 7.
    3. Envia cada CVE relevante para um canal do Telegram, com o score e o link da NVD.

    Para isso, a Lambda precisa de três informações sensíveis: a API key da NVD, o token do bot do Telegram e o ID do chat. É aqui que entra o Secrets Manager.

    Arquitetura do CVE Lambda Notifier: EventBridge Scheduler, AWS Lambda, Secrets Manager, API da NVD e Telegram

    Recursos AWS utilizados

    RecursoPapel no projeto
    AWS Lambda (Python 3.11)Executa a consulta, o filtro e o envio
    AWS Secrets ManagerGuarda NVD_API_KEY, TELEGRAM_BOT_TOKEN e TELEGRAM_CHAT_ID
    IAM RoleDá à Lambda permissão de ler apenas aquele segredo
    Amazon EventBridge SchedulerDispara a função todos os dias às 8h (horário de Brasília)
    Amazon CloudWatch LogsRegistra CVEs recebidas, filtradas, enviadas e erros

    Por que não usar só variáveis de ambiente

    Variáveis de ambiente da Lambda são práticas, mas o valor fica visível para qualquer pessoa com acesso de leitura à função, e costuma acabar copiado em templates, pipelines e prints. O Secrets Manager resolve isso:

    • Criptografia com AWS KMS.
    • Acesso controlado por IAM, por segredo.
    • Auditoria no CloudTrail de quem leu o segredo e quando.
    • Rotação, automática ou manual, sem precisar republicar o código.

    No projeto, a variável de ambiente guarda só o nome do segredo (SECRET_NAME), nunca o valor.

    Passo a passo resumido

    1. Criar o segredo

    No console do Secrets Manager, crie um segredo do tipo outro tipo de segredo com três pares chave/valor:

    ChaveConteúdo
    NVD_API_KEYChave de API da NVD
    TELEGRAM_BOT_TOKENToken do bot criado no BotFather
    TELEGRAM_CHAT_IDID do canal ou usuário que recebe os alertas

    2. Dar permissão à Lambda

    Na IAM Role da função, adicione uma política que permite apenas secretsmanager:GetSecretValue e apenas no ARN do seu segredo:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["secretsmanager:GetSecretValue"],
          "Resource": "arn:aws:secretsmanager:REGIAO:CONTA:secret:NOME-DO-SEGREDO-xxxxxx"
        }
      ]
    }

    Evite "Resource": "*". Se a função for comprometida, ela só consegue ler o segredo de que realmente precisa.

    3. Ler o segredo no código

    Com o boto3, já disponível no runtime Python da Lambda, a leitura é curta:

    import boto3, json, os
    
    def carregar_segredo(nome_segredo):
        client = boto3.client("secretsmanager")
        response = client.get_secret_value(SecretId=nome_segredo)
        return json.loads(response["SecretString"])
    
    segredos = carregar_segredo(os.getenv("SECRET_NAME"))
    token = segredos["TELEGRAM_BOT_TOKEN"]

    Ao carregar o segredo fora do handler, ele é lido uma vez por ambiente de execução e reaproveitado nas invocações seguintes. Isso economiza chamadas à API do Secrets Manager.

    4. Deploy e agendamento

    • Empacote as dependências e o código em um .zip (o repositório tem um build.sh que faz isso) e publique na Lambda com o handler lambda_handler.lambda_handler.
    • No EventBridge Scheduler, crie uma schedule com o fuso America/Sao_Paulo e a expressão cron(0 8 * * ? *), tendo a função como destino.
    • Configure retentativas e, se quiser rastreabilidade de falhas, uma DLQ no SQS.

    Boas práticas

    • Um segredo por aplicação e ambiente (dev, homologação, produção), com políticas IAM separadas.
    • Habilite a rotação sempre que o provedor da credencial permitir.
    • Nunca registre o valor do segredo em log. Cuidado com print de dicionários inteiros.
    • Custo: o Secrets Manager cobra por segredo armazenado por mês e por volume de chamadas à API. Para parâmetros não sensíveis, o Parameter Store do Systems Manager pode ser mais barato.

    Material de apoio

    O mesmo princípio de “segredo fora do código” foi aplicado na arquitetura do Score Trust: Score Trust: arquitetura serverless na AWS.

Visão geral de privacidade

Este site usa cookies para que possamos oferecer a melhor experiência de usuário possível. As informações dos cookies são armazenadas em seu navegador e executam funções como reconhecê-lo quando você retorna ao nosso site e ajudar nossa equipe a entender quais seções do site você considera mais interessantes e úteis.