Hashicorp Vault & Apache APISIX: Stärken Sie Ihre API-Sicherheit
November 15, 2022
Heutzutage sind APIs (Application Programming Interfaces) die gängigste Methode, um verschiedene Software-Dienste zu verbinden. Zum Beispiel holen Sie sich das heutige Wetter über eine Wetter-API oder retweeten eine lustige Nachricht über die Twitter-API. Die Vernetzung von APIs macht das Internet bunt und vielfältig, zeigt aber auch die Schattenseiten – API-Bedrohungen.
Daten zeigen, dass APIs mittlerweile 90 % der Angriffsfläche von Webanwendungen ausmachen, was bedeutet, dass APIs heute eines der primären Angriffsvektoren sind. Wie können wir also die API-Risiken mindern?
In modernen Softwarearchitekturen entscheiden sich viele für das API-Gateway-Muster, um API-Angriffe abzuwehren. Ein API-Gateway ist der Einstiegspunkt für den Software-Dienst und bietet Funktionen wie Lastenausgleich, Dienstermittlung und API-Authentifizierung. Apache APISIX ist eines der besten API-Gateways, das Benutzern hilft, ihre API-Sicherheit durch Funktionen wie Authentifizierung, Autorisierung, ACL (Access Control List) und IP-Zugriffslisten zu stärken. Beispielsweise ist die JWT-Authentifizierung eine beliebte Methode, um APIs zu schützen. Dabei müssen API-Konsumenten ihre Identität über ein JSON Web Token nachweisen. In einem solchen Fall werden API-Anfragen ohne oder mit falschen Anmeldeinformationen von Apache APISIX abgelehnt.
Apache APISIX ist auch für die Signierung von JSON Web Tokens verantwortlich (was ein Geheimnis zur Anmeldung erfordert). Aus Sicht von Apache APISIX wird die Speicherung von Benutzergeheimnissen zu einer kritischen Frage, da die Authentifizierung nicht mehr funktioniert, wenn die Geheimnisse geleakt werden. Standardmäßig speichert Apache APISIX Geheimnisse in etcd, dem Konfigurationszentrum für Apache APISIX-Konfigurationen wie Routen und Upstreams.
Leider ist etcd nicht dafür ausgelegt, sensible Daten zu schützen. Sobald ein unmoralischer Mensch Zugriff auf den etcd-Cluster erhält, werden alle darin enthaltenen Daten offengelegt. Dies ist für ein APISIX-Routenobjekt kein großes Problem, aber für Geheimnisse oder die privaten Schlüssel von X509-Zertifikaten wäre es fatal. Um sensible Daten besser zu schützen, hat Apache APISIX seit Version 2.12.0 Hashicorp Vault integriert. Aber was ist Hashicorp Vault?
Was ist Hashicorp Vault?
Hashicorp Vault ist eine Speicherinfrastruktur zur sicheren Aufbewahrung von Benutzergeheimnissen (z. B. Datenbankanmeldeinformationen, Passwörter, API-Schlüssel). Es unterstützt die Integration vieler externer Systeme wie Amazon Key Management Service und Google Cloud Key Management. Technisch gesehen ist Hashicorp Vault ein verteiltes System mit dem Raft-Konsensprotokoll. Ihre Daten werden mit mehreren Backups gespeichert, und Sie müssen sich keine Sorgen über einen Single Point of Failure machen.
Aber was macht Hashicorp Vault besonders? Sobald Sie den Hashicorp Vault-Server starten, befindet er sich in einem versiegelten Zustand. Sie können auf keine Daten zugreifen, es sei denn, Sie entsiegeln diesen Server. Um einen Hashicorp Vault-Server zu entsiegeln, müssen Sie Schlüsselteile (die beim Initialisieren des Hashicorp Vault-Servers mit dem Shamir Secret Sharing-Algorithmus generiert werden) verwenden, um die Entsiegelungsoperationen wiederholt auszuführen. Die Anzahl der erforderlichen Schlüsselteile hängt von der Anzahl der Schlüsselteile ab ((X/2)+1, wenn die Anzahl der Schlüsselteile X ist). Darüber hinaus können Sie den Hashicorp Vault-Server zur Laufzeit erneut versiegeln, wenn Sie verdächtige Anzeichen dafür sehen, dass er angegriffen wird.
Wie verwendet Apache APISIX Hashicorp Vault?
Derzeit integriert Apache APISIX Hashicorp Vault in sein jwt-auth-Plugin. Das jwt-auth-Plugin wird zur JWT-Authentifizierung verwendet.
Die grundlegende Interaktionslogik zwischen Hashicorp Vault und Apache APISIX ist wie folgt:
- Eine API-Anfrage kommt herein
- Das JWT Auth-Plugin wird ausgeführt
- Apache APISIX versucht, das Geheimnis von Hashicorp Vault abzurufen
- Hashicorp Vault gibt das Geheimnis zurück, und Apache APISIX speichert es im Cache
- Apache APISIX verwendet das Geheimnis, um das JSON Web Token zu validieren
- Die Authentifizierung ist erfolgreich, und die API-Anfrage wird an den Backend-Dienst weitergeleitet
- Die API-Antwort wird zurückgesendet
Sie können das jwt-auth-Plugin in einem Apache APISIX-Consumer-Objekt mit der Vault-Option konfigurieren, um Apache APISIX anzuweisen, das Geheimnis in Hashicorp Vault zu speichern/abzurufen. Ein Apache APISIX-Consumer ist eine Abstraktion eines API-Konsumenten. API-Anmeldeinformationen können auf der Consumer-Ebene konfiguriert werden.
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": {}
}
}
}'
Die Hashicorp Vault-Konfigurationen können in der Apache APISIX config.yaml festgelegt werden.
vault:
host: 'http://0.0.0.0:8200'
timeout: 10
token: 's.KUWFVhIXgoRuQbbp3j1eMVGa'
prefix: 'kv/apisix'
Hier ist Vorsicht geboten, dass das Token Leseberechtigungen für den Pfad kv/apisix/consumer haben muss, da dies der Ort ist, an dem die Apache APISIX Admin API Geheimnisse speichert.
path "kv/apisix/consumer/*" {
capabilities = ["read"]
}
Wenn API-Anfragen von diesem Consumer eingehen, versucht Apache APISIX, das Geheimnis vom konfigurierten Hashicorp Vault-Server abzurufen (und speichert das Ergebnis im Speicher) und verwendet dieses Geheimnis, um das JSON Web Token zu validieren.
Zukunft der Integration zwischen Apache APISIX und Hashicorp Vault
Es gibt verschiedene Arten von sensiblen Daten in Apache APISIX, aber derzeit kann nur das JSON Web Token-Geheimnis in Hashicorp Vault gespeichert werden. In Zukunft könnten jedoch alle API-Anmeldeinformationen wie ein API-Schlüssel und ein Benutzerpasswort in Hashicorp Vault gespeichert werden. Darüber hinaus könnten auch der private Schlüssel des Zertifikats und die Admin-API-Schlüssel dort gespeichert werden. Alle diese Daten würden von den Konfigurationen getrennt werden. Auf diese Weise wird Ihre API-Sicherheit nicht nur durch die Verwendung der API-Authentifizierung gestärkt, sondern auch dadurch, dass die API-Anmeldeinformationen angemessen geschützt sind.