Apache Superset用户授权监控咨询:补充日志信息及其他方法
监控Apache Superset用户授权的替代方案
针对官方事件日志缺少IP地址和授权结果的问题,你可以通过以下几种方式实现更全面的用户授权监控:
1. 扩展自定义事件日志
Superset的事件日志系统支持自定义扩展,你可以修改日志逻辑来补充IP和授权结果信息:
- 重写
BaseLogger类(位于superset/utils/log.py),在log方法中从Flask的请求对象request里获取客户端IP(request.remote_addr或request.headers.get('X-Forwarded-For'),根据部署环境选择)。 - 在权限检查的核心逻辑(比如
superset/security/manager.py中的权限验证方法)中,捕获授权成功/失败的结果,将其作为字段添加到事件日志中。 - 示例代码片段(修改日志记录逻辑):
from flask import request from superset.utils.log import BaseLogger class CustomEventLogger(BaseLogger): def log(self, event, **kwargs): # 添加IP地址 kwargs['ip_address'] = request.remote_addr or request.headers.get('X-Forwarded-For') # 添加授权结果(需在权限检查处传入该参数) kwargs['auth_result'] = kwargs.pop('auth_result', 'unknown') super().log(event, **kwargs) - 最后在
superset_config.py中配置使用自定义日志类:EVENT_LOGGER = CustomEventLogger()
2. 配置Flask请求日志
Superset基于Flask框架,直接配置Flask的请求日志可以记录基础的访问和授权相关信息:
- 在
superset_config.py中修改LOGGING_CONFIG,添加一个针对请求的日志处理器,包含以下关键字段:remote_addr:客户端IP地址user_id:当前登录用户IDstatus:响应状态码(比如403表示授权失败,200表示成功)request_uri:请求的资源路径
- 示例配置片段:
LOGGING_CONFIG = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'request_handler': { 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/path/to/superset_requests.log', 'formatter': 'request_formatter', }, }, 'formatters': { 'request_formatter': { 'format': '%(asctime)s - %(remote_addr)s - user_id:%(user_id)s - %(status)s - %(request_uri)s' }, }, 'loggers': { 'werkzeug': { 'handlers': ['request_handler'], 'level': 'INFO', 'propagate': False, }, }, }
3. 数据库审计监控
直接监控Superset的元数据库,跟踪权限相关的表操作:
- 重点监控
ab_user(用户信息)、ab_role(角色)、ab_permission_view_role(角色-权限关联)、ab_user_role(用户-角色关联)这些核心表的INSERT/UPDATE/DELETE操作,记录权限分配、角色变更等关键事件。 - 利用数据库自带的审计功能(比如PostgreSQL的
pgAudit、MySQL的审计日志插件),或者创建数据库触发器,将权限变更记录到专门的审计表中。 - 同时可以结合数据库的查询日志,跟踪用户对Superset资源(仪表盘、图表)的访问记录。
4. 反向代理层日志记录
在Superset前端部署反向代理(如Nginx),通过代理层统一记录访问信息:
- 配置Nginx的
access_log,包含客户端IP($remote_addr、$http_x_forwarded_for)、用户标识(从Superset的会话或请求头中提取,比如$http_cookie中的用户会话信息)、响应状态码($status)、请求路径($request_uri)。 - 示例Nginx日志配置:
log_format superset_audit '$remote_addr - $http_x_forwarded_for - [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_cookie"'; access_log /var/log/nginx/superset_access.log superset_audit;
内容的提问来源于stack exchange,提问作者l1terly_me
相关产品推荐
相关产品推荐

