Zum Hauptinhalt springen

┬Ě 6 Min. gelesen
Rushikesh Tote

Einf├╝hrungÔÇő

APISIX ist ein hochleistungsf├Ąhiges und skalierbares natives API Gateway basierend auf Nginx und etc. Es ist ein Open-Source-Projekt der Apache Software Foundation. Au├čerdem ist das, was APISIX so gut macht, die Unterst├╝tzung vieler gro├čartiger Plugins, die verwendet werden k├Ânnten, um Funktionen wie Authentifizierung zu implementieren, ├╝berwachen, routing, etc. Und die Tatsache, dass Plugins in APISIX hei├č neu geladen werden (ohne Neustart) macht es sehr dynamisch.

Bei Verwendung von APISIX kann es jedoch zu Szenarien kommen, bei denen Sie m├Âglicherweise komplexe Autorisierungslogik in Ihrer Anwendung hinzuf├╝gen m├Âchten. Hier k├Ânnte Ihnen authz-casbin helfen authz-casbin ist ein APISIX-Plugin, das auf Lua Casbin basiert, das eine leistungsstarke Autorisierung basierend auf verschiedenen Zugriffskontrollmodellen erm├Âglicht. Casbin ist eine Autorisierungsbibliothek, die Zugriffskontrollmodelle wie ACL, RBAC, ABAC unterst├╝tzt. Urspr├╝nglich in Go geschrieben, wurde es in viele Sprachen portiert und Lua Casbin ist die Lua-Implementierung von Casbin. Die Entwicklung von authz-casbin startete, als wir ein neues Plugin f├╝r die Autorisierung im APISIX-Repository (#4674), dem die Kernmitglieder zugestimmt haben, vorschlugen. Und nach den hilfreichen Bewertungen, die zu einigen wesentlichen ├änderungen und Verbesserungen gef├╝hrt haben, wurde die PR (#4710) schlie├člich zusammengef├╝hrt.

In diesem Blog, wir werden das authz-casbin Plugin verwenden, um zu zeigen, wie Sie ein Autorisierungsmodell basierend auf der Role Based Access Control (RBAC) in APISIX implementieren k├Ânnen.

HINWEIS: Sie m├╝ssen ein anderes Plugin oder einen benutzerdefinierten Workflow verwenden, um den Benutzer zu authentifizieren, da Casbin nur die Autorisierung und keine Authentifizierung durchf├╝hrt.

Erstellen eines ModellsÔÇő

Das Plugin verwendet drei Parameter, um jede Anfrage zu autorisieren - Subjekt, Objekt und Aktion. Betreff ist hier der Wert des Benutzernamen-Headers, der so etwas wie [Benutzername: alice] sein k├Ânnte. Dann ist das Objekt der URL-Pfad, auf den zugegriffen wird und die Aktion ist die Anfragemethode, die verwendet wird.

Nehmen wir an, wir wollen ein Modell mit drei Ressourcen an den Pfaden erstellen - /, /res1 und /res2. Und wir wollen ein Modell wie dies:

bild

Dies w├╝rde bedeuten, dass alle Benutzer (*) wie zum Beispiel jack auf die Homepage zugreifen k├Ânnen (/). Und Benutzer mit admin Berechtigungen wie alice und bob k├Ânnen auf alle Seiten und Ressourcen zugreifen (wie res1 und res2). Lass uns Benutzer ohne Administratorrechte auf nur GET Anfragemethode beschr├Ąnken. F├╝r dieses Szenario k├Ânnten wir das Modell definieren als:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, handeln

[role_definition]
g = _, _

[policy_effect]
e = irgendwo (p. ft == allow))

[matchers]
m = (g(r.sub, p.sub) || keyMatch(r.sub, p. ub)) && keyMatch(r.obj, p.obj) && keyMatch(r.act, p.act)

Richtlinien erstellenÔÇő

Aus dem oben genannten Szenario w├Ąre die Politik folgende:

p, *, /, GET
p, admin, *, *
g, alice, admin
g, bob, admin

Der Matcher des Modells bedeutet:

  1. (g(r.sub, p.sub) || keyMatch(r.sub, p. ub)): Entweder hat der Betreff des Antrags eine Rolle als Betreff der Richtlinie, oder der Betreff des Antrags passt in keyMatch. keyMatch ist in Funktion in Lua Kasbin Sie k├Ânnen einen Blick auf die Beschreibung der Funktion werfen und mehr solche Funktionen, die hier n├╝tzlich sein k├Ânnten.
  2. keyMatch(r.obj, p.obj): Das Objekt der Anfrage entspricht dem Objekt der Richtlinie (URL-Pfad hier).
  3. keyMatch(r.act, p.act): Die Aktion des Requests stimmt mit der Aktion der Richtlinie ├╝berein (HTTP-Request-Methode hier).

Aktiviere das Plugin auf der RouteÔÇő

Sobald Sie das Modell und die Richtlinie erstellt haben, k├Ânnen Sie es auf einer Route mit der APISIX Admin API aktivieren. Um es mit Modell- und Richtlinien-Datei-Pfaden zu aktivieren:

curl http://127.0.0. :9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"authz-casbin": {
"model_path": "/path/to/model". onf",
"policy_path": "/path/to/policy. sv",
"Benutzername": "Benutzername"
}
},
"upstream": {
"nodes": {
"127. .0.1:1980": 1
},
"type": "roundrobin"
},
"uri": "/*"
}'

Hier ist das Feld Benutzername der Headername, den Sie im Betreff ├╝bergeben werden. Wenn Sie zum Beispiel den Benutzernamen als Benutzer ├╝bergeben werden: Alice, w├╝rden Sie "Benutzername": "Benutzer" verwenden.

Um Modell-/Richtlinien-Text anstelle von Dateien zu verwenden, k├Ânnen Sie stattdessen das -Modell und Richtlinie Felder verwenden:

curl http://127.0.0. :9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"authz-casbin": {
"model": "[request_definition]
r = sub, obj, Akt

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = irgendwo (p. ft == allow))

[matchers]
m = (g(r. ub, p. ub) || keyMatch(r.sub, p.sub)) && keyMatch(r.obj, p.obj) && keyMatch(r.act, p. ct)",

"policy": "p, *, /, GET
p, admin, *, *
g, alice, admin
g, bob, admin",

"Benutzername": "Benutzername"
}
},
"upstream": {
"nodes": {
"127. .0.1:1980": 1
},
"type": "roundrobin"
},
"uri": "/*"
}'

Aktiviere das Plugin mit einem globalen Modell/RichtlinieÔÇő

Es kann Situationen geben, in denen Sie ein einzelnes Modell und die Richtlinien-Konfiguration ├╝ber mehrere Routen hinweg verwenden m├Âchten. Sie k├Ânnen dies tun, indem Sie zuerst eine PUT Anfrage senden, um das Modell und die Richtlinien-Konfiguration zu den Metadaten des Plugins hinzuzuf├╝gen von:

curl http://127.0.0. :9080/apisix/admin/plugin_metadata/authz-casbin -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
{
"model": "[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[role_definition]
g = _, _

[policy_effect]
e = irgendwo (p. ft == allow))

[matchers]
m = (g(r.sub, p.sub) || keyMatch(r. ub, p.sub)) && keyMatch(r.obj, p.obj) && keyMatch(r. ct, p.act)",

"policy": "p, *, /, GET
p, admin, *, *
g, alice, admin
g, bob, admin"
}'

Und um dann die gleiche Konfiguration auf einer Route zu aktivieren, senden Sie eine Anfrage mit der Admin API:

curl http://127.0.0. :9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"authz-casbin": {
"username": "username"
}
},
"upstream": {
"nodes": {
"127. .0.1:1980": 1
},
"type": "roundrobin"
},
"uri": "/route1/*"
}'

Dies wird die Plugin-Metadatenkonfiguration zur Route hinzuf├╝gen. Sie k├Ânnen die Metadatenkonfiguration des Plugins auch ganz einfach aktualisieren, indem Sie die Anfrage an die Metadaten des Plugins mit aktualisiertem Modell und Richtlinien-Konfiguration erneut schicken, das Plugin aktualisiert automatisch alle Routen mit dem Plugin Metadata.

Verwende F├ĄlleÔÇő

  • Der prim├Ąre Anwendungsfall dieses Plugins w├Ąre die Implementierung der Autorisierung in Ihren APIs. Sie k├Ânnen dieses Plugin ganz einfach auf jeder API-Route hinzuf├╝gen, die Sie mit Ihrem Autorisierungsmodell und Ihrer Richtlinien-Konfiguration verwenden.
  • Wenn Sie ein einziges Autorisierungsmodell f├╝r alle Ihre APIs haben m├Âchten, k├Ânnen Sie globale Modelle/Richtlinien-Methode verwenden. Dies erleichtert die Aktualisierung der Richtlinie f├╝r alle Routen, da Sie nur die Metadaten in etcd aktualisieren m├╝ssen.
  • Wenn Sie f├╝r jede Route ein anderes Modell verwenden m├Âchten, k├Ânnen Sie die Routenmethode verwenden. Dies ist hilfreich, wenn verschiedene API-Routen unterschiedliche Benutzerberechtigungen haben. Sie k├Ânnen dies auch verwenden, wenn Sie sich mit gr├Â├čeren Richtlinien befassen, da es die Autorisierung beschleunigen wird, wenn Sie in mehrere Routen gefiltert werden.

┬Ě 1 Min. gelesen
Casbin

Heute freuen wir uns, Ihnen mitteilen zu k├Ânnen, dass Casbin's Gr├╝nder Yang Luo erh├Ąlt den "Google Open Source Peer Bonus Gewinner" f├╝r seine Arbeit an Casbin, NPcap und Nmap im 2019 Q3.

ospb

Der urspr├╝ngliche Pr├Ąmienbrief kann hier aufgerufen werden..

Das Open Source Peer Bonus Programm ist beschrieben als:

Genauso wie ein Google Peer Bonus verwendet wird, um einen Googler, der ├╝ber- und dar├╝ber hinausgegangen ist, zu erkennen ein Open Source Peer Bonus erkennt externe Personen an, die einen au├čergew├Âhnlichen Beitrag zu Open Source geleistet haben.

Die Ank├╝ndigung f├╝r die 2019 Gewinner ist verf├╝gbar unter:

https://opensource.googleblog.com/2020/01/announcing-2019-second cycle-google.html

Yang und Casbin sind unter Open-Source-Entwicklern und Projekten gelistet, die relevante Auswirkungen haben wie Git, TensorFlow, V8, CPython, LLVM, Apache-Projekte, Winkel- oder Jenkins.

Wir freuen uns, dass Casbin auf diese Weise f├╝r seinen Beitrag zu Open Source und Cloud-Sicherheit erkannt wird!

Vielen Dank f├╝r das Fliegen von Casbin!

┬Ě 1 Min. gelesen
Yang Luo

Heute haben wir die Casbin-Dokumentation von GitHub Wiki zu Docs dieser Website migriert, welches von Docusaurus betrieben wird. Docusaurus bietet viele gro├čartige Funktionen, wie z.B. bessere Markdown Stile, Volltextsuche, Versionierung, ├ťbersetzung.

Die Dokumentation ist noch nicht perfekt und muss noch abgestimmt werden. Der Quellcode wird auf GitHub: https://github.com/casbin/casbin-website gehostet.

Jeder Beitrag oder Vorschlag ist willkommen!

┬Ě 1 Min. gelesen
Zixuan Liu

Heute haben wir Casbin erfolgreich nach Node.js portiert, der den Namen node-Casbin tr├Ągt.

node-Casbin teilt die ├Ąhnliche Nutzung und API mit anderen Implementierungen von Casbin. Die Middlewares f├╝r Express, Koa2 und Egg.js sind bereit f├╝r . Der Speicheradapter f├╝r Sequelize wird ebenfalls vorbereitet.

Hoffentlich kann es deinem Bed├╝rfnis gut dienen :)

GitHub: https://github.com/casbin/node-casbin

┬Ě 1 Min. gelesen
Helong Zhang

Einige unserer Kunden fragen, ob Casbin als Service anstelle einer Bibliothek genutzt werden kann. Die Antwort lautet JA. Heute haben wir das Casbin Server Projekt als konkrete L├Âsung f├╝r Access Control as a Service gestartet.

Casbin Server wird von unserem Kernteam aktiv weiterentwickelt. Es hat mehrere Eigenschaften:

  • Rein entwickelt in Golang.
  • Kann tausende Casbin-Instanzen verwalten, so dass Sie die Logik der Durchsetzung von Richtlinien von mehreren Diensten auf einen Casbin-Server umstellen k├Ânnen.
  • gRPC wird verwendet, um mit Casbin Server zu kommunizieren. Wir erw├Ągen auch, in naher Zukunft den RESTful Support hinzuzuf├╝gen.
  • Ein benutzerfreundliches Web-Administratorportal f├╝r nicht-Entwickler Administratoren zur Verwaltung aller Details wie Casbin-Instanzen, Modelle, Richtlinienspeicherung und Lastausgleich.

Der Quellcode wird auf GitHub gehostet: https://github.com/casbin/casbin-server

Alle Tickets oder Pull-Requests sind willkommen :)