Istio Sidecar模式下如何自定义/禁用日志以屏蔽敏感URL参数
解决Istio Sidecar日志泄露敏感URL查询参数的问题
方法1:自定义访问日志格式(推荐)
Istio的Envoy代理支持自定义访问日志格式,直接砍掉查询参数部分就行,不用全局关日志。
全局网格配置(所有服务生效)
修改IstioOperator配置,替换默认的访问日志格式:
apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: meshConfig: accessLogFile: "/dev/stdout" # 只记录请求方法、路径(不含查询参数)和协议等核心字段 accessLogFormat: | [%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% "%REQ(X-FORWARDED-FOR)%" "%REQ(USER-AGENT)%" "%REQ(X-REQUEST-ID)%" "%REQ(:AUTHORITY)%" "%UPSTREAM_HOST%"
应用后重启Istio控制平面和所有Sidecar Pod,新日志就不会带查询参数了。
单个服务配置
如果只想针对特定服务改,给Deployment加注解:
annotations: sidecar.istio.io/proxyConfig: | accessLogFormat: "[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%""
方法2:精准调整HTTP组件日志级别
你之前试的全局关日志没用,是因为Istio的访问日志归属于http组件,得单独把这个组件的日志级别调到error,只记错误日志,不记常规访问日志:
给Deployment加注解:
annotations: sidecar.istio.io/componentLogLevel: "http:error"
或者全局配置:
apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: meshConfig: proxyConfig: componentLogLevel: "http:error"
方法3:用EnvoyFilter强制修改日志规则
如果上面的方法都不满足,直接用EnvoyFilter硬改Envoy的配置:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: remove-query-params namespace: istio-system spec: workloadSelector: labels: istio: ingressgateway # 换成你要针对的服务标签,比如app: your-service configPatches: - applyTo: NETWORK_FILTER match: context: ANY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" access_log: - name: envoy.access_loggers.file typed_config: "@type": "type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog" path: "/dev/stdout" format: "[%START_TIME%] "%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%" %RESPONSE_CODE% %RESPONSE_FLAGS% %BYTES_RECEIVED% %BYTES_SENT% %DURATION%""
验证生效
- 应用配置后,重启目标Pod(全局配置要重启Istio控制平面)
- 用
kubectl logs <pod-name> istio-proxy查看Sidecar日志 - 确认日志里没有敏感的查询参数
内容的提问来源于stack exchange,提问作者RookieDev
相关产品推荐
相关产品推荐

