审计日志
APIServer 请求认证流程
graph LR
A[authrization]
B[authtication]
C[admission]
D[audit]
A -->|认证| B -->|鉴权| C -->|准入控制| D -.->|审计|C
审计日志 按照时间顺序记录了每个用户操作记录,并可以将日志存储在文件或 webhook。 【注意】会增加api-server内存消耗
为k8s管理员提供了:
- 发生了什么?
- 什么时候发生的?
- 谁触发的?
- 活动发生在哪个(些)对象上?
- 在哪观察到的?
- 它从哪触发的?
- 活动的后续处理行为是什么?
每个请求都可被记录其相关的阶段(stage)。已定义的阶段有:
RequestReceived
- 此阶段对应审计处理器接收到请求后, 并且在委托给其余处理器之前生成的事件。ResponseStarted
- 在响应消息的头部发送后,响应消息体发送前生成的事件。 只有长时间运行的请求(例如 watch)才会生成这个阶段。ResponseComplete
- 当响应消息体完成并且没有更多数据需要传输的时候。Panic
- 当 panic 发生时生成。
第一个匹配规则设置事件的审计级别(Audit Level)。 已定义的审计级别有:
None
- 符合这条规则的日志将不会记录。Metadata
- 记录请求的元数据(请求的用户、时间戳、资源、动词等等), 但是不记录请求或者响应的消息体。Request
- 记录事件的元数据和请求的消息体,但是不记录响应的消息体。 这不适用于非资源类型的请求。RequestResponse
- 记录事件的元数据,请求和响应的消息体。这不适用于非资源类型的请求。
开始实践
-
在apiserver中开启配置
保留最近7天的审计日志,日志达到2048MB 自动轮转一个新的日志文件,日志文件最多保留三份
--audit-policy-file=/etc/kubernetes/audit-policy.yaml \ --audit-log-path=/var/log/audit.log \ --audit-log-maxage=7 \ --audit-log-maxbackup=3 \ --audit-log-maxsize=2048
-
编写policy审计规则
语法:
cat /etc/kubernetes/audit-policy.yaml apiVersion: audit.k8s.io/v1 kind: Policy omitStages: [] rules: - level: users: [] userGroups: [] verbs: [] resources: [] resourceNames: [] namespaces: [] nonResourceURLs: [] omitStages: []
示例:
apiVersion: audit.k8s.io/v1 kind: Policy rules: # - level: Request # 可选 None Metadata Request RequestResponse users: - "kubernetes-admin" userGroups: - "system:masters" verbs: - watch # "get", "list", "watch" "create", "update", "delete","patch","deletecollection 允许批量删除资源","exec","proxy","*" resources: - group: "" resources: - pods - services resourceNames: - "test" namespaces: - "default" - level: Metadata nonResourceURLs: - "api*" omitStages: - "RequestRecevied"