OPA Gatekeeper 筆記整理 - I
研究 Open Policy Agent Gatekeeper(a.k.a OPA Gatekeeper)的起因還是在準備考 CKS(Certified Kubernetes Security Specialist) 這張證照的過程中有看到這個工具。
一般來說,在管理 Kubernetes 時如果有想要做部署規範管理,會想到 Kubernetes 原生的 Pod Security Policies(PSP) 。
但是有在關注 Kubernetes 的公告的人,就會發現 PSP 在 Kubernetes 1.21 版本標示為 deprecated,並且在 Kubernetes 1.25 版本將完全被移除 (fully removed),取而代之的是使用 Pod Security Standards (PSS) 。這意味這如果你是使用原生的方式去撰寫這些管理的 Policies 的話,未來會需要花費一番功伕去升級、改寫這些 Policies,所以就開始研究第三方 (3rd-Party) 的規範管理工具。
♖ 環境
- AWS EKS, Kubernetes Version: 1.21
- OPA Gatekeeper, Version: release-3.7
♖ OPA 是什麼? 和 OPA Gatekeeper 有什麼差別
建議可以先參照這幾篇文章:
- Open Policy Agent – 快速導入 Authz 至 Microservice 架構
- Differences between OPA and Gatekeeper for Kubernetes Admission Control
由上而下,理解 OPA 以及 OPA Gatekeeper 的差別,會有比較詳細的背景知識。
在開發服務的時候,我們會需要注意到服務的 驗證(Authentication) 和 授權(Authorization) 這兩套機制要怎麼實作,區別如下:
- Authentication(驗證):確認使用者是否存在於系統當中,比方你在登入公司系統,系統會先確認你是否是這家公司的員工。
- Authorization(授權):根據使用者的角色來授予應有的權限,成功登入公司系統後,系統會根據你的職等,決定你可以看什麼資料、做什麼事情。
而 OPA 的概念就是要 把 授權(Authorization) 的概念從服務中獨立出來,讓不同的服務都能夠呼叫同一個 OPA Server 做 授權(Authorization) 這件事,概念圖如下:

比方說 API Server 接收到了一個 Request,在已經確認這個 Request 是由合法的使用者發出的請求後,API Server 會再發出一個請求到 OPA Server,確認這個 Request 要做的事情和不合乎規範,若合乎系統規範,回傳成功,反之則回傳失敗。
那 OPA Gatekeeper 又是什麼? OPA Gatekeeper 封裝了 OPA 的程式碼,讓 OPA 可以以 Webhook Server 的方式運作在 Kubernetes 裡面,解決了 Kubernetes 各種部署的審核問題。當然 OPA 本身是可以不需要 Kubernetes 以 Daemon 的方式運行,比較通用的做法是透過程式碼呼叫 library 去實作 Policy [註:Policy 是用 Rego 語法寫的,來自於一種數據查詢語言 – Datalog],比方說 Golang 有 Rego package 可以載來用。
差別如下,這是 Policy:
1 | package k8s.labels |
這是 Kubernetes 用的 ConstraintTemplate :
1 | apiVersion: templates.gatekeeper.sh/v1beta1 |
♖ 挑選 OPA Gatekeeper 的原因
在經過一番研究之後,目前在 CNCF 生態系中,關於 策略(Policies) 以及 治理(governance) 的工具,大宗分為兩支:
- Open Policy Agent Gatekeeper(a.k.a OPA Gatekeeper)
- Kyverno (發音類似於:凱 verno)
先簡短講一下兩者的差異性好了。沿用上面的 ConstraintTemplate,同樣規範 Pod 需要帶有特定 label 的情況來看,Kyverno 的寫法不需要額外學習新的語法,並且相容於 Kubernetes 原生的 yaml 撰寫方式:
1 | apiVersion: kyverno.io/v1 |
這張圖是 Kyverno 官方文件上描述的關係圖,非常清楚易懂:
但是最後我還是選擇 OPA Gatekeeper 來研究,網路上的比較文章很多,OPA Gatekeeper 在星星數以及實際的使用人數上也略勝一籌。雖然 Kyverno 簡單易用,Cluster Policy 和沿用它的 Rules 之間的關係也寫得蠻清楚易懂。但正所謂由奢入儉難,學習了 Rego 語法後,未來若有不是部署在 Kubernetes 的服務,也適用於這套部署規範管理工具,而且難保服務變多之後會需要更精細的控制程度。
♖ Reference
♞ Kubernetes Pod Security Policy Deprecation: All You Need to Know
♞ Kyverno 介紹
♞ intro-to-gatekeeper-policies
♞ Open Policy Agent - REST API
♞ RBAC and PSP
♞ Differences between OPA and Gatekeeper for Kubernetes Admission Control
♞ Open Policy Agent – 快速導入 Authz 至 Microservice 架構