Qu'est-ce que l'OPA?
Lancé en 2016, il s'agit d'un projet visant à unifier l'application des politiques à travers les technologies et les systèmes. OPA est aujourd'hui utilisé par des acteurs géants de l'industrie technologique. Par exemple, Netflix utilise OPA pour contrôler l'accès à ses ressources API internes. Chef l'utilise pour fournir des fonctionnalités IAM dans ses produits aux utilisateurs finaux. En outre, de nombreuses autres entreprises comme Cloudflare, Pinterest et d'autres utilisent OPA pour appliquer des politiques sur leurs plates-formes (telles que les clusters Kubernetes). OPA fait actuellement partie de la CNCF en tant que projet d'incubation.
Que propose OPA?
Comment l'OPA a-t-elle vu le jour, demandez-vous? Quels problèmes essaie-t-il de résoudre? En effet, l'application des politiques pour les API et les microservices est aussi ancienne que les microservices eux-mêmes. Il n'y a jamais eu d'application au niveau de la production qui n'ait fourni aucun type de contrôle d'accès, d'autorisation et d'application de stratégie. Pour comprendre le rôle de l'OPA, considérez le cas d'utilisation suivant: Votre entreprise vend des ordinateurs portables via un portail en ligne. Comme toutes les autres applications similaires, le portail se compose d'une page d'accueil où les clients voient les dernières offres, éventuellement des promotions à durée limitée. Si les clients souhaitent acheter quelque chose, ils doivent se connecter ou créer un compte. Ils effectuent ensuite des paiements en utilisant leurs cartes de crédit ou d'autres moyens. Pour vous assurer que vos clients vous visitent en permanence,vous les invitez à s'abonner à votre newsletter, qui peut contenir des remises spéciales. Ils peuvent également choisir de recevoir des notifications du navigateur dès que de nouveaux produits sont annoncés. Application d'achat en ligne typique, n'est-ce pas? Décrivons maintenant à quoi ressemblera ce flux de travail dans un diagramme pour visualiser le processus:

, . , . , . , ( ) 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 peut s'intégrer à de nombreux systèmes et plates-formes modernes tels que Kubernetes, Kafka, SQLite, CEPH et Terraform. Avec le plug-in PAM, il peut également s'intégrer à Linux PAM pour fournir un contrôle de politique avancé sur les démons Linux utilisant PAM (tels que sshd et sudo).