18.2.7 审计日志与合规性配置
审计日志与合规性配置是 Jenkins 安全体系的关键环节,用于记录“谁在何时对什么资源做了什么操作”,满足可追溯与合规要求。本节给出审计目标、日志采集与留存、敏感信息脱敏、合规策略落地、联动告警,并提供安装配置、命令示例、排错与练习。
1. 审计目标与范围
- 关键对象:用户、凭据、作业、节点、插件、系统配置、流水线执行、权限变更。
- 关键动作:登录/登出、权限授予/撤销、凭据新增/修改/删除、作业创建/修改/删除、构建触发/取消、脚本审批、插件安装/升级/卸载。
- 关键环境:主控节点、Agent、共享库、制品库、外部系统(Git、制品仓库、镜像仓库)。
2. 原理与审计链路草图
3. 审计插件安装与启用(示例)
- 建议使用 “Audit Trail” 或 “Jenkins Audit Log” 类插件。
- Web 安装路径:Manage Jenkins → Manage Plugins → Available → 搜索并安装。
- CLI 安装示例(需启用 Jenkins CLI):
# 1) 获取 CLI
curl -o jenkins-cli.jar http://jenkins.example.com/jnlpJars/jenkins-cli.jar
# 2) 安装插件(示例使用 audit-trail)
java -jar jenkins-cli.jar -s http://jenkins.example.com -auth admin:token \
install-plugin audit-trail -restart
预期效果:重启后系统日志出现插件加载信息,系统管理界面出现审计相关配置项。
4. 审计日志配置示例(Audit Trail)
- 配置路径:Manage Jenkins → Configure System → Audit Trail
- 典型配置(仅示例,按插件实际字段为准):
Loggers:
- Log file path: /var/log/jenkins/audit.log
- Log format: "time=%t user=%u ip=%I action=%m object=%o result=%r"
- Record failed login: true
- Record configuration changes: true
预期效果:/var/log/jenkins/audit.log 持续写入带字段的审计记录。
5. 系统日志与审计日志统一采集(Syslog 示例)
- 安装 rsyslog 并将审计日志转发到集中平台:
# 1) 安装 rsyslog
sudo yum install -y rsyslog || sudo apt-get install -y rsyslog
# 2) 配置转发(示例:转发到 10.10.10.10:514)
sudo tee /etc/rsyslog.d/60-jenkins-audit.conf >/dev/null <<'EOF'
$ModLoad imfile
$InputFileName /var/log/jenkins/audit.log
$InputFileTag jenkins-audit:
$InputFileStateFile stat-jenkins-audit
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor
local6.* @@10.10.10.10:514
EOF
# 3) 重启 rsyslog
sudo systemctl restart rsyslog
预期效果:集中日志平台可收到 jenkins-audit 标签的日志流。
6. 日志内容规范与字段
- 必备字段:时间戳、操作者、来源 IP、动作类型、对象标识、结果状态、失败原因。
- 对象标识:Job/Folder/Node/Plugin/Credential ID 等。
- 关联信息:构建号、流水线 ID、提交信息、工单/变更单编号。
7. 合规性配置与留存策略
- 留存周期:90/180/365 天(按组织规范),并设置冷热分级存储。
- 完整性保护:日志只读权限、集中存储、哈希校验/日志签名。
- 可追溯性:所有管理操作必须有身份识别与最小权限控制,禁止共享账号。
- 访问控制:审计日志仅对审计员/安全管理员开放,禁止普通用户访问。
8. 敏感信息保护与脱敏示例
- Pipeline 中避免直接输出敏感变量:
pipeline {
agent any
environment {
// 使用 Credentials Binding 绑定
SECRET = credentials('prod-secret-token')
}
stages {
stage('safe-log') {
steps {
echo "Deploying with token: ****" // 不输出明文
sh 'printenv | grep -v SECRET' // 排除敏感变量
}
}
}
}
- 审计记录只记录 Credential ID,不记录值。
9. 常见审计事件清单(建议重点监控)
- 用户登录成功/失败、API Token 创建与删除。
- 权限矩阵变更、角色新增/修改/删除。
- 凭据库变更(新增/更新/删除)。
- 作业与流水线定义变更(含 Jenkinsfile 变更来源)。
- 插件安装、升级、卸载,核心版本升级。
- Agent 上线/下线、节点配置变更。
- 脚本审批、非沙箱脚本执行。
10. 审计与告警联动示例(规则思路)
- 异常登录:同一用户 5 分钟内失败≥5 次 → 告警。
- 权限提升:管理员角色变更 → 立即告警。
- 凭据访问频率:短时间内大量读取同一凭据 → 告警。
11. 常见排错
- 审计日志无输出
- 检查插件是否启用、Jenkins 重启是否完成。
- 检查目录权限:
bash
sudo ls -l /var/log/jenkins/
sudo chown jenkins:jenkins /var/log/jenkins/audit.log
- Syslog 未转发
- 检查 rsyslog 配置语法:
bash
sudo rsyslogd -N1
sudo systemctl status rsyslog
- 日志字段缺失
- 核对插件日志格式模板,确认字段是否支持。
12. 练习
1. 安装审计插件并输出到 /var/log/jenkins/audit.log。
2. 通过创建/删除一个测试 Job,验证审计记录包含 user、action、object。
3. 配置 rsyslog 将审计日志转发到远端,验证远端可检索到 jenkins-audit 标签。
4. 设置只读权限与日志保留策略,模拟日志归档与清理流程。