Was ist OPA?
Das 2016 gestartete Projekt zielt darauf ab, die Durchsetzung von Richtlinien über Technologien und Systeme hinweg zu vereinheitlichen. OPA wird heute von großen Akteuren der Technologiebranche eingesetzt. Beispielsweise verwendet Netflix OPA, um den Zugriff auf seine internen API-Ressourcen zu steuern. Chef verwendet es, um Endbenutzern IAM-Funktionen in seinen Produkten bereitzustellen. Darüber hinaus verwenden viele andere Unternehmen wie Cloudflare, Pinterest und andere OPA, um Richtlinien auf ihren Plattformen durchzusetzen (z. B. Kubernetes-Cluster). OPA ist derzeit als Inkubationsprojekt Teil der CNCF .
Was bietet OPA?
Wie ist OPA entstanden, fragen Sie sich vielleicht? Welche Probleme versucht es zu lösen? In der Tat ist die Durchsetzung von Richtlinien für APIs und Microservices so alt wie die Microservices selbst. Es gab noch nie eine Anwendung auf Produktionsebene, die keinerlei Zugriffskontrolle, Autorisierung und Durchsetzung von Richtlinien bot. Betrachten Sie den folgenden Anwendungsfall, um die Rolle von OPA zu verstehen: Ihr Unternehmen verkauft Laptops über ein Online-Portal. Wie alle anderen ähnlichen Apps besteht das Portal aus einer Homepage, auf der Kunden die neuesten Angebote sehen, möglicherweise einige zeitlich begrenzte Werbeaktionen. Wenn Kunden etwas kaufen möchten, müssen sie sich anmelden oder ein Konto erstellen. Sie leisten dann Zahlungen mit ihrer Kreditkarte oder anderen Mitteln. Um sicherzustellen, dass Ihre Kunden Sie ständig besuchen,Sie laden sie ein, Ihren Newsletter zu abonnieren, der möglicherweise Sonderrabatte enthält. Alternativ können sie Browser-Benachrichtigungen erhalten, sobald neue Produkte angekündigt werden. Typische Online-Shopping-App, nicht wahr? Lassen Sie uns nun in einem Diagramm darstellen, wie dieser Workflow aussehen wird, um den Prozess zu visualisieren:

, . , . , . , ( ) S3, , API . ? , , . ? , ( ) API- , ? , , ? , . , . , , AWS IAM. . , :
- — . , , . , S3, MySQL, MongoDB , , API, .
- . , , : .
- , , , .
- , ? , HR.
- , , , . .
- , . , , Kubernetes, API-, , Java, Ruby PHP. .
Kubernetes . , , :
- .
- , , .
- Ingress TLS, .
- - .
, RBAC Pod . , . Kubernetes RBAC , Kubernetes.
Open Policy Agent (OPA). OPA .
OPA?
, OPA , — , «». , «».
, . . API, . , . , , , , , GET API / payment / jane. . JSON . , , -, , Payments API , . OPA :
- Payments API OPA. , HTTP, , , . .
- OPA .
- OPA API .
, OPA . OPA :

OPA — , . API, SSH Linux, , CEPH, . . OPA - . , . JSON , . , OPA, JSON. , , . , , OPA JSON True False, , .
OPA
OPA , . , .
: Rego
Rego — , OPA. , : GET- /api/v1/products
? ?
OPA, :
- Go: Golang, OPA .
- : Go, OPA, , . . , . , OPA, Kubernetes , , , . , , OPA , , , OPA. .

OPA?
, , OPA . , OPA . OPA API, :
- API Bundle: OPA. OPA API Bundle . .
- API : . , OPA.
- API : , OPA , . API . .
- , : , , , opa test, opa run, opa check . . VS Code.
OPA
, OPA, , , . , — Rego. — . :
« . ».
Rego. Rego. , , , :
package play # Customers should be able to view their own payments allow = true { input.method = "GET" input.path = ["payments", customer_id] input.user = customer_id }
:
- , (#), . , , , .
allow = true
, , «» .- — GET. HTTP (POST, PUT . .) .
- :
/payments/customer_id
. ,customer_id
, , , . -
customer_id
.
, :
« , GET, — /payments/customer_id
, — customer_id
. ».
Rego , . INPUT , :
{ "method": "GET", "path": ["payments","bob"], "user": "bob" }
, INPUT JSON. , . , OPA , Evaluate. OUTPUT :
{ "allow": true }
:

alice, , . Evaluate, , JSON {}. , OPA , , . , :
default allow = false
, :
package play # Customers should be able to view their own payments default allow = false allow = true { input.method = "GET" input.path = ["payments", customer_id] input.user = customer_id }
, Evaluate, :
{ "allow": false }
, Rego , . , , , . , .
, , , : .
, :
allow = true { input.method = "GET" input.path = ["payments", customer_id] finance[input.user] } finance = {"john","mary","peter","vivian"}
, 4. , , , JSON. Rego , , . , , . JSON INPUT . , (, bob). . john ( ) . , . , , (, ), false.
OPA
, OPA . , OPA :
Kubernetes:
- , .
- , , Docker.
- , .
API:
- OPA Envoy, Istio IAM. , .
Linux PAM:
- (PAM) Linux , SSH sudo. OPA PAM, PAM . , SSH , .
, OPA, . , Kafka, ElasticSearch, SQLite CEPH .
TL; DR
- , .
- , , . , API- , , . , .
- OPA , , . OPA, OPA .
- OPA . , - , . JSON.
- Rego, , OPA. JavaScript, OPA OPA.
- «Rego» — .
- OPA Go, , .
- API, OPA . , Kubernetes , . .
- OPA API-, , .
- , Rego . , Rego « ».
- OPA kann in viele moderne Systeme und Plattformen wie Kubernetes, Kafka, SQLite, CEPH und Terraform integriert werden. Mit dem PAM-Plug-In kann es auch in Linux PAM integriert werden, um eine erweiterte Richtliniensteuerung für Linux-Daemons mithilfe von PAM (wie sshd und sudo) bereitzustellen.