Implementando API Keys en tu API de producción en AWS

Implementando API Keys en tu API de producción en AWS

En la era digital actual, las APIs (Interfaces de Programación de Aplicaciones) se han convertido en la columna vertebral de muchos servicios tecnológicos, permitiendo la comunicación y la integración eficiente entre diversas aplicaciones y plataformas. Al abrir el acceso a nuestras APIs, es imperativo implementar medidas de seguridad adecuadas para proteger los recursos y los datos valiosos. Una herramienta fundamental para esta protección son las API Keys.

¿Qué son las API Keys?

Las API Keys son códigos únicos que se utilizan para autenticar a los usuarios y rastrear sus interacciones con una API. Cada clave API es única para un usuario o aplicación, lo que permite a los propietarios de la API controlar el acceso y recopilar datos de uso para analíticas y control de cuotas.

Creando una función Lambda como backend de nuestra API

Dentro de AWS es muy común utilizar Lambda como backend de nuestras APIs. En este artículo, crearemos una función Lambda simple que devolverá un mensaje de bienvenida cuando se invoque. Para ello, sigue estos pasos:

  1. Accede al panel de control de AWS y selecciona el servicio Lambda.
  2. Una vez dentro de Lambda, presiona el botón de Create function en la parte superior derecha.
  3. En la siguiente pantalla, selecciona la opción de Author from scratch. Coloca un nombre para tu función y selecciona el lenguaje de programación que deseas utilizar. En este caso, utilizaremos Node.js 16.x.
  4. Las demás opciones pueden dejarse en su valor predeterminado. Una vez que hayas terminado, presiona el botón de Create function.
    Creación de la función Lambda

  5. El código por defecto de la función Lambda se verá así:
1
2
3
4
5
6
7
8
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
  1. El código por defecto funciona perfectamente para nuestro propósito, así que no necesitamos realizar ningún cambio. Sin embargo, si deseas probar tu función, puedes hacerlo presionando el botón de Test en la parte superior derecha. Esto ejecutará la función y mostrará el resultado en la sección de Execution results. Recuerda que puedes colocar en esta función el código que desees, siempre y cuando devuelva una respuesta con el formato correcto.

Creando una API en API Gateway

Para poder utilizar nuestra función desde una url y hacer peticiones, necesitamos crear una API en API Gateway. Para ello, sigue estos pasos:

  1. Accede al panel de control de AWS y selecciona el servicio API Gateway.
  2. Una vez dentro de API Gateway, presiona el botón de Create API en la parte superior derecha.
  3. En la siguiente pantalla, busca la opción de REST API y selecciona la opción de Build. Coloca un nombre para tu API y selecciona el protocolo que deseas utilizar. En este caso, utilizaremos REST.
    Creación de la API en API Gateway

  4. Una vez que hayas terminado, presiona el botón de Create API.
  5. En la siguiente pantalla, dentro del apartado de Resources, selecciona la opción de Actions y luego selecciona la opción de Create Method.
    Creación del método GET en la API

  6. Dentro del desplegable que se habilita, selecciona la opción de GET y presiona el botón de . En el panel de la derecha, selecciona la opción de Lambda Function y luego selecciona la región donde se encuentra tu función Lambda. Por último, coloca el nombre de tu función Lambda y presiona el botón de Save.
    Configuración del método GET en la API

  7. Desde esta misma pantalla, presiona el botón de Actions que habías presionado previamente y luego selecciona la opción de Deploy API.
    Despliegue de la API

  8. En el desplegable que se habilita, selecciona la opción de [New Stage] y coloca un nombre para tu etapa. En este caso, utilizaremos prod. Una vez que hayas terminado, presiona el botón de Deploy.
    Configuración de la etapa de despliegue

  9. Una vez que hayas terminado, se te redirigirá a la pantalla de Stages. En esta pantalla, selecciona la etapa que acabas de crear y copia el Invoke URL que se muestra en la parte superior. Esta será la URL que utilizaremos para hacer peticiones a nuestra API.
    URL de la API

  10. Este URL funciona a la perfección y podemos utilizarlo para probar nuestra API desde Postman por ejemplo, por si queremos asegurarla con API KEYS, debemos seguir los siguientes pasos. La API que obtuviste debe ser similar a esta: https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/prod

Creando una API KEY en API Gateway

Para poder utilizar una API KEY en nuestra API, hay dos pasos importantes que debemos seguir, el primero es la creación de la API KEY y el segundo es la creación de un plan de uso para evitar que nuestra API sea utilizada de forma abusiva. Para ello, sigue estos pasos:

  1. Desde la página en la que nos encontramos (API Gateway), selecciona la opción de API Keys en el menú de la izquierda.
  2. En la pantalla que se muestra, seleccionamos el menú de Actions y luego seleccionamos la opción de Create API Key.
    Creación de la API KEY

  3. En la siguiente pantalla, asignamos un nombre a nuestra API Key, selecciona la opción de Auto Generate, agregamos una descripción opcional y luego selecciona la opción de Save.
    Configuración de la API KEY

  4. Una vez creada la API KEY, debemos crear un plan de uso para nuestra API. Para ello, selecciona la opción de Usage Plans en el menú de la izquierda.
  5. En la pantalla que se muestra, seleccionamos la opción de Create. Esto mostrará un nuevo panel a la derecha donde debemos colocar un nombre para nuestro plan de uso, una descripción opcional y luego se presentan las opciones de Throttle y Quota. Estas opciones nos permiten limitar el uso de nuestra API para evitar que sea utilizada de forma abusiva. En Rate colocamos la cantidad de peticiones que se pueden hacer por segundo y en Burst colocamos la cantidad de peticiones que se pueden hacer en un periodo de tiempo. En Quota colocamos la cantidad de peticiones que se pueden hacer en un periodo de tiempo que podemos definir, en este caso es al mes. Una vez que hayamos terminado, presionamos el botón de Next.
    Configuración del plan de uso
  6. En la nueva pantalla que se muestra, seleccionamos la opción de Add API Stage. En el desplegable que se habilita, seleccionamos la API que creamos previamente y luego seleccionamos la etapa que creamos previamente. En este caso, la API es DemoAPI y la etapa es prod. Presiona el botón de para que se guarden los cambios y por último presiona el botón de Next.
    Configuración del API Stage

  7. En la nueva sección, presionamos el botón de ADD API Key to Usage Plan y en el desplegable escribimos el nombre de nuestra API Key, en este caso es MyBlogKey. Presionamos el botón de para que se guarden los cambios y por último presionamos el botón de Done.
    Configuración de las API Keys

  8. Listo! El último paso es dirigirnos hacia Resources donde creamos nuestro enpoint y presionamos la opción de GET (si creaste más de un método, selecciona el método que desees proteger). En el panel de la derecha se mostrará un diagrama con 4 cuadros y presionamos el de Method Request.
    Configuración del método a proteger

  9. En la nueva pantalla, seleccionamos la opción de API Key Required, presionamos el lápiz que se encuentra a su izquierda y cambiamos false por true. Presionamos el botón de para que se guarden los cambios y por último presionamos el botón de Actions y luego seleccionamos la opción de Deploy API. En este caso no creamos una nueva etapa, sino que utilizamos la que creamos previamente. Presionamos el botón de Deploy y listo! Nuestra API está protegida con una API KEY.
    Configuración de la API KEY

Probando nuestra API

Como te podrás imaginar, si realizamos una petición como lo hicimos antes, obtendremos un error 403. Esto se debe a que nuestra API está protegida con una API KEY y debemos enviarla en el header de nuestra petición.

Error 403

Para ello, sigue estos pasos:

  1. Para buscar el API key, debemos dirigirnos al menú de API Keys en la izquierda de la pantalla. Cuando ingresemos a esta nueva sección, presionamos la API Key que deseamos ver y en el panel de la derecha veremos que hay una opción llamada Show. Presionamos esta opción y copiamos el API Key que se muestra.
  2. Esta API Key debemos incluirla en el header de nuestra petición get como se muestra en la siguiente imagen. En este caso, el nombre del header es x-api-key y el valor es la API Key que copiamos previamente.
    Petición GET con API KEY

  3. Listo! Si realizamos la petición, obtendremos el mensaje de bienvenida que definimos en nuestra función Lambda.
    Petición GET con API KEY

Conclusión

Ahora que hemos recorrido juntos el camino de la implementación de API Keys en AWS API Gateway, estás listo para abordar uno de los desafíos más emocionantes del mundo tecnológico: monetizar tu API.

Imagina que has creado una fantástica API para análisis de datos de redes sociales. Gracias a tu trabajo duro, ahora es posible analizar patrones de publicación, tendencias emergentes, y realizar un seguimiento de la influencia social de un usuario. Las posibilidades son increíbles, y muchas empresas estarían dispuestas a pagar por tener acceso a esta API.

Las API Keys son el boleto de entrada que necesitas para transformar tu valiosa API en una fuente de ingresos. Al proporcionar a tus clientes sus propias API Keys, puedes controlar quién tiene acceso a tu API y a qué nivel. Además, la capacidad de rastrear el uso de la API por cada cliente a través de su API Key, te permite implementar modelos de facturación basados en el uso, abriendo la puerta a una monetización eficaz de tu API.

Pero no olvides que, aunque las API Keys proporcionan un control valioso sobre el acceso a tu API, son solo una parte de un enfoque de seguridad más amplio. La seguridad nunca debe ser algo que se añade como un después. Asegúrate de que estás utilizando la autenticación y la autorización apropiadas, y considera prácticas adicionales para fortalecer la seguridad de tus API Keys.

En resumen, las API Keys y AWS API Gateway son herramientas poderosas para desbloquear el potencial de tus APIs. Ya sea que estés buscando monetizar tu API, controlar el acceso, o simplemente mantener tus servicios funcionando sin problemas, esperamos que este recorrido te haya preparado para manejarlo como un profesional.

¡Feliz codificación y hasta la próxima aventura en el emocionante mundo de las APIs!

Implementando API Keys en tu API de producción en AWS

http://luislizama.com/2023/06/23/Implementando-API-Keys-en-tu-API-de-produccion/

Author

Luis Lizama

Posted on

2023-06-23

Updated on

2023-07-21

Licensed under