基于角色的访问控制 (RBAC) - HTTP
RBAC 用于检查传入请求是否已授权。
Envoy 支持 RBAC 的两种类型
通过 基于角色的访问控制 (RBAC) 网络过滤器 的 L4 连接
通过 基于角色的访问控制 (RBAC) 过滤器 的 HTTP 请求
此沙盒提供了一个 HTTP 请求 RBAC 的示例。
在示例中,仅当请求的 Referer
标头与正则表达式模式 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:通过管理员检查统计信息
沙盒使用 10001
端口配置了 Envoy 管理员。
检查管理员界面,我们现在应该看到 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 管理员界面的快速入门指南。