Hashicorp Vault y Apache APISIX: Fortalece la Seguridad de tu API

Chao Zhang

Chao Zhang

November 15, 2022

Products

Hoy en día, las API (Interfaces de Programación de Aplicaciones) se han convertido en la forma más común de conectar diferentes servicios de software. Por ejemplo, puedes obtener el clima de hoy a través de algunas API de clima o retuitear un mensaje divertido a través de la API de Twitter. La interconexión de API hace que Internet sea rico y colorido, pero también muestra su lado oscuro: las amenazas a las API.

Los datos muestran que las API ahora representan el 90% de la superficie de ataque de las aplicaciones web, lo que significa que las API son uno de los principales vectores de ataque. Entonces, ¿cómo podemos mitigar los riesgos de las API?

Las personas pueden elegir el patrón de API Gateway en las arquitecturas de software modernas para defenderse de los ataques a las API. Un API Gateway es el punto de entrada del servicio de software, proporcionando funcionalidades como balanceo de carga, descubrimiento de servicios y autenticación de API. Apache APISIX es uno de los mejores API Gateway, que ayuda a los usuarios a fortalecer la seguridad de sus API a través de funciones como autenticación, autorización, ACL (Lista de Control de Acceso) y listas de denegación/permitir IP. Por ejemplo, la autenticación JWT es una forma popular de proteger las API. Requiere que los consumidores de API demuestren quiénes son a través de un JSON Web Token. En tal caso, las solicitudes de API sin credenciales o con credenciales incorrectas serán rechazadas por Apache APISIX.

Apache APISIX también se encarga de la firma del JSON Web Token (que necesita un secreto para firmar). Desde el punto de vista de Apache APISIX, almacenar los secretos de los usuarios se convierte en una cuestión crítica, ya que la autenticación dejará de funcionar si los secretos se filtran. Por defecto, Apache APISIX guarda los secretos en etcd, el centro de configuración para configuraciones de Apache APISIX como rutas y upstream.

Desafortunadamente, etcd no está diseñado para proteger datos sensibles. Una vez que una persona inmoral puede acceder al clúster de etcd, todos los datos dentro de él quedarán expuestos. No es un gran problema para un objeto de ruta de APISIX, pero sería fatal para los secretos o las claves privadas de los certificados X509. Para proteger mejor los datos sensibles, Apache APISIX integró Hashicorp Vault desde la versión 2.12.0. Entonces, ¿qué es Hashicorp Vault?

¿Qué es Hashicorp Vault?

Hashicorp Vault es una infraestructura de almacenamiento para guardar de manera segura los secretos de los usuarios (por ejemplo, credenciales de bases de datos, contraseñas, claves de API). Admite la integración con muchos sistemas externos como Amazon Key Management Service y Google Cloud Key Management. Técnicamente, Hashicorp Vault es un sistema distribuido con el protocolo de consenso Raft. Tus datos se guardarán con múltiples copias de seguridad, y no tendrás que preocuparte por un punto único de fallo en los datos.

assets.png

Pero, ¿qué hace especial a Hashicorp Vault? Una vez que inicias el servidor de Hashicorp Vault, este se encuentra en un estado sellado. No puedes acceder a ningún dato a menos que deselles este servidor. Para desellar un servidor de Hashicorp Vault, necesitas usar acciones clave (generadas cuando inicializas el servidor de Hashicorp Vault con el algoritmo Shamir Secret Sharing) para ejecutar las operaciones de desellado repetidamente. El número de veces depende del número de acciones clave ((X/2)+1 si el número de acciones clave es X). Además, puedes volver a sellar el servidor de Hashicorp Vault en tiempo de ejecución si ves algún signo sospechoso de que está siendo atacado.

¿Cómo usa Apache APISIX Hashicorp Vault?

Actualmente, Apache APISIX integra Hashicorp Vault en su plugin jwt-auth. El plugin jwt-auth se utiliza para realizar la autenticación JWT.

APISIX-Vault-Communication.png

La lógica básica de interacción entre Hashicorp Vault y Apache APISIX es:

  1. Llega una solicitud de API
  2. Se ejecuta el plugin JWT Auth
  3. Apache APISIX intenta obtener el secreto de Hashicorp Vault
  4. Hashicorp Vault devuelve el secreto, y Apache APISIX lo almacena en caché
  5. Apache APISIX usa el secreto para validar el JSON Web Token
  6. La autenticación es exitosa, y la solicitud de API se reenvía al servicio backend
  7. Se envía la respuesta de la API

Puedes configurar el plugin jwt-auth en un objeto de consumidor de Apache APISIX con la opción vault para indicarle a Apache APISIX que almacene/obtenga el secreto de/en Hashicorp Vault. El consumidor de Apache APISIX es una abstracción del consumidor de API. Las credenciales de API se pueden configurar a nivel de consumidor.

curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
  "username": "jack",
  "plugins": {
    "jwt-auth": {
      "key": "your-api-key",
      "vault": {}
    }
  }
}'

Las configuraciones de Hashicorp Vault se pueden establecer en el archivo config.yaml de Apache APISIX.

vault:
  host: 'http://0.0.0.0:8200'
  timeout: 10
  token: 's.KUWFVhIXgoRuQbbp3j1eMVGa'
  prefix: 'kv/apisix'

Debe tenerse cuidado aquí de que el token debe tener permiso de lectura para la ruta kv/apisix/consumer, que es donde la API de administración de Apache APISIX guarda los secretos.

path "kv/apisix/consumer/*" {
    capabilities = ["read"]
}

Cuando llegan solicitudes de API de ese consumidor, Apache APISIX intentará obtener el secreto del servidor de Hashicorp Vault configurado (y almacenará el resultado en la memoria) y usará este secreto para validar el JSON Web Token.

Futuro de las integraciones entre Apache APISIX y Hashicorp Vault

Hay varios tipos de datos sensibles en Apache APISIX, pero actualmente solo el secreto del JSON Web Token puede guardarse en Hashicorp Vault. Sin embargo, en el futuro, todas las credenciales de API, como una clave de API y una contraseña de usuario, podrán guardarse en Hashicorp Vault. Además, la clave privada del certificado y las claves de la API de administración también podrán guardarse allí. Todos estos datos estarán separados de las configuraciones. De esta manera, la seguridad de tu API se fortalece no solo porque usas autenticación de API, sino también porque las credenciales de API están protegidas adecuadamente.

Tags: