天天看點

Kubernetes 的審計日志和采集

基礎操作

一個正常運作的 Kubernetes 叢集,除了利用通路控制對叢集操作的許可進行限制之外,對于操作過程的跟蹤審計也是比不可少的,圍繞不同的實體,例如使用者、節點以及各種工作負載進行觀測是很有必要的。Kubernetes 的 API Server 提供了審計日志支援,利用審計日志的方式對系統内的操作進行記錄,這裡我們可以沿用推薦的 Elastic Search + Fluentd 對審計

日志

進行采集存儲,最終使用 Kibana 或者其他支援 ES 查詢的工具對關鍵資源或使用者進行通路跟蹤。

首先要啟用 API Server 的審計功能。Kubernetes 提供了四個基礎參數來定義審計功能:

  • audit-log-path 啟用審計日志,并将日志内容寫入指定檔案,“-” 代表 stdout。
  • audit-log-maxage 日志檔案的最大儲存天數,根據檔案名中的日期進行确定。
  • audit-log-maxbackup 最多儲存日志檔案的數量。
  • audit-log-maxsize 最大檔案尺寸,超過尺寸會被翻轉。機關是 MB,預設為 100MB。

例如:

--audit-log-path=/var/log/kubernetes/kubernetes.audit \
--audit-log-maxage=7 \
--audit-log-maxbackup=4 \
--audit-log-maxsize=10      

在 Kubernetes API Server 的啟動參數中加入這些開關之後,重新啟動服務。

這時我們就可以看到檔案/var/log/kubernetes/kubernetes.audit已經生成。利用 tail 指令看看他的結構和内容,例如請求内容是這樣的:

2017-08-30T16:28:35.485818099+08:00 AUDIT: id="ebc47b7b-c4fe-4a9a-861c-d9686903cec4" ip="127.0.0.1" method="GET" user="system:apiserver" groups="\"system:masters\"" as="<self>" asgroups="<lookup>" namespace="<none>" uri="/apis/admissionregistration.k8s.io/v1alpha1/initializerconfigurations"      

而響應内容格式如下:

2017-08-30T16:28:35.486131325+08:00 AUDIT: id="ebc47b7b-c4fe-4a9a-861c-d9686903cec4" response="404"      

我們本文中暫時隻對請求内容進行進一步解析,響應内容可以通過加入第二格式的方式進行采集。内容中的id字段,可以看作是會話 id,用于連接配接請求和響應。

根據上述文本内容,可以開始 Fluentd 檔案的編寫。請求和響應的内容都很規則,簡單的正規表達式即可完成解析,例如我寫的是這樣的:

<source>
 type tail
 format /^(?<time>\d.*?)\s+(?<action>\w+).\s+id=\"(?<id>.*?)\"\s+ip=\"(?<ip>.*?)\"\s+method=\"(?<method>.*?)\"\s+user=\"(?<user>.*?)\"\s+groups=(?<groups>.*?)\s+as=\"(?<as>.*?)\"\s+asgroups=\"(?<asgroups>.*?)\"\s+namespace=\"(?<namespace>.*?)\"\s+uri=\"(?<uri>.*?)\"$/
 path /var/log/kubernetes/kubernetes.audit
 pos_file /var/log/audit.pos
 time_format %Y-%m-%dT%H:%M:%S.%N%z
 tag audit.response
</source>      

将這一部分内容加入到 Fluentd 配置之中去,啟動抓取。日志入庫之後,我們就可以對指定使用者或者資源進行查詢,獲知他的黑曆史了,例如我們要查找使用者admin的操作曆史:

{ "query": { "match": { "user": { "query": "admin", "type": "phrase" } } } }      

在 Kibana 中執行查詢,會看到類似内容(如果所在叢集沒有該使用者,可以替換為 system:apiserver等内置使用者進行測試):

利用解析出的各個字段,可以比較清楚的看到什麼人,在什麼時間,對什麼對象進行了什麼操作。

Kubernetes 的審計日志和采集

進階審計

在 Kubernetes 1.7 中新增了 Advanced audit 特性(Alpha),可以對審計内容、以及後續處理進行定義。

  • 首先加入了審計政策的支援,可以使用行為,動作等條件進行限制,過濾掉無需考慮的審計内容。
  • 存儲後端在日志之外,還增加了 Web Hook 的支援,可以直接将審計内容釋出到指定的 Web 服務中。

本文轉自中文社群-

Kubernetes 的審計日志和采集