本篇教學將引導您如何透過下載官方二進位檔 (binary) 的方式,快速安裝並啟動 Open Policy Agent (OPA) 伺服器。這個方法直接、簡單,非常適合用於開發與測試環境。
參考官方文件:
https://www.openpolicyagent.org/docs?current-os=linux#running-opa
步驟一:下載並安裝 OPA
根據您運行的 Linux 發行版與版本,選擇對應的安裝方式。
情境 A:RHEL 9 / 新版 Linux 環境
對於 RHEL 9 或其他使用較新 glibc 函式庫的系統,可以直接下載最新版本的 OPA。
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64
或
curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_arm64_static
授予執行權限:授與可執行權限
chmod 755 ./opa
驗證安裝版本:
./opa version
您應該會看到類似以下的輸出資訊:
Version: 1.7.1
Build Commit: 15657790994f2f6611a6cc07259a6963ac504c3b
Build Timestamp: 2025-07-31T20:36:07Z
Build Hostname:
Go Version: go1.24.4
Platform: linux/amd64
Rego Version: v1
WebAssembly: available
情境 B:RHEL 8 / 舊版環境 (glibc 相依性問題)
RHEL 8 的預設 glibc 版本為 2.28,而較新版的 OPA 可能需要 glibc 2.29 或以上版本,直接執行會導致錯誤。為避免此相依性問題,建議下載靜態編譯 (static) 版本的 OPA。
以下載 v1.6.0 為例
curl -L -o opa https://github.com/open-policy-agent/opa/releases/download/v1.6.0/opa_linux_amd64_static
授予執行權限並驗證版本:
chmod 755 ./opa
./opa version
輸出範例:
Version: 1.6.0
Build Commit: 710b5a62789fbe8ad231b2fc0090c664f1ac93ba
Build Timestamp: 2025-06-30T08:57:36Z
Build Hostname:
Go Version: go1.24.4
Platform: linux/amd64
Rego Version: v1
WebAssembly: unavailable
步驟二:準備 OPA 策略並啟動伺服器
安裝完成後,我們需要一些策略檔案來讓 OPA 運作。
取得範例策略:
我們使用 Ansible 官方提供的範例策略庫進行測試。
git clone https://github.com/ansible/example-opa-policy-for-aap.git
啟動 OPA 伺服器:
./opa run -s -a :8181 -l debug --log-format json-pretty -w -b example-opa-policy-for-aap
參數說明:
-s: 以伺服器模式 (Server mode) 執行。
-a: 指定監聽的地址與埠號 (預設為 :8181)。
-l debug: 設定日誌層級為 debug,以便觀察詳細的請求與回應內容。
--log-format json-pretty: 將日誌格式化為易讀的 JSON。
-w: 監控 (watch) 策略檔案的變動,實現動態重新載入。
-b: 將指定的路徑作為一個策略包 (bundle) 載入。
注意: 此啟動方式為前景執行,主要用於測試。當您中斷連線 (Ctrl+C) 時,OPA 伺服器將會停止。
步驟三:連線測試
啟動伺服器後,我們從另一台主機 (例如 AAP Server) 測試連線。
如果遇到以下錯誤,代表連線被阻擋:
curl: (7) Failed to connect to pe.jeff.io port 8181: No route to host
問題分析:
No route to host 訊息通常指向網路層的連線問題。我們先用 ping 確認主機之間是否可達。
ping pe.jeff.io
如果 ping 指令可以成功收到回應,代表主機網路是通的,問題很可能出在 OPA 伺服器上的防火牆。
PING pe (192.168.103.215) 56(84) bytes of data.
64 bytes from pe (192.168.103.215): icmp_seq=1 ttl=64 time=0.230 ms
64 bytes from pe (192.168.103.215): icmp_seq=2 ttl=64 time=0.195 ms
64 bytes from pe (192.168.103.215): icmp_seq=3 ttl=64 time=0.210 ms
64 bytes from pe (192.168.103.215): icmp_seq=4 ttl=64 time=0.191 ms
…
設定防火牆規則 (firewalld):
在 OPA 伺服器上執行以下指令,開放 8181 埠。
新增 TCP 8181 埠的永久規則
firewall-cmd --add-port=8181/tcp --permanent
重新載入防火牆設定使其生效
firewall-cmd --reload
驗證防火牆設定:
檢查 8181/tcp 是否已成功加入規則列表。
firewall-cmd --list-all
public (active)
...
services: cockpit dhcpv6-client ssh
ports: 8181/tcp
...
確認 ports 欄位中包含 8181/tcp。
設定完成後,再次從遠端主機執行 curl http://pe.jeff.io:8181,應該就能成功連線了。
我們成功地安裝了 OPA、載入了範例策略,並解決了常見的防火牆連線問題。接下來的篇章,我們將進一步探討如何將 OPA 與 Ansible Automation Platform (AAP) 進行整合測試。