欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

【CKS】审计考试详解指南

最编程 2024-02-23 13:37:46
...

7. 【CKS】考试之 审计

7.1 题目要求

在这里插入图片描述

7.2 官网位置

官网搜索: audit 官网位置:审计

7.3 审计知识摘要

7.3.1 请求阶段:

  • RequestReceive:此阶段对应审计处理器收到请求后,并且在委托给其余处理器之前生成的事件
  • ResponseStarted:开始响应Header信息,但未响应消息体之前的消息。一般用于长时间运行的请求(如watch)才会生成这个阶段
  • ResponseComplete:事件响应完毕并且没有更多数据需要传输的时候。
  • Panic:访问出现panic错误时记录

7.3.2 日志记录等级:

  • None: 不记录日志
  • Metadata(请求元数据):
    记录请求的元数据(请求的用户、时间戳、资源、verb等),但不包括Request和RequestResponse
  • Request(请求体):
    记录包括Metadata和请求体,但不包括RequestResponse
  • RequestResponse(响应消息体):
    包括Metadata、Request和响应消息体

7.4 操作步骤

切换 Context 后, ssh 到对应的 master 节点

7.4.1 创建审计日志规则

cat /etc/kubernetes/logpolicy/sample-policy.yaml
apiVersion: audit.k8s.io/v1 # This is required.
kind: Policy
# Don't generate audit events for all requests in RequestReceived stage.
omitStages:
  - "RequestReceived"
rules:
  - level: RequestResponse
    resources:
    - group: ""
      resources: ["cronjobs"]
  - level: Request
    resources:
    - group: ""
      resources: ["persistendvolumes"]
    namespaces: ["front-apps"]
  - level: Metadata
    resources:
    - group: "" # core API group
      resources: ["secrets", "configmaps"]
# A catch-all rule to log all other requests at the Metadata level.
  - level: Metadata
    omitStages:
      - "RequestReceived"

此时还没有Policy这种资源,那么则需要在apiserver上更改配置,引用这个策略

7.4.2 应用审计日志规则

vim /etc/kubernetes/manifests/kube-apiserver.yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 172.30.60.35:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --audit-log-maxage=30 #添加部分
    - --audit-log-maxbackup=10 #添加部分
    - --audit-log-path=/var/log/kubernetes/kubernetes-logs.txt #添加部分
    - --audit-policy-file=/etc/kubernetes/logpolicy/sample-policy.yaml #添加部分

挂载策略和日志至 APIServer 的 Pod(考试环境有可能已经挂载):

    - mountPath: /var/log/kubernetes
      name: kubernetes-logs
    - mountPath: /etc/kubernetes/logpolicy
      name: kubernetes-policy
hostNetwork: true
priorityClassName: system-node-critical
volumes:
- hostPath:
  path: /etc/kubernetes/logpolicy
 name: kubernetes-policy
- hostPath:
  path: /var/log/kubernetes
 name: kubernetes-logs

重启kubelet:

systemctl daemon-reload
systemctl restart kubelet

7.4.3 验证

查看日志:

tail -1 /var/log/kubernetes/kubernetes-logs.txt