Apache APISIX Autorisierungsrichtlinie: Schützen Sie Ihre APIs
April 21, 2023
Einführung
Heutzutage sind APIs zur Brücke geworden, die verschiedene Systeme und Anwendungen in Bezug auf Daten und Funktionalität verbinden. Während wir den Komfort von APIs genießen, ist die Gewährleistung der Datensicherheit und die Vermeidung von Datenlecks und anderen Sicherheitsproblemen zu einer Hauptsorge der Nutzer geworden. An diesem Punkt spielt die Zugriffskontrolle eine entscheidende Rolle. Durch die Formulierung geeigneter Zugriffskontrollrichtlinien für APIs können Sie nicht nur Ihre APIs vor enormen Cyberangriffen schützen und die Datensicherheit gewährleisten, sondern auch Unternehmen dabei helfen, Compliance-Anforderungen zu erfüllen und das Kundenvertrauen zu stärken.
Apache APISIX ist ein dynamisches, Echtzeit-, Hochleistungs-Cloud-Native-API-Gateway, das eine Vielzahl von Traffic-Management-Funktionen wie Lastenausgleich, dynamisches Upstream, Canary-Release, Service-Unterbrechung, Authentifizierung und Beobachtbarkeit bietet. In diesem Artikel werden wir die Zugriffskontrollrichtlinien von Apache APISIX vorstellen und diskutieren, welche gängigen Strategien verwendet werden können, um Ihre API-Sicherheit zu schützen und den stabilen Betrieb Ihres Systems zu gewährleisten.
Was ist eine Zugriffskontrollrichtlinie?
Zugriffskontrollrichtlinien sind Sicherheitsmechanismen, die entwickelt wurden, um sensible Daten oder Ressourcen in Computersystemen, Netzwerken oder Anwendungen zu schützen und sicherzustellen, dass nur autorisierte Benutzer oder Anwendungen darauf zugreifen können. Dies hilft, das Risiko von Datenlecks und Sicherheitslücken zu verringern. In einem API-Gateway sind Zugriffskontrollrichtlinien eine wesentliche Komponente. Als Einstiegspunkt für den gesamten Verkehr ist das API-Gateway dafür verantwortlich, alle API-Anfragen zu empfangen und weiterzuleiten. Daher bestimmen die Zugriffskontrollrichtlinien des API-Gateways direkt die Sicherheit und Stabilität der Upstream-Dienste.
Gängige Zugriffskontrollrichtlinien in Apache APISIX
Apache APISIX bietet eine Vielzahl von Zugriffskontrollrichtlinien, unterstützt das OAuth 2.0-Authentifizierungsprotokoll und integriert verschiedene externe Authentifizierungsdienste wie Keycloak, Ory Hydra, Okta, Auth0 und mehr. Neben der Unterstützung externer Authentifizierungsdienste bietet APISIX auch leistungsstarke interne Authentifizierungsmethoden. In Kombination mit dem Consumer-Objekt von APISIX können Sie Authentifizierung, Autorisierung, Ratenbegrenzung, IP-Blacklisting und Whitelisting-Plugins frei kombinieren, um Ihre APIs zu schützen und effektiv zu verhindern, dass bösartige Anfragen Ihre API-Dienste beschädigen.
1. IP-basierte Zugriffskontrolle
Die IP-basierte Zugriffskontrolle ist die einfachste und direkteste Methode, die den Zugriff auf Ihre API nur auf Anfragen von bestimmten Adressen beschränken kann.
Sie können das ip-restriction-Plugin von APISIX verwenden, um diese Funktion zu aktivieren. Es bietet verschiedene Konfigurationsoptionen, wie z.B. erlaubte oder verweigerte IP-Adresslisten, IP-Adressbereiche und Fehlermeldungen, die zurückgegeben werden, wenn Anfragen abgelehnt werden. Sie können diese Optionen nach Bedarf konfigurieren, um eine feinere Zugriffskontrolle zu erreichen. Es ist erwähnenswert, dass die IP-basierte Zugriffskontrolle einige Einschränkungen haben kann, da IP-Adressen gefälscht oder gemeinsam genutzt werden können. Daher ist es am besten, das ip-restriction-Plugin in Kombination mit anderen Zugriffskontroll-Plugins zu verwenden, um die Sicherheit und Flexibilität Ihres Systems zu verbessern.
2. API-Schlüssel-basierte Zugriffskontrolle
Diese Zugriffskontrolle ist eine sehr gängige API-Zugriffskontrollstrategie. Ihr Grundprinzip besteht darin, Anfragen durch einen vorab generierten API-Schlüssel zu authentifizieren und zu autorisieren, wodurch schnell Authentifizierungsmechanismen für APIs hinzugefügt werden können. Es ist jedoch wichtig, den API-Schlüssel zu schützen, um zu verhindern, dass er geleakt wird und bösartigen Angriffen ausgesetzt ist.
Das key-auth-Plugin von APISIX kann leicht Authentifizierungsmechanismen zu Ihren APIs hinzufügen, indem der Schlüssel zur Abfragezeichenfolge oder zum Header hinzugefügt wird, um die Authentifizierung bei der Anfrage zu ermöglichen. In APISIX Version 3.1 und später unterstützt es auch die Verschlüsselung und Speicherung von API-Schlüsseln in etcd unter Verwendung der encrypted storage fields-Konfiguration data_encryption
, was die Sicherheit Ihrer API weiter erhöht.
3. Token-basierte Zugriffskontrolle
Diese Methode wird durch das Hinzufügen eines Authentifizierungsfeldes, das ein Token enthält, im Anfrageheader implementiert. Ein Token ist ein Schlüssel, normalerweise eine Zeichenkette oder Zahl, der verwendet wird, um zu überprüfen, ob der Absender einer API-Anfrage die Berechtigung hat, auf die API zuzugreifen. Typischerweise enthält ein Token die Identität und Berechtigungen des Benutzers, sodass der Server feststellen kann, ob der Benutzer Zugriffsberechtigungen hat, wenn er eine API-Anfrage stellt, und entsprechende Autorisierungs- oder Ablehnungsentscheidungen treffen kann.
APISIX bietet das jwt-auth-Plugin, um diese Zugriffskontrollstrategie zu verwenden, und unterstützt Konfigurationsoptionen wie den Speicherort des Tokens, die Gültigkeitsdauer des Tokens, den JWT-Signaturalgorithmus und Schlüssel. Sie können diese Optionen nach Bedarf konfigurieren, um verschiedene Authentifizierungsanforderungen zu erfüllen.
4. Anfragepfad-basierte Zugriffskontrolle
Die anfragepfad-basierte Zugriffskontrolle wird durch das Filtern und Abgleichen von Anfragepfaden erreicht, um den Zugriff auf bestimmte APIs, Dienste oder Ressourcen zu kontrollieren. Diese Strategie wird häufig in Szenarien verwendet, die eine fein abgestimmte Zugriffskontrolle über Ressourcen erfordern, wie z.B. der Schutz sensibler Daten oder die Kontrolle des Zugriffs bestimmter Benutzer auf bestimmte Ressourcen innerhalb des Systems.
Das uri-blocker-Plugin von APISIX unterstützt die Konfiguration von Regex-Regellisten, um Benutzeranfrage-URIs abzufangen, und die Konfiguration von rejected_code
und rejected_msg
, um den HTTP-Statuscode und den Antwortkörper anzugeben, die nach erfolgreichem Abfangen zurückgegeben werden. Dies ermöglicht es Administratoren, die Benutzerberechtigungen fein zu steuern und die API-Sicherheit und -Kontrollierbarkeit zu verbessern.
5. ACL-basierte Zugriffskontrollrichtlinie
ACL (Access Control List) ist eine listenbasierte Zugriffskontrollrichtlinie, die verwendet wird, um die Zugriffsberechtigungen von Benutzern oder Benutzergruppen auf Ressourcen zu kontrollieren. Ihr Grundprinzip besteht darin, für jede Ressource eine ACL-Liste zu definieren, die die Benutzer oder Benutzergruppen auflistet, die auf die Ressource zugreifen dürfen. Wenn ein Benutzer den Zugriff auf die Ressource anfordert, wird sein Zugriff basierend auf der entsprechenden ACL-Liste bestimmt.
In APISIX können wir das consumer-restriction-Plugin verwenden, um diese Funktion zu aktivieren. Administratoren können leicht kontrollieren, welche Benutzer oder Benutzergruppen auf bestimmte Ressourcen zugreifen können und verhindern, dass nicht autorisierte Benutzer Anfragen an sensible Bereiche senden, um sensible Datenlecks zu vermeiden.
Szenario-Einführung: Feinere Zugriffskontrolle
In realen Anwendungsszenarien implementieren wir oft eine feinere Zugriffskontrolle für Ressourcen, die sensible Daten enthalten. Zum Beispiel haben wir jetzt zwei Benutzer, A und B, die dieselben internen Authentifizierungsmethoden verwenden, wie z.B. key-auth oder basic-auth. Wir möchten auch eine feinere Zugriffskontrolle auf Benutzer B anwenden, um zu verhindern, dass er auf bestimmte APIs zugreift.
Wir können das consumer-restriction
-Plugin von APISIX für eine feinere Kontrolle verwenden. Dieses Plugin ermöglicht es Ihnen, Zugriffsbeschränkungen basierend auf Route, Service oder Consumer festzulegen, und es unterstützt die Konfiguration von vier type
-Attributwerten:
consumer_name
: Beschränken Sie den Zugriff des Consumers auf Route oder Service, indem Sie denusername
des Consumers in einer Whitelist oder Blacklist auflisten.consumer_group_id
: Beschränken Sie den Zugriff des Consumers auf Route oder Service, indem Sie dieid
der Consumer-Gruppe in einer Whitelist oder Blacklist auflisten.service_id
: Beschränken Sie den Zugriff des Consumers auf den Service, indem Sie dieid
des Service in einer Whitelist oder Blacklist auflisten. Dies muss in Verbindung mit einem Autorisierungs-Plugin verwendet werden.route_id
: Beschränken Sie den Zugriff des Consumers auf die Route, indem Sie dieid
der Route in einer Whitelist oder Blacklist auflisten.
In diesem Szenario können wir zwei Konfigurationsmethoden verwenden, um zu verhindern, dass Benutzer B auf eine bestimmte API-Ressource zugreift.
Einrichten der Zugriffskontrollrichtlinie in der Route
- Zuerst müssen wir zwei Consumer-Objekte auf APISIX erstellen und das
basic-auth
-Plugin aktivieren, mit den Namen userA und userB.
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d '
{
"username": "userA",
"plugins": {
"basic-auth": {
"username":"userA",
"password": "123456"
}
}
}'
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d '
{
"username": "userB",
"plugins": {
"basic-auth": {
"username":"userB",
"password": "123456"
}
}
}'
- Dann aktivieren und konfigurieren wir die
whitelist
-Eigenschaft vonconsumer-restriction
auf der Route, auf die wir die Beschränkung anwenden möchten, und fügen denusername
des zuvor erstellten Consumers userA hinzu. Auf diese Weise akzeptiert die Route nur Anfragen von userA.
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -d '
{
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
},
"plugins": {
"basic-auth": {},
"consumer-restriction": {
"whitelist": [
"userA"
]
}
}
}'
- Senden Sie Zugriffsanfragen separat mit userA und userB.
curl -u userA:123456 http://127.0.0.1:9080/get -i
HTTP/1.1 200 OK
curl -u userB:123456 http://127.0.0.1:9080/get -i
HTTP/1.1 403 Forbidden
...
{"message":"The consumer_name is forbidden."}
Das Ergebnis zeigt, dass userB vom Zugriff auf die API-Ressource beschränkt wurde.
Einrichten von Berechtigungskontrollrichtlinien im Consumer
- Zuerst richten wir eine Route ein, deren ID
forbidden-userB
lautet, und aktivieren dasbasic-auth
-Plugin.
curl http://127.0.0.1:9180/apisix/admin/routes -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -d '
{
"id": "forbidden-userB",
"uri": "/get",
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
},
"plugins": {
"basic-auth": {}
}
}'
- Erstellen Sie zwei Consumer-Objekte und aktivieren Sie das
basic-auth
-Plugin. Beachten Sie, dass wir dasconsumer-restriction
-Plugin konfigurieren müssen, um die Berechtigungskontrollrichtlinien für userB zu verfeinern.
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d '
{
"username": "userA",
"plugins": {
"basic-auth": {
"username":"userA",
"password": "123456"
}
}
}'
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: {YOUR_API_KEY}' -X PUT -i -d '
{
"username": "userB",
"plugins": {
"basic-auth": {
"username":"userB",
"password": "123456"
},
"consumer-restriction": {
"type": "route_id",
"blacklist": [
"forbidden-userB"
],
"rejected_code": 403
}
}
}'
- Senden Sie Anfragen separat mit userA und userB.
curl -u userA:123456 http://127.0.0.1:9080/get -i
HTTP/1.1 200 OK
curl -u userB:123456 http://127.0.0.1:9080/get -i
HTTP/1.1 403 Forbidden
...
{"message":"The route_id is forbidden."}
Durch die Überprüfung der Testergebnisse können wir bestätigen, dass die Anfragen von userB effektiv beschränkt wurden.
Fazit
Dieser Artikel stellt die häufig verwendeten Berechtigungskontrollrichtlinien in APISIX vor und veranschaulicht, wie sie in APISIX anhand eines klassischen Szenarios aktiviert und konfiguriert werden können. Berechtigungskontrolle ist eine weit verbreitete Strategie in API-Gateways. APISIX bietet nicht nur eine umfassende Suite von einsatzbereiten Plugins für die Authentifizierung, sondern auch umfangreiche Unterstützung in Bereichen wie Sicherheit, Traffic-Management und Beobachtbarkeit. Durch die Auswahl und Konfiguration Ihrer Berechtigungskontrollrichtlinien können Sie die Sicherheit Ihrer APIs leicht stärken.