启用API审计日志记录系统事件
启用 API 审计日志,系统会将每个用户发起的系统事件信息记录下来。您可以知道发生了什么事件、事件的发生时间、事件的发起人是谁和事件对集群的影响。您可以在 Rancher 安装或升级时开启 API 审计日志功能,开启特性后,所有 Rancher API 的请求和响应信息都会写入到日志文件中。
开启 API 审计日志#
您可以向 Rancher Server 容器中传入环境变量,开启和配置审计日志功能。请参考以下链接,在安装时开启该特性。
API 审计日志选项#
审计日志内容和规则#
以下定义了有关审计日志记录的内容以及包含哪些数据的规则:
参数 | 描述 |
---|---|
AUDIT_LEVEL | 0 - 禁用审计日志 (默认设置)1 - 仅记录事件元数据 2 - 记录事件元数据及请求内容 3 - 记录事件元数据、请求内容及响应内容。请求/响应对的每个日志事务使用相同的auditID 值 有关显示每个等级设置记录的具体内容,请参阅审计日志级别。 |
AUDIT_LOG_PATH | Rancher Server API 日志记录在容器内的目录位置。审计日志在容器内的默认路径为/var/log/auditlog/rancher-api-audit.log 。您可以将日志目录挂载到主机。例如: AUDIT_LOG_PATH=/my/custom/path/ |
AUDIT_LOG_MAXAGE | 定义保留旧审计日志文件的最大天数。默认 10 天。 |
AUDIT_LOG_MAXBACKUP | 定义保留的审计日志最大文件个数,默认 10。 |
AUDIT_LOG_MAXSIZE | 定义单个审计日志文件的最大值(以兆为单位)。默认 100M。 |
审计日志级别#
下面显示了每个AUDIT_LEVEL
设置,记录的 API 事务具体内容。
AUDIT_LEVEL 设置 | 请求元数据 | 请求正文内容 | 响应元数据 | 响应正文内容 |
---|---|---|---|---|
0 | ||||
1 | ✓ | |||
2 | ✓ | ✓ | ||
3 | ✓ | ✓ | ✓ | ✓ |
查看 API 审计日志#
Rancher 单节点#
与主机系统共享AUDIT_LOG_PATH
目录(默认目录:/var/log/auditlog
)。日志可以通过标准的 CLI 工具进行查看,也可以转发到日志收集工具,例如 Fluentd, Filebeat, Logstash 等。
Rancher 高可用#
使用 Helm Chart 安装 Rancher 时启用 API 审计日志功能,会在 Rancher Pod 中创建一个rancher-audit-log
的 sidecar 容器。该容器会将 API 审计日志发送到标准输出(stdout)。您可以像查看任何容器日志一样查看审计日志内容。
rancher-audit-log
容器位于 rancher
pod 所在的 cattle-system
命名空间中。
通过 CLI 查看#
通过 Rancher GUI 查看#
在下拉菜单中,选择 Cluster: local > System。
在主导航栏中,选择 资源 > 工作负载 (在 v2.3.0 之前的版本, 在主导航栏中选择 工作负载 )。找到
cattle-system
命名空间。找到rancher
工作负载,单击它的链接。选择一个
rancher
Pod 并选择 省略号 (...) > 查看日志 来查看 rancher Pod 日志。从 日志 下拉菜单中, 选择
rancher-audit-log
.
收集审计日志#
可以为集群启用 Rancher 的内置日志收集功能,将审计和其他服务日志发送到受支持的日志收集服务端。 详情请参考Rancher 工具 - 日志。
审计日志样本#
启用审核后,Rancher 以 JSON 的形式记录每个 API 请求或响应。以下每个代码示例都提供了如何标识每个 API 事务的示例。
元数据级别#
如果设置了 AUDIT_LEVEL
为 1
, Rancher 会记录每个 API 请求的元数据请求头,但不会记录正文。请求头提供有关 API 事务的基本信息,例如事务的 ID,发起事务的用户,事件发生的时间等。
元数据和请求正文级别#
如果设置 AUDIT_LEVEL
为 2
, Rancher 会记录每个 API 请求的元数据标题和正文。
下面的代码示例描述了一个 API 请求,包含其元数据请求头和请求正文。
元数据、请求正文和响应正文级别#
如果设置 AUDIT_LEVEL
为 3
, Rancher 会记录:
- 每个 API 请求的元数据请求头和请求正文。
- 每个 API 响应的元数据响应头和相应正文。
请求#
下面的代码示例描述了一个 API 请求,它有元数据请求头和请求正文。
响应#
下面的代码示例描述了一个 API 响应,其中包含它的元数据响应头和响应正文。