// Module included in the following assemblies: // // * nodes/nodes-audit-log.adoc [id="nodes-nodes-audit-log-advanced_{context}"] = Advanced Audit *DEPRECATED for the moment* The advanced audit feature provides several improvements over the basic audit functionality, including fine-grained events filtering and multiple output back ends. To enable the advanced audit feature, provide the following values in the `openshift_master_audit_config` parameter: ---- openshift_master_audit_config={"enabled": true, "auditFilePath": "/var/lib/origin/oscp-audit.log", "maximumFileRetentionDays": 14, "maximumFileSizeMegabytes": 500, "maximumRetainedFiles": 5, "policyFile": "/etc/origin/master/adv-audit.yaml", "logFormat":"json"} ---- [IMPORTANT] ==== The policy file *_/etc/origin/master/adv-audit.yaml_* must be available on each control plane node. ==== The following table contains additional options you can use. .Advanced Audit Configuration Parameters [cols="3a,6a",options="header"] |=== | Parameter Name | Description |`policyFile` |Path to the file that defines the audit policy configuration. |`policyConfiguration` |An embedded audit policy configuration. |`logFormat` |Specifies the format of the saved audit logs. Allowed values are `legacy` (the format used in basic audit), and `json`. |`webHookKubeConfig` |Path to a `.kubeconfig`-formatted file that defines the audit webhook configuration, where the events are sent to. |`webHookMode` |Specifies the strategy for sending audit events. Allowed values are `block` (blocks processing another event until the previous has fully processed) and `batch` (buffers events and delivers in batches). |=== [IMPORTANT] ==== To enable the advanced audit feature, you must provide either `policyFile` *or* `policyConfiguration` describing the audit policy rules: ==== .Sample Audit Policy Configuration [source,yaml] ---- apiVersion: audit.k8s.io/v1beta1 kind: Policy rules: # Do not log watch requests by the "system:kube-proxy" on endpoints or services - level: None <1> users: ["system:kube-proxy"] <2> verbs: ["watch"] <3> resources: <4> - group: "" resources: ["endpoints", "services"] # Do not log authenticated requests to certain non-resource URL paths. - level: None userGroups: ["system:authenticated"] <5> nonResourceURLs: <6> - "/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"] <7> # 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 <1> # Log login failures from the web console or CLI. Review the logs and refine your policies. - level: Metadata nonResourceURLs: - /login* <8> - /oauth* <9> ---- <1> There are four possible levels every event can be logged at: + * `None` - Do not log events that match this rule. + * `Metadata` - Log request metadata (requesting user, time stamp, resource, verb, etc.), but not request or response body. This is the same level as the one used in basic audit. + * `Request` - Log event metadata and request body, but not response body. + * `RequestResponse` - Log event metadata, request, and response bodies. <2> A list of users the rule applies to. An empty list implies every user. <3> A list of verbs this rule applies to. An empty list implies every verb. This is Kubernetes verb associated with API requests (including `get`, `list`, `watch`, `create`, `update`, `patch`, `delete`, `deletecollection`, and `proxy`). <4> A list of resources the rule applies to. An empty list implies every resource. Each resource is specified as a group it is assigned to (for example, an empty for Kubernetes core API, batch, build.openshift.io, etc.), and a resource list from that group. <5> A list of groups the rule applies to. An empty list implies every group. <6> A list of non-resources URLs the rule applies to. <7> A list of namespaces the rule applies to. An empty list implies every namespace. <8> Endpoint used by the web console. <9> Endpoint used by the CLI. For more information on advanced audit, see the link:https://kubernetes.io/docs/tasks/debug-application-cluster/audit[Kubernetes documentation]