OPAとは何ですか?
2016年に開始されたこのプロジェクトは、テクノロジーとシステム全体でポリシーの実施を統合することを目的としています。OPAは、今日のテクノロジー業界の巨大プレーヤーによって使用されています。たとえば、NetflixはOPAを使用して内部APIリソースへのアクセスを制御します。Chefはこれを使用して、エンドユーザー向けに製品にIAM機能を提供します。さらに、Cloudflare、Pinterestなどの他の多くの企業は、OPAを使用してプラットフォーム全体にポリシーを適用しています(Kubernetesクラスターなど)。OPAは現在、インキュベーションプロジェクトとしてCNCFの一部です。
OPAは何を提供しますか?
OPAはどのようにして生まれたのですか?どのような問題を解決しようとしていますか?実際、APIとマイクロサービスのポリシー施行は、マイクロサービス自体と同じくらい古いものです。アクセス制御、承認、およびポリシーの適用を一切提供しない本番レベルのアプリケーションはこれまでありませんでした。 OPAの役割を理解するために、次の使用例を検討してください。あなたの会社はオンラインポータルを通じてラップトップを販売しています。他のすべての同様のアプリと同様に、ポータルは、顧客が最新のオファー、場合によっては期間限定のプロモーションを表示するホームページで構成されています。顧客が何かを購入したい場合は、サインインするか、アカウントを作成する必要があります。その後、クレジットカードまたはその他の手段を使用して支払いを行います。あなたの顧客があなたを絶えず訪問することを確実にするために、特別割引が含まれている可能性のあるニュースレターを購読するように招待します。または、新製品が発表されたらすぐにブラウザ通知を受け取るように選択することもできます。典型的なオンラインショッピングアプリですね。次に、プロセスを視覚化するために、このワークフローが図にどのように表示されるかを示します。
, . , . , . , ( ) 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は、Kubernetes、Kafka、SQLite、CEPH、Terraformなどの多くの最新のシステムやプラットフォームと統合できます。PAMプラグインを使用すると、Linux PAMと統合して、PAM(sshdやsudoなど)を使用するLinuxデーモンで高度なポリシー制御を提供することもできます。