OpenShift支持审计功能,它可以记录下所有API服务的请求。如果将所有请求记录下来,它的量非常庞大,同时也是没有太大意义的。所以OpenShift审计记录当然出会支持请求的过滤,通过方便地策略配置,可以有选择地记录下请求的内容。通常我们会记录对集群资源作更改的请求。
打开审计功能
在部署OpenShift时可以打开审计功能
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
中的配置如下:
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
:日志格式
审计规则设置
审计规则策略实例
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
:规则适用的名称空间列表。 空列表表示每个名称空间。
一个实用的例子
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
该配置将会过滤掉大部分组件之间交互的请求,同时也会过滤掉一些查询请求的审计。
网友评论