目錄
一、審計(jì)日志介紹:
二、事件和階段:
三、Kubernetes審計(jì)日志:
四、審計(jì)日志的啟用:
五、收集審計(jì)日志方案:
一、審計(jì)日志介紹:
?????? 在Kubernetes集群中,API Server的審計(jì)日志記錄了哪些用戶、哪些服務(wù)請(qǐng)求操作集群資源,并且可以編寫不通規(guī)則,控制忽略、存儲(chǔ)的操作日志。
?????? 審計(jì)日志采用JSON輸出,每條日志報(bào)包含豐富的元數(shù)據(jù),例如請(qǐng)求的URL、HTTP的方法、客戶端來源登,你可以使用監(jiān)控服務(wù)來分析API流量,以檢測趨勢或可能存在的安全隱患。
這些服務(wù)會(huì)訪問API Serve:
- 管理節(jié)點(diǎn)(controller-manager scheduler)
- 工作節(jié)點(diǎn)(kubelt、kube-proxy)
- 集群服務(wù)(CoreDNS、Calico、HPA等)
- kubectl、API、Dashboard
二、事件和階段:
當(dāng)客戶端向API Server發(fā)出請(qǐng)求時(shí),該請(qǐng)求將經(jīng)歷一個(gè)或多個(gè)階段:
階段 |
說明 |
RequestReceived |
審核處理程序已收到請(qǐng)求 |
ResponseStarted |
已發(fā)送 響應(yīng)標(biāo)頭,但尚未發(fā)送響應(yīng)正文 |
ResponseComplete |
響應(yīng)正文已完成,不再發(fā)送任何字節(jié) |
Panic |
內(nèi)部服務(wù)器出錯(cuò),請(qǐng)求未完成 |
三、Kubernetes審計(jì)日志:
?????? Kubernetes審核策略文件包含一系列規(guī)則,描述了記錄日志的級(jí)別,采集哪些日志,不采集哪些日志。
規(guī)則級(jí)別如下表所示:
級(jí)別 |
說明 |
None |
不為事件創(chuàng)建日志條目 |
Metadata |
創(chuàng)建日志條目。包括元數(shù)據(jù),但不包括請(qǐng)求正文或響應(yīng)正文 |
Request |
創(chuàng)建日志條目。包括元數(shù)據(jù)和請(qǐng)求正文,但不包括響應(yīng)正文 |
RequestResponse |
創(chuàng)建日志條目。包括元數(shù)據(jù)、請(qǐng)求正文和響應(yīng)正文 |
參考資料:https://kubernetes.io/zh/docs/tasks/debug-application-cluster/audit/
示列:
日志示列格式:
?
四、審計(jì)日志的啟用:
審計(jì)日志支持寫入本地文件和Webhook(發(fā)送到外部HTTP API)兩種方式。
啟用審計(jì)日志功能:
【】vi /etc/kubernetes/manifests/kube-apiserver.yaml
…
- --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
- --audit-log-path=/var/log/k8s_audit.log
- --audit-log-maxage=30
- --audit-log-maxbackup=10
- --audit-log-maxsize=100
...
volumeMounts:
...
- mountPath: /etc/kubernetes/audit/audit-policy.yaml
name: audit
- mountPath: /var/log/k8s_audit.log
name: audit-log
volumes:
- name: audit
hostPath:
path: /etc/kubernetes/audit/audit-policy.yaml
type: File
- name: audit-log
hostPath:
path: /var/log/k8s_audit.log
type: FileOrCreate
參數(shù)說明
audit-policy-file |
審計(jì)日志策略文件 |
audit-log-path |
審計(jì)日志輸出文件 |
audit-log-maxage |
審計(jì)日志保留的最大天數(shù) |
audit-log-maxbackup |
審計(jì)日志最大分片存儲(chǔ)多少個(gè)日志文件 |
audit-log-maxsize |
單個(gè)審計(jì)日志最大大小,單位MB |
注:需要使用hostpath數(shù)據(jù)卷將宿主機(jī)策略文件和日志文件掛載到容器中。
【】vi? /etc/kubernetes/audit/audit-policy.yaml#簡略版自定義
apiVersion: audit.k8s.io/v1 # 這是必填項(xiàng)。
kind: Policy
# 不要在 RequestReceived 階段為任何請(qǐng)求生成審計(jì)事件。
omitStages:
- "RequestReceived"
rules:
# 在日志中用 RequestResponse 級(jí)別記錄 Pod 變化。
- level: RequestResponse
resources:
- group: ""
# 資源 "pods" 不匹配對(duì)任何 Pod 子資源的請(qǐng)求,
# 這與 RBAC 策略一致。
resources: ["pods"]
# 在日志中按 Metadata 級(jí)別記錄 "pods/log"、"pods/status" 請(qǐng)求
- level: Metadata
resources:
- group: ""
resources: ["pods/log", "pods/status"]
# 不要在日志中記錄對(duì)名為 "controller-leader" 的 configmap 的請(qǐng)求。
- level: None
resources:
- group: ""
resources: ["configmaps"]
resourceNames: ["controller-leader"]
# 不要在日志中記錄由 "system:kube-proxy" 發(fā)出的對(duì)端點(diǎn)或服務(wù)的監(jiān)測請(qǐng)求。
- level: None
users: ["system:kube-proxy"]
verbs: ["watch"]
resources:
- group: "" # core API 組
resources: ["endpoints", "services"]
# 不要在日志中記錄對(duì)某些非資源 URL 路徑的已認(rèn)證請(qǐng)求。
- level: None
userGroups: ["system:authenticated"]
nonResourceURLs:
- "/api*" # 通配符匹配。
- "/version"
# 在日志中記錄 kube-system 中 configmap 變更的請(qǐng)求消息體。
- level: Request
resources:
- group: "" # core API 組
resources: ["configmaps"]
# 這個(gè)規(guī)則僅適用于 "kube-system" 名字空間中的資源。
# 空字符串 "" 可用于選擇非名字空間作用域的資源。
namespaces: ["kube-system"]
# 在日志中用 Metadata 級(jí)別記錄所有其他名字空間中的 configmap 和 secret 變更。
- level: Metadata
resources:
- group: "" # core API 組
resources: ["secrets", "configmaps"]
# 在日志中以 Request 級(jí)別記錄所有其他 core 和 extensions 組中的資源操作。
- level: Request
resources:
- group: "" # core API 組
- group: "extensions" # 不應(yīng)包括在內(nèi)的組版本。
# 一個(gè)抓取所有的規(guī)則,將在日志中以 Metadata 級(jí)別記錄所有其他請(qǐng)求。
- level: Metadata
# 符合此規(guī)則的 watch 等長時(shí)間運(yùn)行的請(qǐng)求將不會(huì)
# 在 RequestReceived 階段生成審計(jì)事件。
omitStages:
- "RequestReceived"
【】cat /var/log/audit/audit.log#以json格式輸出的
#以json格式輸出的安全jq用來解析json,老版本會(huì)是json
【】yum -y install jq
【】cat /var/log/k8s_audit.log |jq
簡略版配置
【】vi? /etc/kubernetes/audit/audit-policy.yaml#簡略版自定義只記錄pod操作
apiVersion: audit.k8s.io/v1
kind: Policy
# 忽略步驟,不為RequestReceived階段生成審計(jì)日志
omitStages:
- "RequestReceived"
rules:
# 不記錄日志
- level: None
users:
- system:apiserver
- system:kube-controller-manager
- system:kube-scheduler
- system:kube-proxy
- kubelet
# 針對(duì)資源記錄日志
- level: Metadata
resources:
- group: ""
resources: ["pods"]
# - group: "apps"
# resources: ["deployments"]
# 其他資源不記錄日志
- level: None
重啟kubelet以生效文章來源:http://www.zghlxwxcb.cn/news/detail-692562.html
【】systemctl? restart? kubelet#若不生效則刪一下apiserver的pod文章來源地址http://www.zghlxwxcb.cn/news/detail-692562.html
五、收集審計(jì)日志方案:
- 審計(jì)日志文件+filebeat? 比較實(shí)際
- 審計(jì)webhook+logstash
- 審計(jì)webhook+falco
到了這里,關(guān)于kubernetes--kubernetes審計(jì)日志(api訪問日志)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!