基於角色的存取控制 (RBAC) - HTTP

RBAC 用於檢查傳入的請求是否已授權。

Envoy 支援 2 種 RBAC 類型

此沙盒提供 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

步驟 3:使用 RBAC 授權上游服務

現在,我們可以發出另一個請求,並設定適當的標頭。

$ curl -si -H "Referer: https://envoy.dev.org.tw/docs/envoy" localhost:10000 | grep 200
HTTP/1.1 200 OK

步驟 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 管理介面的快速入門指南。