Skip to main content

DOCUMENTACAO AUTENTICACAO UNIFICADA.pdf

Page 1


DOCUMENTAÇÃO AUTENTICAÇÃO UNIFICADA – APP

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

Turn static files into dynamic content formats.

Create a flipbook