Buka Pengenalan Agen Kebijakan (OPA)

Apa itu OPA?



Dimulai pada tahun 2016, ini adalah proyek yang bertujuan untuk menyatukan penegakan kebijakan di seluruh teknologi dan sistem. OPA digunakan oleh pemain raksasa di industri teknologi saat ini. Misalnya, Netflix menggunakan OPA untuk mengontrol akses ke sumber daya API internalnya. Chef menggunakannya untuk memberikan kemampuan IAM dalam produk mereka untuk pengguna akhir. Selain itu, banyak perusahaan lain seperti Cloudflare, Pinterest, dan lainnya menggunakan OPA untuk menerapkan kebijakan di seluruh platform mereka (seperti cluster Kubernetes). OPA saat ini menjadi bagian dari CNCF sebagai proyek inkubasi.







Apa yang ditawarkan OPA?



Bagaimana OPA muncul, Anda mungkin bertanya? Masalah apa yang coba dipecahkannya? Memang, penegakan kebijakan untuk API dan layanan mikro sama tuanya dengan layanan mikro itu sendiri. Tidak pernah ada aplikasi tingkat produksi yang tidak menyediakan kontrol akses, otorisasi, dan penegakan kebijakan apa pun. Untuk memahami peran OPA, pertimbangkan kasus penggunaan berikut: Perusahaan Anda menjual laptop melalui portal online. Seperti semua aplikasi serupa lainnya, portal terdiri dari halaman beranda tempat pelanggan melihat penawaran terbaru, mungkin promosi dalam waktu terbatas. Jika pelanggan ingin membeli sesuatu, mereka perlu masuk atau membuat akun. Mereka kemudian melakukan pembayaran menggunakan kartu kredit atau cara lain. Untuk memastikan bahwa pelanggan Anda terus mengunjungi Anda,Anda mengundang mereka untuk berlangganan buletin Anda, yang mungkin berisi diskon khusus. Atau, mereka dapat memilih untuk menerima pemberitahuan browser segera setelah produk baru diumumkan. Aplikasi belanja online yang khas, bukan? Sekarang mari kita gambarkan bagaimana alur kerja ini akan terlihat dalam diagram untuk memvisualisasikan prosesnya:













, . , . , . , ( ) 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 :







  1. Payments API OPA. , HTTP, , , . .
  2. OPA .
  3. 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
}
      
      





:







  1. , (#), . , , , .
  2. allow = true



    , , «» .
  3. β€” GET. HTTP (POST, PUT . .) .
  4. : /payments/customer_id



    . , customer_id



    , , , .
  5. 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.







Rego , , .







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 dapat berintegrasi dengan banyak sistem dan platform modern seperti Kubernetes, Kafka, SQLite, CEPH, dan Terraform. Dengan plugin PAM, plugin ini juga dapat berintegrasi dengan PAM Linux untuk memberikan kontrol kebijakan lanjutan pada daemon Linux menggunakan PAM (seperti sshd dan sudo).



All Articles