Protegendo suas APIs

Desenvolvendo Aplicações na AWS

Ricardo Sueiras

Principal Technologist

Protegendo APIs na AWS

 

protegendo api

  • Proteger APIs é crucial para apps cloud-native.
  • Elas expõem funcionalidades sensíveis do negócio.
  • Geralmente são a porta pública para back-ends.
  • API Gateway ajuda a expor APIs com segurança.
Desenvolvendo Aplicações na AWS

Autorização e autenticação

 

autenticação e autorização

  • Dois conceitos chave:
  • Autenticação: quem é você.
  • Autorização: o que você pode fazer.
Desenvolvendo Aplicações na AWS

Autorização via IAM

 

iam

  • API Gateway pode usar IAM para autenticação e autorização.
  • Protege APIs com Signature Version 4 (SigV4).
  • Clientes assinam cada requisição.
  • API Gateway valida a assinatura antes de processar.
  • Políticas IAM controlam o que cada identidade pode invocar.
  • Ideal para comunicação serviço a serviço na AWS.
Desenvolvendo Aplicações na AWS

Autorizadores do Amazon Cognito

  • Cognito autentica usuários com JSON Web Tokens (JWTs).
  • Casos comuns: apps mobile, web e fluxos de login.
  • Suporta identidades federadas.
  • Funciona com provedores externos como Google, Apple e Facebook.
  • Provedores corporativos via SAML ou OIDC.
  • Valida JWTs nativamente, sem código de autorizador.

 

autorizadores cognito

Desenvolvendo Aplicações na AWS

Autorizadores Lambda

  • Uma função Lambda executa sua lógica de autorização personalizada.
  • Ela retorna uma política IAM permitindo ou negando acesso.
  • Use para validar tokens personalizados.
  • Integre com provedores de identidade externos.
  • Aplique suas próprias regras.

 

lambda authorizer

Desenvolvendo Aplicações na AWS

Autorizadores Lambda

  • Exemplo: validar um JWT de um provedor como Auth0.
  • Chega uma requisição e o API Gateway invoca o autorizador.
  • A função valida o token e retorna uma política IAM.
  • A política decide o acesso: permitir ou negar.
  • Se permitido, a requisição vai para o back-end.
  • Se negado, o API Gateway retorna 401 imediatamente.

 

lambda authorizer

Desenvolvendo Aplicações na AWS

Qual autorizador usar

 

escolhendo autorizador

  • Escolha Cognito para apps voltados ao usuário.
  • Oferece cadastro, login e validação de tokens gerenciados.
  • Sem necessidade de código customizado.
  • Escolha Lambda quando precisar de lógica própria.
  • Bom para provedores de identidade de terceiros.
  • Ou regras além do que o Cognito suporta.
Desenvolvendo Aplicações na AWS

Cache do autorizador

 

cache de autorização

  • Respostas do autorizador são colocadas em cache.
  • Isso reduz latência e custo em endpoints frequentes.
  • O TTL do cache é configurável.
  • Varia de 0 a 3.600 segundos.
  • O padrão é 300 segundos.
  • Definir TTL como 0 desativa o cache.
Desenvolvendo Aplicações na AWS

Políticas de recurso do API Gateway

 

políticas de recurso

  • Defina políticas para controlar quem acessa uma API.
  • Restrinja por conta da AWS.
  • Restrinja por faixa de IP.
  • Restrinja por VPC.
  • Ajuda a isolar APIs internas e limitar exposição.
Desenvolvendo Aplicações na AWS

Criptografia

  • API Gateway oferece endpoints HTTPS com TLS por padrão.
  • HTTPS criptografa dados em trânsito entre cliente e gateway.
  • Integra com AWS Certificate Manager (ACM).
  • ACM simplifica certificados para domínios personalizados.
  • Certificados de domínios personalizados são grátis.
  • NUNCA exponha APIs em HTTP sem criptografia.

 

criptografia

Desenvolvendo Aplicações na AWS

TLS mútuo (mTLS)

 

  • API Gateway suporta TLS mútuo (mTLS).
  • Autentica clientes usando certificados.
  • Requer nome de domínio configurado
  • Comum em comunicação máquina a máquina.
  • Ambas as partes verificam a identidade uma da outra.

 

mtls

Desenvolvendo Aplicações na AWS

Throttling e rate limiting de API

  • Throttling protege sistemas de back-end.
  • Melhora a confiabilidade da API.
  • Sem isso, serviços de back-end podem sobrecarregar.
  • Rate limits controlam requisições por segundo.
  • Burst limits permitem picos temporários.
  • Ultrapassar limites retorna 429 Too Many Requests.

 

throttling

Desenvolvendo Aplicações na AWS

Protegendo contra explorações comuns

 

waf

  • Anexe o AWS WAF ao API Gateway.
  • Bloqueia requisições maliciosas antes da sua API.
  • Impede tentativas de SQL injection.
  • Impede cross-site scripting (XSS).
  • Bloqueia tráfego de faixas de IP maliciosas conhecidas.
Desenvolvendo Aplicações na AWS

Planos de uso e chaves de API

 

planos de uso

  • Controle como clientes consomem suas APIs.
  • Configure cotas de requisições.
  • Defina limites de taxa.
  • Crie níveis de assinatura.
  • Atribua limites por cliente.
Desenvolvendo Aplicações na AWS

Cross-Origin Resource Sharing (CORS)

 

CORS

  • CORS permite que navegadores façam chamadas cross-origin.
  • Sem isso, requisições válidas do navegador podem ser bloqueadas.
  • CORS permissivo demais é um risco de segurança.
  • Evite Access-Control-Allow-Origin: * em produção.
  • Sempre restrinja CORS a origens confiáveis.
Desenvolvendo Aplicações na AWS

Cabeçalhos CORS e requisições preflight

  • Uma requisição OPTIONS de preflight roda antes da real.
  • Confirma que a API permite acesso cross-origin.
  • API Gateway adiciona os cabeçalhos CORS necessários.
  • Para integrações Non-Proxy, ele trata automaticamente.
  • Para Proxy, sua Lambda deve retornar os cabeçalhos CORS.
  • Sua Lambda também deve lidar com o OPTIONS de preflight.

 

cabeçalhos CORS

Desenvolvendo Aplicações na AWS

Vamos praticar!

Desenvolvendo Aplicações na AWS

Preparing Video For Download...