在服务网格中配置授权策略后,当请求被拒绝时,如需确认是哪条策略导致请求被拒绝,可通过开启RBAC调试日志并查看Envoy访问日志,来快速定位生效的授权策略名称和具体规则,便于排查问题和验证策略配置。
准备工作
目标集群已添加到ASM实例。具体操作,请参见添加集群到ASM实例。
目标集群已启用Istio Sidecar注入。具体操作,请参见管理全局命名空间。
已部署目标应用(如httpbin)和测试客户端应用(如sleep),并注入Sidecar代理。具体操作,请参见部署httpbin应用。
部署测试授权策略
为了演示如何通过访问日志确认授权策略生效,首先需要部署一个测试授权策略。
将以下内容保存为auth-policy.yaml文件,然后执行kubectl apply -f auth-policy.yaml命令部署授权策略。
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: test
namespace: default
spec:
action: DENY
rules:
- to:
- operation:
paths:
- /status/2*
selector:
matchLabels:
app: httpbin此策略将拒绝所有对httpbin服务中路径以/status/2开头的请求。
开启RBAC调试日志
在开始测试之前,需要开启RBAC模块的调试日志以便查看详细的授权信息。
kubectl exec deployment/httpbin -c istio-proxy -- curl -XPOST "localhost:15000/logging?rbac=debug"此命令将httpbin服务的istio-proxy中的RBAC相关日志级别设置为debug级别。
执行测试请求
发起一个测试请求来触发授权策略。
kubectl exec deployment/sleep -- curl httpbin:8000/status/200预期输出:由于授权策略拒绝所有以/status/2开头的路径,这个请求会被拒绝。
RBAC: access denied查看访问日志确认策略生效
查看httpbin服务的访问日志来确认授权策略的生效情况。
kubectl logs deployment/httpbin -c istio-proxy | grep 403 -B 1预期输出:
2026-01-04T11:06:13.510661Z debug envoy rbac external/envoy/source/extensions/filters/http/rbac/rbac_filter.cc:224 enforced denied, matched policy ns[default]-policy[test]-rule[0] thread=25
{"authority_for":"httpbin:8000","bytes_received":0,"bytes_sent":19,"downstream_local_address":"192.168.0.10:80","downstream_remote_address":"192.168.0.12:38342","duration":0,"istio_policy_status":null,"method":"GET","path":"/status/200","protocol":"HTTP/1.1","request_id":"56168e5d-cad6-4122-be9d-1412937132d4","requested_server_name":null,"response_code":403,"response_flags":"-","route_name":"default","start_time":"2026-01-04T11:06:13.510Z","trace_id":null,"upstream_cluster":"inbound|80||;","upstream_host":null,"upstream_local_address":null,"upstream_response_time":null,"upstream_service_time":null,"upstream_transport_failure_reason":null,"user_agent":"curl/8.1.2","x_forwarded_for":null}从输出可以看到授权策略生效的信息:
debug日志显示:
enforced denied, matched policy ns[default]-policy[test]-rule[0],表示策略匹配并执行了拒绝操作。这段日志的各部分含义如下:ns[default]:表示该授权策略位于default命名空间下。policy[test]:表示匹配的授权策略名称为test。rule[0]:表示匹配的是该策略中的第1条规则(索引从0开始)。
访问日志中的
response_code: 403表示请求被拒绝从日志中还可以看到详细的请求信息,包括路径
/status/200、客户端地址等。