1. Problemas Enfrentados
1.1 Contexto da Demanda
O projeto consiste em um backend escrito em AWS CDK, utilizando Lambdas para funcionalidades de autenticação:
• Login
• Cadastro
• Esqueci minha senha
• Validação de token
• Refresh token Essas funções já estavam implementadas e funcionando com um Cognito gerenciado na mesma conta AWS do backend.
No entanto, para viabilizar a implementação da autenticação unificada, foi definido que o novo User Pool do Cognito seria criado em outra conta AWS, o que passou a exigir que as Lambdas existentes realizassem acesso ao serviço de forma cross-account.
1.2 Principais Problemas Encontrados
a) Uso do Cognito Cross-Account
• O Cognito agora reside em outra conta AWS.
• As Lambdas não tinham permissão para executar operações no User Pool remoto.
• O backend precisava continuar funcionando sem reescrever todas as funções de autenticação.
b) Necessidade de STS (AssumeRole)
Para acessar o Cognito de outra conta, tornou-se obrigatório utilizar STS AssumeRole, algo que não existia na estrutura original.
c) Ausência de Validação Local de Token
• Antes, com o Cognito na mesma conta o token era validado automaticamente pelo API Gateway.
• Com o novo cenário, foi necessário criar uma Lambda de validação de token usando a chave pública JWKS do User Pool remoto.
• Essa validação passou a ser feita por um Authorizer Lambda configurado no CDK.
d) Ajustes de Segurança
• Permissões IAM precisaram ser revisadas para minimizar risco de acesso indevido.
• Foi necessário controlar o acesso via root principal da outra conta, garantindo que apenas as Lambdas utilizassem a role.
2. Soluções Adotadas
2.1 Criação de Role na Conta do Cognito
Foi criada na conta onde está o Cognito uma role chamada:
CognitoUserPoolCrossAccountRole
Essa role contém:
• Permissões necessárias para operações no User Pool (ex.: AdminGetUser, AdminInitiateAuth, AdminCreateUser etc.).
• Trust policy permitindo que a conta onde as Lambdas estão possa assumi-las via STS.
2.2 Criação de Policy na Conta das Lambdas
Na conta onde estão as Lambdas:
• Criou-se uma IAM Policy permitindo o sts:AssumeRole para o ARN da role criada na conta do Cognito (CognitoUserPoolCrossAccountRole).
• Essa policy foi anexada às Lambdas que realizam operações no Cognito como cadastro, reset de senha, criação de perfil entre outros.

Ajustes no código das Lambdas para usar:
• STSClient
• AssumeRoleCommand
• Credenciais temporárias para chamar o Cognito remoto.

2.4 Implementação do Lambda validate-token
Criou-se um Lambda dedicado à validação de tokens JWT emitidos pelo User Pool remoto.
Esse Lambda:
• Contém a URL da chave pública JWKS do Cognito.
• Valida assinatura, issuer, audience e exp.
• Retorna IAM policy permitindo ou negando o acesso à API.

2.5 Configuração de Authorizer via CDK
No CDK:
• Foi criado um LambdaAuthorizer
• Associado ao Lambda validate-token.
• Todas as rotas protegidas foram atualizadas para utilizar esse authorizer.

2.6 Continuidade das Funcionalidades Existentes
A implementação foi feita sem alterar a lógica da aplicação que já existia apenas foram adicionados:
• Permissões
• STS
• Validador de token
3. Documentação Técnica da Implementação
3.1 Principais Alterações Realizadas
a) IAM – Conta Cognito
• Criação da role CognitoUserPoolCrossAccountRole

Configuração da trust policy permitindo apenas as contas Video Player DEV/HML, SescSP Plataforma Dev e Shared Services assumir a role
• Criação da policy CognitoCrossAccountAdminUser associada a role
CognitoUserPoolCrossAccountRole

Adição das permissões de manipulação do User Pool.
b) IAM – Conta Backend
• Criação de policy para permitir sts:AssumeRole para a role da outra conta
• Inclusão da policy em cada Lambda relevante
• Ajustes no CDK adicionando:

c) Lambdas Existentes
Foram atualizados para:
• Utilizar AWS STS
• Assumir a role externa
• Usar as credenciais temporárias na chamada ao Cognito

3.2 Lambda validate-token
• Faz download e caching da JWKS
• Decodifica e valida o JWT
• Retorna policy de autorização

3.3 Authorizer no CDK
• Criação do Lambda Authorizer
• Mapeamento das rotas protegidas

4. Dependências e Versões
AWS Services
Serviço Uso
AWS Cognito User Pool unificado
AWS Lambda Backend de autenticação e validação
AWS STS AssumeRole cross-account
AWS IAM Roles, policies e trust relationships
AWS CDK Infra as Code do backend
API Gateway Exposição das rotas com Authorizer
5. Pontos de Atenção
Manutenção e Sustentação
• Expiração das credenciais temporárias (necessário renovar sempre)
• JWKS do Cognito pode mudar caso sejam rotacionadas as chaves (Lambda deve lidar com isso)
• Permissões IAM devem ser revisadas periodicamente
• Monitorar erros de AccessDeniedException ao assumir a role
• Logs do Lambda validate-token são críticos para troubleshooting Monitoramento
• CloudWatch Logs para Lambdas
• Erros no assumeRole
• Latência nas chamadas ao Cognito remoto
• Health dos endpoints protegidos pelo authorizer
Evolução Futura
• Considerar cache distribuído para JWKS (Redis, S3 assinada)
• Possível unificação de roles para reduzir repetição nos Lambdas
• Implementação de CI/CD com validação automática das policies
6. Instruções de Deploy / Rollback
Deploy
1. Deploy das stacks IAM (separado por conta)
2. Deploy da atualização no CDK e validate token (video-playerbackend)
3. Deploy das alterações no API Gateway com authorizer atribuído (video-player-mobile-backend)
Rollback
1. Remover o authorizer das rotas
2. Remover permissão STS dos Lambdas
3. Remover role cross-account se não for mais usada
4. Reverter para o Cognito anterior (se aplicável)
5. Deploy da versão anterior do CDK