基於角色的存取控制 (RBAC) - HTTP
RBAC 用於檢查傳入的請求是否已授權。
Envoy 支援 2 種 RBAC 類型
透過 基於角色的存取控制 (RBAC) 網路篩選器 進行 L4 連線
透過 基於角色的存取控制 (RBAC) 篩選器 進行 HTTP 請求
此沙盒提供 HTTP 請求 RBAC 的範例。
在範例中,只有當其 Referer
標頭符合 regex 模式 https?://(www.)?envoyproxy.io/docs/envoy.*
時,才應允許請求。
步驟 1:啟動所有容器
變更至 examples/rbac
目錄並啟動 docker 組合。
$ pwd
envoy/examples/rbac
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------
rbac_backend_1 gunicorn -b 0.0.0.0:80 htt ... Up 0.0.0.0:8080->80/tcp
rbac_envoy_1 /docker-entrypoint.sh /usr ... Up 0.0.0.0:10000->10000/tcp, 0.0.0.0:10001->10001/tcp
步驟 2:使用 RBAC 拒絕上游服務
沙盒設定為將連接埠 10000
代理到上游服務。
由於請求沒有所需的標頭,因此遭到拒絕,Envoy 拒絕連線,並傳回 HTTP 403 回應碼和內容 RBAC: access denied
。
現在,使用 curl
來請求上游服務。
$ curl -si localhost:10000
HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Thu, 28 Jul 2022 06:48:43 GMT
server: envoy
RBAC: access denied
步驟 4:透過管理介面檢查統計資料
沙盒設定了 Envoy 管理介面的 10001
連接埠。
檢查管理介面,我們現在應該看到 RBAC 統計資料已更新,其中一個請求遭到拒絕,另一個請求則允許
$ curl -s "https://127.0.0.1:10001/stats?filter=rbac"
http.ingress_http.rbac.allowed: 1
http.ingress_http.rbac.denied: 1
http.ingress_http.rbac.shadow_allowed: 0
http.ingress_http.rbac.shadow_denied: 0
另請參閱
- 基於角色的存取控制
深入瞭解如何使用 Envoy 的
RBAC
篩選器。- RBAC 網路篩選器 API
Envoy 的
RBAC
網路篩選器的 API 和設定參考。- RBAC HTTP 篩選器 API
Envoy 的
RBAC
HTTP 篩選器的 API 和設定參考。
- Envoy 管理快速入門指南
Envoy 管理介面的快速入門指南。