

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 OPA 實作 PDP
<a name="opa"></a>

Open Policy Agent (OPA) 是開放原始碼的一般用途政策引擎。OPA 有許多使用案例，但與 PDP 實作相關的使用案例是能夠從應用程式分離授權邏輯。這稱為*政策解耦*。OPA 在實作 PDP 方面很有用，原因有幾個。它使用稱為 Rego 的高階宣告性語言來草擬政策和規則。這些政策和規則與應用程式分開存在，可以呈現授權決策，而不需要任何應用程式特定的邏輯。OPA 也會公開 RESTful API，讓擷取授權決策變得簡單明瞭。若要做出授權決策，應用程式會使用 JSON 輸入查詢 OPA，而 OPA 會根據指定的政策評估輸入，以傳回 JSON 中的存取決策。OPA 也能夠匯入可能與進行授權決策相關的外部資料。

![\[使用 OPA 實作 PDP\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/opa.png)


相較於自訂政策引擎，OPA 有幾個優點：
+ OPA 及其使用 Rego 進行的政策評估提供彈性的預先建置政策引擎，只需要插入政策和做出授權決策所需的任何資料。此政策評估邏輯必須在自訂政策引擎解決方案中重新建立。
+ OPA 透過使用宣告性語言撰寫政策來簡化授權邏輯。您可以獨立於任何應用程式程式碼來修改和管理這些政策和規則，無需應用程式開發技能。
+ OPA 公開 RESTful API，可簡化與政策強制執行點 (PEPs整合。
+ OPA 提供內建支援，以驗證和解碼 JSON Web Token JWTs)。
+ OPA 是公認的授權標準，這表示如果您需要協助或研究來解決特定問題，文件和範例會非常豐富。
+ 採用授權標準，例如 OPA，可讓以 Rego 撰寫的政策跨團隊共用，無論團隊應用程式使用的程式設計語言為何。

OPA 不會自動提供兩件事：
+ OPA 沒有用於更新和管理政策的強大控制平面。OPA 透過公開管理 API 來提供實作政策更新、監控和日誌彙總的一些基本模式，但與此 API 的整合必須由 OPA 使用者處理。根據最佳實務，您應該使用持續整合和持續部署 (CI/CD) 管道來管理、修改和追蹤政策版本，並在 OPA 中管理政策。
+ 根據預設，OPA 無法從外部來源擷取資料。授權決策的外部資料來源可以是保留使用者屬性的資料庫。將外部資料提供給 OPA 的方式有一些彈性 – 在請求授權決策時，可以事先在本機快取，或從 API 動態擷取 – 但取得此資訊不是 OPA 可以代表您執行的動作。