Protegendo suas APIS: estratégias e componentes utilizando AWS API Gateway

AWS API Gateway é uma plataforma de gerenciamento de API da Amazon que permite criar, publicar, manter e monitorar APIs de forma fácil e escalável.

Como qualquer plataforma de gerenciamento de API, é importante garantir que as medidas de segurança sejam implementadas para proteger os dados e a infraestrutura da empresa e a plataforma AWS API Gateway te oferece esse gerenciamento.

Vamos trazer neste artigo algumas das principais medidas para proteção de suas APIS, bem como algumas outras estratégias e conceitos interessantes de serem utilizados dentro da plataforma AWS:

O Básico: Autenticação

Uma das principais medidas de segurança a serem implementadas no AWS API Gateway é a autenticação. Isso inclui a verificação de credenciais de usuário, como nome de usuário e senha, e a verificação de chaves de API. A autenticação pode ser implementada usando mecanismos como Amazon Cognito e Auth0, e pode ser configurada para exigir que os usuários se autentiquem antes de acessar as APIs.

Falandode Api Gateway, a AWS disponibiliza opções de autorização integrada diretamente com o Amazon Cognito, onde é possivel gerenciar todo o aspecto de acessos e tokens, ou ainda, um custom authorizer utilizando uma lambda para validar as credenciais.

Módulo de Authorizer AWS com opção de integração com Cognito ou Lambda.
Módulo de Authorizer com opção de integração com Cognito ou Lambda.

 

Evitando dores de cabeça: WAF

Uma medida de segurança importante a ser considerada no AWS API Gateway é o uso do web application firewall (WAF). um WAF é uma ferramenta de segurança que funciona como a primeira barreira de entrada de nossas apis. Validando as chamadas antes mesmo da execução da API, ele monitora e controla o tráfego da web para identificar e bloquear ataques maliciosos, como injeção SQL, ataques de negação de serviço (DoS) e outras ameaças.

AWS WAF é uma solução totalmente gerenciada que pode ser integrada ao AWS API Gateway para proteger suas APIs. Ele permite criar regras de segurança baseadas em critérios de conteúdo, como palavras-chave, expressões regulares e cabeçalhos, para bloquear tráfego malicioso antes que ele chegue às suas APIs. Além disso, fornece relatórios detalhados sobre as solicitações bloqueadas e permitidas para que você possa identificar e corrigir rapidamente quaisquer problemas de segurança.

Vale ressaltar também, o AWS WAF conta com conjuntos de regras pré-definidas de proteção, o que o torna uma ferramenta extremamente fácil e útil de usar. A regra básica é: Não saia de casa sem ele.

Área de configuração do WAF dentro do APIGateway AWS
Área de configuração do WAF dentro do APIGateway

 

Limitando a quantidade de chamadas: Throttling

Throttling é o processo de limitar o número de requisições que podem ser feitas a uma API em um determinado período de tempo. Isso é feito para proteger a API de sobrecarga de tráfego e garantir que ela possa continuar a funcionar de maneira estável.

A taxa de requisições é o número médio de requisições que podem ser feitas a uma API por segundo. Por exemplo, se a taxa de requisições for definida como 10 requisições por segundo, isso significa que, em média, só serão permitidas 10 requisições por segundo.

O algoritmo de token bucket é usado para implementar o throttling no API Gateway. Ele funciona criando um “bucket” de tokens, onde cada token representa uma requisição permitida. Quando uma requisição é feita, um token é removido do bucket. Se o bucket estiver vazio, as requisições adicionais serão bloqueadas até que tokens sejam adicionados de volta ao bucket. A taxa de requisições e a capacidade de burst são usadas para determinar a taxa na qual os tokens são adicionados ao bucket.

 

Security First: Transporte de dados

Além de proteger suas APIS de forma arquitetural e lógica, é importante implementar medidas de segurança para proteger os dados transmitidos através delas. Isso inclui o uso de protocolos de segurança, como HTTPS, para criptografar as informações transmitidas, e a validação dos dados de entrada para garantir que eles estão no formato correto e não contêm dados maliciosos.

O popular: OAuth

Uma dos principais requisitos de segurança é o OAuth (Open Authorization), que é um protocolo de autorização aberto que permite que os usuários compartilhem suas informações com outros aplicativos de forma segura. OAuth permite que os usuários concedam acesso a suas informações sem compartilhar suas credenciais, como nome de usuário e senha. Ele é amplamente utilizado para autorizar acesso a recursos de terceiros, como contas de mídia social e serviços de armazenamento em nuvem.

AWS diagrama OAuth 2.0
Diagrama OAuth 2.0

 

Mostre o seu que mostramos o nosso: MTLS

Outro protocolo de segurança importante é o MTLS (Mutual TLS), que é uma extensão do protocolo HTTPS que adiciona a autenticação de cliente a request, não somente a de servidor. Ele permite que os clientes se autentiquem uns aos outros usando certificados digitais, o que é útil em cenários onde é necessário garantir que as solicitações só venham de fontes confiáveis. O MTLS pode ser usado para proteger o tráfego entre o cliente e o AWS API Gateway, garantindo que as solicitações só venham de fontes confiáveis.

Modelo de comunicação MTLS AWS
Modelo de comunicação MTLS

 

Compacto mas eficiente: o JWT

Além das medidas anteriores, temos também o JWT (JSON Web Token), um protocolo de segurança que permite transmitir informações de forma segura através de redes não confiáveis. Ele é um formato compacto e auto-contido para representar informações de autenticação e autorização que pode ser assinado digitalmente ou criptografado. Ele é usado para transmitir informações de autenticação entre o cliente e o AWS API Gateway, garantindo que as solicitações só venham de fontes confiáveis.

A diferença entre um JWT assinado e um JWT criptografado é a forma como as informações são protegidas. Um JWT assinado usa uma assinatura digital para garantir que as informações contidas no JWT não foram alteradas durante a transmissão. Isso é feito usando um algoritmo de assinatura, como HMAC ou RSA, e uma chave secreta compartilhada entre o emissor e o receptor. A assinatura é adicionada ao JWT e pode ser verificada pelo receptor para garantir a integridade das informações.

Já um JWT criptografado, além de assinado, é encriptado para garantir a privacidade das informações contidas nele. Isso é feito usando algoritmos de criptografia, como AES ou RSA, e uma chave secreta compartilhada entre o emissor e o receptor. A criptografia garante que as informações contidas no JWT só podem ser lidas pelo receptor autorizado, pois é preciso uma chave para desencriptar as informações.

Estrutura padrão de um JWT.

 

Proteção em Camadas

Quando falamos de segurança de API’s existem inúmeros conceitos importantes de serem utilizados, alguns são mandatórios, outros são estratégias complementares que devem ser utilizadas caso a caso. O importante é sempre lembrar que a proteção de sua API é construída em camadas e, embora nunca vá existir um método definitivo, existem diversos modelos testados e validados pelo mercado.

Aqui vai um exemplo de diferentes componentes da AWS e os estágios em que eles podem ser utilizados:

Imagem que mostrar os diferentes estágio e componentes AWS que podem ajudar no serviço de segurança
Diferentes estágios e diferentes componentes que podem te ajudar.

Para resumir, a segurança é parte vital da do gerenciamento e exposição de suas API’s e, quando falamos em como protegê-las, existem diversas ferramentas e estratégias uteis de fácil utilização em conjunto com o API Gateway. Sempre busque balancear as medidas de forma que uma complemente a outra, avaliando primariamente os cenários de utilização e criticidade da API.

Quer saber mais sobre as soluções de AWS?
Leia também aqui no Blog GFT, o artigo: AWS Black Belt LATAM 2023.