Como proteger tu AWS Gateway API con API KEYS

aws-api-gateway-icon

Creaste un API con AWS Gateway API y la quieres proteger usando API Keys de AWS.

Cuando usar este metodo

  • La llave generada (API Key) no va a ser compartida a un grupo de personas para poder acceder tu endpoint, el distribuir manualmente la API Key representa un riesgo grande, si este es tu caso, asegúrate que puedas distribuir la API Key de manera segura (Por ejemplo: https://www.lastpass.com)
  • Tu endpoint no se va a comunicar con aplicaciones que se ejecutan en el navigador de usuarios. Las aplicaciones llamadas ‘client side applications’ no pueden proteger el valor de la API Key, exponiéndola a cualquier usuario que sepa usar la consola de los navegadores.
  • Comunicación entre micro servicios internos, este es el mejor escenario para este tipo de protección ya que no hay usuarios que compartan la API Key, tan solo servicios que pueden almacenar el valor de la API Key de manera segura.

Evitar este método cuando

  • Si tu API se comunica con aplicaciones que se ejecutan en el navegador de los usuarios (client side applications), este método no va a funcionar, el valor de la API Key será expuesto a todos los usuarios y no traería ningún nivel de seguridad. Para estos casos debes usar un sistema de autenticación que genere tokens temporales que le permita a tus usuarios acceder el endpoint. Mi favorito es AWS Cognito
  • Si necesitas tener un record de quien esta accediendo el endpoint, este método no te dará mucha información, ya que todos usarían las misma API Key.

Primero, crea una API Key

  1. Inicia sesión en tu consola de AWS y abre el servicio API Gateway. https://console.aws.amazon.com/apigateway/
  2. Del menú que se muestra para API Gateway, selecciona la opción de: API Keys
  3.  Haz click en el botón de acciones en la parte superior y elige: ‘Create API Key
  4. Llena la información necesaria
    • Name: El nombre de la API Key, se pueden usar mayúsculas, minúsculas, guiones y la rayita de abajo, no espacios
    • API Key:

                – Auto Generate: Aquí Amazon te da la opción de generar una Key por ti, si estas empezando un proyecto, esta es buena opción.

                – Custom: Si quieres proveer tu propia API Key, esta opción funciona si tu equipo ya esta usando una API Key y no quieres manejar multiples.

  5. Listo, click  ‘Save

Segundo, Tu API Key no protege nada hasta que hagas esto, Usage Plans

Para poder proteger tu API endpoints con una API Key, necesitas asignar por lo menos un ‘Usage Plan’ a tu Key.

Ventajas de los Usage Plans: 

  • Te ayudan a medir el uso del API
  • Puedes aplicar limites en la cantidad de solicitudes por segundo que cada Key puede hacer
  • Puedes tener diferentes limites por escenario de desarrollo, por ejemplo los limites para el equipo de pruebas son 1000 solicitudes por mes y el producción son 1.000.000

Para crear un Usage Plan

  1. Dentro de la consola para API Gateway, selecciona la opción ‘Usage Plans’ y click ‘Create’ en la parte superior
  2. Llena la información necesaria
    • Name: Se pueden usar mayúsculas, minúsculas, guiones y la underscore, no espacios
    • Description: Ya tu sabes
    • Selecciona Enable throttling y elige el Rate y el Burst 
      • Rate: limita la cantidad de solicitudes que puede hacer un usuario por segundo
      • Burst: sugerencia, usa el doble del rate pero realmente depende de la popularidad de tu endpointPara entender como funciona esto, imagínate que por cada solicitud aceptada con la API Key, AWS genera un token temporal, que se usa una sola vez y luego desaparece, este token es lo que permite el acceso al endpoint cuando se usa la Key

        AWS no genera los tokens al momento de recibir la solicitud, los genera con anterioridad y los tiene disponibles para las solicitudes futuras. Estos tokens están guardados en ‘Bursts’.

        Burst indicara cuantos contenedores con tokens pre fabricados quieres tener para este Usage Plan. Los Burst se ‘llenan de tokens’ cada segundo para garantizar el acceso bajo las limitaciones establecidas.

      • Quota: Aquí limitas la cantidad de solicitudes que puede aceptar este Usage Plan en un tiempo determinado
      • Click en Next
  3. Associated API Stages / Asociando la API Key con un Stage
    • Selecciona ‘Add API Stage’
    • Selecciona tu API
    • Selecciona el Stage a usar
    • Click en el check mark
    • Click en Next
  4. Usage Plan API Key / Aquí es donde todo termina y se pone a funcionar
    • Click en Add API Key to Usage Plan
    • Escribe el nombre de la API Key que generaste y click en la check mark
    • Puedes agregar mas Keys a este Plan.
    • Click en Done

Probando tu API Key con Postman

Para usar Postman tienes que configurar el Header de la solicitud.

En Headers X-API-KEY: ‘API_KEY_GENERADA’

Exitos y espero que te sea útil este articulo. Me puedes hacer preguntas a

@max_cabrera en twitter o en Instagram @max_developer

I am originally from Venezuela but I have been living in Austin, Texas for the last 8 years. Web development has been part of my life for more than a decade; It started in the middle of my College years and by the time I got my bachelors degree in Electronics Engineering I was already known for delivering complex projects while delivering a good user experience.