Hashicorp Vault & Apache APISIX : Renforcez la sécurité de vos API

Chao Zhang

Chao Zhang

November 15, 2022

Products

De nos jours, les API (Interfaces de Programmation d'Applications) sont devenues le moyen le plus courant de connecter différents services logiciels. Par exemple, vous pouvez obtenir la météo du jour via certaines API météo ou retweeter un message amusant via l'API de Twitter. L'interconnexion des API rend l'Internet riche et coloré tout en révélant également son côté sombre - les menaces liées aux API.

Les données montrent que les API représentent désormais 90 % de la surface d'attaque des applications web, ce qui signifie que les API sont aujourd'hui l'un des principaux vecteurs d'attaque. Alors, comment pouvons-nous atténuer les risques liés aux API ?

Les gens peuvent choisir le modèle de passerelle API dans les architectures logicielles modernes pour se protéger contre les attaques d'API. Une passerelle API est le point d'entrée du service logiciel, offrant des fonctionnalités telles que l'équilibrage de charge, la découverte de services et l'authentification des API. Apache APISIX est l'une des meilleures passerelles API, qui aide les utilisateurs à renforcer la sécurité de leurs API grâce à des fonctionnalités comme l'authentification, l'autorisation, les ACL (Listes de Contrôle d'Accès) et les listes de refus/autorisation d'IP. Par exemple, l'authentification JWT est une méthode populaire pour protéger les API. Elle demande aux consommateurs d'API de prouver leur identité via un JSON Web Token. Dans ce cas, les requêtes API sans les informations d'identification ou avec des informations incorrectes seront rejetées par Apache APISIX.

Apache APISIX est également responsable de la signature du JSON Web Token (qui nécessite un secret pour se connecter). Du point de vue d'Apache APISIX, le stockage des secrets des utilisateurs devient une question cruciale car l'authentification ne fonctionnera pas si les secrets sont divulgués. Par défaut, Apache APISIX enregistre les secrets dans etcd, le centre de configuration pour les configurations d'Apache APISIX comme les routes et les upstream.

Malheureusement, etcd n'est pas conçu pour protéger les données sensibles. Une fois qu'une personne immorale peut accéder au cluster etcd, toutes les données qu'il contient seront exposées. Ce n'est pas grave pour un objet de route APISIX, mais ce serait fatal pour les secrets ou les clés privées des certificats X509. Afin de mieux protéger les données sensibles, Apache APISIX a intégré Hashicorp Vault depuis la version 2.12.0. Alors, qu'est-ce que Hashicorp Vault ?

Qu'est-ce que Hashicorp Vault ?

Hashicorp Vault est une infrastructure de stockage pour sauvegarder en toute sécurité les secrets des utilisateurs (par exemple, les identifiants de base de données, les mots de passe, les clés API). Il prend en charge l'intégration de nombreux systèmes externes comme Amazon Key Management Service et Google Cloud Key Management. Techniquement, Hashicorp Vault est un système distribué avec le protocole de consensus Raft. Vos données seront sauvegardées avec plusieurs copies, et vous n'avez pas à vous soucier de la défaillance unique des données.

assets.png

Mais pourquoi Hashicorp Vault est-il spécial ? Une fois que vous démarrez le serveur Hashicorp Vault, il est dans un état scellé. Vous ne pouvez accéder à aucune donnée à moins de déverrouiller ce serveur. Pour déverrouiller un serveur Hashicorp Vault, vous devez utiliser des parts de clés (générées lorsque vous initialisez le serveur Hashicorp Vault avec l'algorithme de partage de secret de Shamir) pour exécuter les opérations de déverrouillage à plusieurs reprises. Le nombre de fois dépend du nombre de parts de clés ((X/2)+1 si le nombre de parts de clés est X). De plus, vous pouvez re-sceller le serveur Hashicorp Vault en cours d'exécution si vous remarquez des signes suspects qu'il subit une attaque.

Comment Apache APISIX utilise-t-il Hashicorp Vault ?

Actuellement, Apache APISIX intègre Hashicorp Vault dans son plugin jwt-auth. Le plugin jwt-auth est utilisé pour effectuer l'authentification JWT.

APISIX-Vault-Communication.png

La logique d'interaction de base entre Hashicorp Vault et Apache APISIX est la suivante :

  1. Une requête API arrive
  2. Le plugin JWT Auth s'exécute
  3. Apache APISIX essaie de récupérer le secret depuis Hashicorp Vault
  4. Hashicorp Vault renvoie le secret, et Apache APISIX le met en cache
  5. Apache APISIX utilise le secret pour valider le JSON Web Token
  6. L'authentification est réussie, et la requête API est transférée au service backend
  7. La réponse API est renvoyée

Vous pouvez configurer le plugin jwt-auth dans un objet consommateur Apache APISIX avec l'option vault pour indiquer à Apache APISIX de stocker/récupérer le secret dans/depuis Hashicorp Vault. Le consommateur Apache APISIX est une abstraction du consommateur d'API. Les informations d'identification de l'API peuvent être configurées au niveau du consommateur.

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": {}
    }
  }
}'

Les configurations de Hashicorp Vault peuvent être définies dans le fichier config.yaml d'Apache APISIX.

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

Il faut faire attention ici que le token doit avoir la permission de lecture pour le chemin kv/apisix/consumer, qui est l'endroit où l'API Admin d'Apache APISIX enregistre les secrets.

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

Lorsque des requêtes API de ce consommateur arrivent, Apache APISIX essaiera de récupérer le secret depuis le serveur Hashicorp Vault configuré (et mettra en cache le résultat en mémoire) et utilisera ce secret pour valider le JSON Web Token.

Avenir des intégrations entre Apache APISIX et Hashicorp Vault

Il existe plusieurs types de données sensibles dans Apache APISIX, mais seul le secret du JSON Web Token peut être sauvegardé dans Hashicorp Vault pour le moment. Cependant, à l'avenir, toutes les informations d'identification d'API, comme une clé API et un mot de passe utilisateur, pourront être sauvegardées dans Hashicorp Vault. De plus, la clé privée du certificat et les clés de l'API Admin pourront également y être sauvegardées. Toutes ces données seront séparées des configurations. De cette manière, la sécurité de votre API est renforcée non seulement parce que vous utilisez l'authentification d'API, mais aussi parce que les informations d'identification de l'API sont correctement protégées.

Tags: