天天看點

OPA基礎

Open Policy Agent

  • Open Policy Agent(簡稱OPA)是一款go語言編寫的開源通用政策引擎,它通過進階聲明式語言rego編寫政策代碼為應用程式實作細粒度的通路控制機制,可用于為微服務、Kubernetes、CI/CD pipeline和API Gateway等應用場景實施政策機制;
  • OPA可以同微服務一起部署為獨立運作的服務,例如以sidecar形式運作;
  • 通常,出于保護應用程式的目的,發往微服務的每個請求都需要獲得授權後才能進行處理
  • 而為了檢查授權,微服務則需要對OPA服務發出API調用,以确定收到的請求是否被授權;但政策的執行需要由應用程式完成,例如某HTTP請求被政策拒絕時,應用程式需要響應以“HTTP 403 Forbidden”;
OPA基礎

OPA決策機制

  • 在OPA中,決策過程依賴于三個輸入
  • Query:查詢輸入,它會觸發決策過程;
  • 查詢資料指定了OPA應該決策的事情,它必須格式化為JSON格式;
  • 例如,對于“是否允許使用者Alice調用“GET /resrources”這個問題,查詢輸入包含了Alice、GET和/resources三個參數;
  • Data:OPA進行決策時需要參考的适配于特定環境的事實定義;
  • 例如,需要決策将Pod排程至哪個Kubernetes叢集節點,資料應該是可用節點及相應容量的清單;
  • Data同樣必須以JSON格式提供,且可能會随時間而變化,OPA會将其最新狀态緩存在記憶體中;
  • Policy:指定了決策計算邏輯,對于給定的Data和Query,該計算邏輯會産生政策決定,即查詢結果;但OPA隻是政策引擎,政策需要由使用者自己定義;
  • 政策引擎負責解釋Policy中包含的規則,并基于Data和Query做出政策決策,并将決策結果格式化為JSON格式進行輸出;
OPA基礎

Envoy ext_authz OPA配置示例

OPA基礎

參考文檔

​​https://www.openpolicyagent.org/docs/latest/​​

繼續閱讀