通过访问日志确认生效的授权策略

更新时间:
复制 MD 格式

在服务网格中配置授权策略后,当请求被拒绝时,如需确认是哪条策略导致请求被拒绝,可通过开启RBAC调试日志并查看Envoy访问日志,来快速定位生效的授权策略名称和具体规则,便于排查问题和验证策略配置。

准备工作

部署测试授权策略

为了演示如何通过访问日志确认授权策略生效,首先需要部署一个测试授权策略。

将以下内容保存为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、客户端地址等。