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 is an authorization library which supports access control models like ACL, RBAC, ABAC. 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

Today, we are pleased to announce that Casbin's founder, Yang Luo is awarded the "Google Open Source Peer Bonus winners" for his work on Casbin, Npcap and Nmap in 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 :)