# Agregando Seguridad a nuestras API’s con Kong

En la primera [parte](https://hashnode.com/post/clsbxoxur000508gq2zp3hraw), aprendimos a generar nuestra propia API con Python, Flask contra MySQL. Llego el momento, de darles seguridad. Para ello utilizaremos **Kong**, un **API Gateway Open Source**. Estos nos proporcionan seguridad y control sobre el acceso al sentarse frente a cualquier número de servicios **API**.

KONG, Tyk, API Umbrella, Ambassador, Gravitee.io, etc., son algunas de los **API Gateway** actualmente disponibles, en el mercado. Nos proporcionaran servicios como autenticación, autorizacion, api keys, análisis, registro, transformación, etc., a nuestros Endpoints.

Pasaremos de una arquitectura, simple y desprotegida, a otra con un Manager, dándonos la posibilidad de escalar en nuestro Backend de una manera flexible.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/Merediths-80th.png align="center")

## Instalación de Kong

Vamos a comenzar con la instalación de Kong. En esta prueba de concepto, mi arquitectura es la siguiente:

<table><tbody><tr><td colspan="1" rowspan="1"><p>Servidor KONG</p></td><td colspan="1" rowspan="1"><p>Servidor API</p></td></tr><tr><td colspan="1" rowspan="1"><p>192.168.0.139</p></td><td colspan="1" rowspan="1"><p>192.168.0.138</p></td></tr><tr><td colspan="1" rowspan="1"><p><em>kong.ironbox.local</em></p></td><td colspan="1" rowspan="1"><p>api.ironbox.local</p></td></tr></tbody></table>

Podríamos tener la cantidad que deseáramos de servicios API. Ahí estaría Kong, para gestionar esos **Endpoints**.

Para instalar Kong descargamos el [paquete](https://konghq.com/) e instalamos Postgresql. Crearemos el usuario, para que Kong se conecte a la Base de Datos y lo ejecutaremos.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-3-1024x805.png align="center")

## Creación de Servicios y Reglas

Una vez que tenemos el API Manager, en linea, vamos a poder crear los Servicios y las Rutas, para el manejo de los Match’s.

El manejo de Kong, se realiza por API, así que agregamos mediante POST el servicio **API\_Usuarios** y una regla que maneje el verbo GET.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-1-1.png align="center")

Servicios y Rutas Listo! Ya tenemos el Servicio Publicado. ¿Vamos a probarlo?

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-14_48_19-santiago@kong_--1024x434.png align="center")

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-14_34_39-Postman.png align="center")

Consulta, mediante Postman ¡Perfecto! ¡Consultamos a la dirección, publica, con el Path /user y recibimos el **JSON** que esperábamos!

## Instalación de Dashboard

Vamos a instalar un Dashboard, hay miles, para hacernos la vida mas fácil.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-7.png align="center")

¡Listo! ¡Tenemos una interfaz GUI para la gestión! Ahora podemos agregar, de una manera mas sencilla, Plugins, Usuarios, etc. En ella deberían de figurar los servicios y rutas que agregamos con cURL.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-15_07_26-Kong-Dashboard-1024x402.png align="center")

Vamos a crear una **key\_auth**, por motivos didácticos vamos a realizarlo por linea de comando y revisar como impacta en el Dashboard.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-3-1.png align="center")

Creacion de key-auth Acá vemos que para poder consultar el Servicio API\_Usuario sera necesario una llave.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-15_23_00-Kong-Dashboard-1024x310.png align="center")

Vamos a ver que nos responde, postman, al querer consultar nuestra API pero sin nuestra llave.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-16_20_57-Postman.png align="center")

Como se puede observar, ya no podremos realizar la consulta sin nuestra llave de autorización. Por eso vamos a averiguarla para asi agregarla en la consulta.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-5-1024x283.png align="center")

Nuestra key-auth es: **apikey: 6xEJHFA7kONRagDMwaWdtQ2kjlPk2qZA**

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-6-1-1024x499.png align="center")

¡Excelente! Ahora si podemos consultar nuestra API, pero con seguridad. Realizamos la misma acción, vía postman.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-09-16_39_22-Postman.png align="center")

¡Perfecto! Funciona, todo. Mientras tanto, en nuestro servidor Flask, vemos el registro de las consultas.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/VirtualBox_Ubuntu-API-Server_09_03_2019_16_44_09.png align="center")

¡Hay muchos plugins para agregar y jugar! Espero les sirva. Algo tan importante, como esto, debe estar controlado y monitoreado, siempre.

Saludos!
