审计

OpenShift支持审计功能,它可以记录下所有API服务的请求。如果将所有请求记录下来,它的量非常庞大,同时也是没有太大意义的。所以OpenShift审计记录当然出会支持请求的过滤,通过方便地策略配置,可以有选择地记录下请求的内容。通常我们会记录对集群资源作更改的请求。

打开审计功能

在部署OpenShift时可以打开审计功能

1
2
openshift_master_audit_config={"enabled": true, "auditFilePath": "/var/lib/origin/audit-ocp.log", "maximumFileRetentionDays": 14, "maximumFileSizeMegabytes": 500, "maximumRetainedFiles": 5, "policyFile": "/etc/origin/master/adv-audit.yaml", "logFormat":"json"}
openshift_master_audit_policyfile="/<path>/adv-audit.yaml"

/etc/origin/master/master-config.yaml中的配置如下:

1
2
3
4
5
6
7
8
auditConfig:
auditFilePath: "/var/lib/origin/audit-ocp.log"
enabled: true
maximumFileRetentionDays: 10
maximumFileSizeMegabytes: 10
maximumRetainedFiles: 5
policyFile: "/etc/origin/master/adv-audit.yaml"
logFormat: json

其中:
auditFilePath:审计日志保存地址
maximumFileRetentionDays:最长保留时间
maximumFileSizeMegabytes:每个文件最大大小
maximumRetainedFiles:保留最大文件数
policyFile:审计规则配置路径
openshift_master_audit_policyfile:安装时指定部署机上的审计规则配置文件路径
logFormat:日志格式

审计规则设置

审计规则策略实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:

# Do not log watch requests by the "system:kube-proxy" on endpoints or services
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: ""
resources: ["endpoints", "services"]

# Do not log authenticated requests to certain non-resource URL paths.
- level: None
userGroups: ["system:authenticated"]
nonResourceURLs:
- "/api*" # Wildcard matching.
- "/version"

# Log the request body of configmap changes in kube-system.
- level: Request
resources:
- group: "" # core API group
resources: ["configmaps"]
# This rule only applies to resources in the "kube-system" namespace.
# The empty string "" can be used to select non-namespaced resources.
namespaces: ["kube-system"]

# Log configmap and secret changes in all other namespaces at the metadata level.
- level: Metadata
resources:
- group: "" # core API group
resources: ["secrets", "configmaps"]

# Log all other resources in core and extensions at the request level.
- level: Request
resources:
- group: "" # core API group
- group: "extensions" # Version of group should NOT be included.

# A catch-all rule to log all other requests at the Metadata level.
- level: Metadata

# Log login failures from the web console or CLI. Review the logs and refine your policies.
- level: Metadata
nonResourceURLs:
- /login*
- /oauth*

每个事件可记录的有四个级别level

  • None:不记录与此规则匹配的事件
  • Metadata:记录请求元数据(请求用户,时间戳,资源,动词等),但不记录请求或响应正文。 此级别与基本审核中使用的级别相同。
  • Request:记录事件元数据和请求正文,但不记录响应正文。
  • RequestResponse:记录事件元数据,请求和响应主体。

用户users:规则适用的用户列表。 空列表表示每个用户
请求类型verbs:调用 API的请求类型,(get, list, watch, create, update, patch, delete, deletecollection以及 proxy)。空列表表示每个动词。
资源类型resources:规则适用的资源列表。 空列表表示所有资源。
组列表userGroups:规则适用的组列表。 空列表表示每个组。
nonResourceURLs :规则适用的非资源URL列表。
namespaces:规则适用的名称空间列表。 空列表表示每个名称空间。

一个实用的例子

1
2
3
4
5
6
7
8
9
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:

- level: None
userGroups: ["system:masters", "system:nodes", "system:serviceaccounts:kube-system"]
- level: None
verbs: ["get", "list", "watch"]
- level: Metadata

该配置将会过滤掉大部分组件之间交互的请求,同时也会过滤掉一些查询请求的审计。

参考文章:

OpenShift官方文档:master-node-config-advanced-audit