Task weight: 7%

Use context: kubectl config use-context infra-prod

Audit Logging has been enabled in the cluster with an Audit Policy located at /etc/kubernetes/audit/policy.yaml on cluster2-controlplane1.

Change the configuration so that only one backup of the logs is stored.

Alter the Policy in a way that it only stores logs:

  • From Secret resources, level Metadata
  • From "system:nodes" userGroups, level RequestResponse

After you altered the Policy make sure to empty the log file so it only contains entries according to your changes, like using truncate -s 0 /etc/kubernetes/audit/logs/audit.log.


译文

任务权重: 7%

使用环境: kubectl config use-context infra-prod

审计日志已经在集群中启用,审计策略位于 /etc/kubernetes/audit/policy.yaml,在 cluster2-controlplane1 上。

改变配置,使日志只有一个备份被存储。

改变策略的方式,使其只存储日志。

  • 从秘密资源,更改 Metadata
  • 从 "system:nodes "用户组,更改 RequestResponse。 更改策略后,确保清空日志文件,使其只包含与你的更改有关的条目,如使用truncate -s 0 /etc/kubernetes/audit/logs/udit.log

你可以使用jq来使json更加可读. cat data.json | jq


解答

检查apiserver 配置文件并进行更改

ssh cluster2-controlplane1

cp /etc/kubernetes/manifests/kube-apiserver.yaml ~/17_kube-apiserver.yaml
vim /etc/kubernetes/manifests/kube-apiserver.yaml
# /etc/kubernetes/manifests/kube-apiserver.yaml 
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 192.168.100.21:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --audit-policy-file=/etc/kubernetes/audit/policy.yaml
    - --audit-log-path=/etc/kubernetes/audit/logs/audit.log
    - --audit-log-maxsize=5
    - --audit-log-maxbackup=1                                    # 更改
    - --advertise-address=192.168.100.21
    - --allow-privileged=true
...
vim /etc/kubernetes/audit/policy.yaml
# /etc/kubernetes/audit/policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata

添加相关内容

# /etc/kubernetes/audit/policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:

# log Secret resources audits, level Metadata
- level: Metadata
  resources:
  - group: ""
    resources: ["secrets"]

# log node related audits, level RequestResponse
- level: RequestResponse
  userGroups: ["system:nodes"]

# for everything else don't log anything
- level: None

重启api-server 并观察变化

cd /etc/kubernetes/manifests/

mv kube-apiserver.yaml ..
watch crictl ps # 等待apiserver就绪
truncate -s 0 /etc/kubernetes/audit/logs/audit.log #写日志
mv ../kube-apiserver.yaml .

jq格式化查看

cat audit.log | tail | jq
# 显示 secret
cat audit.log | grep '"resource":"secrets"' | wc -l

# metadata级别 secret
cat audit.log | grep '"resource":"secrets"' | grep -v '"level":"Metadata"' | wc -l

# RequestResponse
cat audit.log | grep -v '"level":"RequestResponse"' | wc -l

# 仅显示 system:nodes 的 RequestResponse
cat audit.log | grep '"level":"RequestResponse"' | grep -v "system:nodes" | wc -l