天天看點

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

前言

目前Kubernetes(K8S)已經成為事實上的容器編排标準,大家關注的重點也不再是最新釋出的功能、穩定性提升等,正如Kubernetes項目創始人和維護者談到,Kubernetes已經不再是buzzword,當我們談起它的時候,變得越發的boring,它作為成熟項目已經走向了IT基礎設施的中台,為适應更大規模的生産環境和更多場景的應用不斷延展疊代。

而現在我們更加專注于如何利用K8S平台進行CICD、釋出管理、監控、日志管理、安全、審計等等。本期我們将介紹如何利用K8S中的Audit事件日志來對平台進行安全監控和審計分析。

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

IT設施/系統是當今每個網際網路公司最為重要的資産之一,除了成本外,這裡承載了所有的使用者通路,同時儲存了非常多的使用者、訂單、交易、身份等敏感資訊。是以每個公司都有必要確定IT設施/系統是可靠、安全、未洩漏的。其中必不可少的環節是審計,通過審計我們可以知道系統在任一時間段内發生的事件以及對應關聯的内外部人員、系統,在損失發生後能夠立即知道具體是誰、在哪個時間對系統做了什麼事,同時基于審計事件的實時分析和告警,能夠提前發現問題并及時止損。

Kubernetes審計日志概覽

Kubernetes作為容器編排領域的上司者、未來PAAS平台的标準基座,在IT領域有着舉足輕重的影響,是以審計功能也是Kubernetes比不可少的安全功能之一。

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

Kubernetes在1.7版本中釋出了審計(Audit)日志功能,審計(Audit)提供了安全相關的時序操作記錄(包括時間、來源、操作結果、發起操作的使用者、操作的資源以及請求/響應的詳細資訊等),通過審計日志,我們能夠非常清晰的知道K8S叢集到底發生了什麼事情,包括但不限于:

  1. 目前/曆史上叢集發生了哪些變更事件。
  2. 這些變更操作者是誰,是系統元件還是使用者,是哪個系統元件/使用者。
  3. 重要變更事件的詳細内容是什麼,比如修改了POD中的哪個參數。
  4. 事件的結果是什麼,成功還是失敗。
  5. 操作使用者來自哪裡,叢集内還是叢集外。
最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

日志格式與政策

K8S中的審計日志是标準的JSON格式,APIServer會根據具體的日志政策将對應的審計日志儲存本地,并可以設定最大儲存周期、時間、輪轉政策等。

關于審計日志格式和政策的詳細介紹,可以參考

Audit官方文檔

日志記錄階段

審計日志根據日志政策可以選擇在事件執行的某個階段記錄,目前支援的事件階段有:

  • RequestReceived

     - 接收到事件且在配置設定給對應handler前記錄。
  • ResponseStarted

     - 開始響應資料的Header但在響應資料Body發送前記錄,這種一般應用在持續很長的操作事件,例如watch操作。
  • ResponseComplete

     - 事件響應完畢後記錄。
  • Panic

     - 内部出現panic時記錄。

日志記錄等級

審計日志根據日志政策可以選擇事件儲存的等級,根據等級不同,APIServer記錄日志的詳細程度也不同。目前支援的事件等級有:

  • None

     - 不記錄日志.
  • Metadata

     - 隻記錄Request的一些metadata (例如user, timestamp, resource, verb等),但不記錄Request或Response的body。
  • Request

     - 記錄Request的metadata和body。
  • RequestResponse

     - 最全記錄方式,會記錄所有的metadata、Request和Response的Body。

日志記錄政策

APIServer支援對每類不同的資源設定不同的審計日志政策,包括日志記錄階段以及日志記錄等級,目前官方以及很多雲廠商都會提供日志政策,一般都遵循以下原則:

  • 在收到請求後不立即記錄日志,當傳回體header發送後才開始記錄。
  • 對于大量備援的kube-proxy watch請求,kubelet和system:nodes對于node的get請求,kube元件在kube-system下對于endpoint的操作,以及apiserver對于namespaces的get請求等不作審計。
  • 對于/healthz,/version, /swagger*等隻讀url不作審計。
  • 對于可能包含敏感資訊或二進制檔案的secrets,configmaps,tokenreviews接口的日志等級設為metadata,該level隻記錄請求事件的使用者、時間戳、請求資源和動作,而不包含請求體和傳回體。
  • 對于一些如authenticatioin、rbac、certificates、autoscaling、storage等敏感接口,根據讀寫記錄相應的請求體和傳回體。

審計日志分析

審計日志分析現狀

目前對于K8S上的APIServer審計日志的支援,大部分廠商還停留在政策設定或日志采集的階段,最多隻支援将資料采集到日志中心,配合索引進行關鍵詞查詢。

下圖是一個Level為Metadata的審計日志記錄,各類字段有20多個,如果是Level為Request或RequestResponse的日志字段會更多,可能達到上百個。要實作審計日志分析,必須了解這些字段的含義,此外還需了解每個字段的取值範圍以及每種取值對應的含義,學習代價非常之大。

{
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1beta1",
  "metadata": {
    "creationTimestamp": "2019-01-14T07:48:38Z"
  },
  "level": "Metadata",
  "timestamp": "2019-01-14T07:48:38Z",
  "auditID": "cf2915c0-0b43-4e1d-9d66-fbae481a0e0a",
  "stage": "ResponseComplete",
  "requestURI": "/apis/authentication.k8s.io/v1beta1?timeout=32s",
  "verb": "get",
  "user": {
    "username": "system:serviceaccount:kube-system:generic-garbage-collector",
    "uid": "cd3fbe04-0508-11e9-965f-00163e0c7cbe",
    "groups": [
      "system:serviceaccounts",
      "system:serviceaccounts:kube-system",
      "system:authenticated"
    ]
  },
  "sourceIPs": [
    "192.168.0.249"
  ],
  "responseStatus": {
    "metadata": {},
    "code": 200
  },
  "requestReceivedTimestamp": "2019-01-14T07:48:38.214979Z",
  "stageTimestamp": "2019-01-14T07:48:38.215102Z",
  "annotations": {
    "authorization.k8s.io/decision": "allow",
    "authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:discovery\" of ClusterRole \"system:discovery\" to Group \"system:authenticated\""
  }
}      

阿裡雲Kubernetes審計日志方案

為盡可能減少使用者對于審計日志的分析代價,阿裡雲容器服務将Kubernetes審計日志與日志服務SLS打通,推出了一站式的Kubernetes審計日志方案,讓每個使用者都能夠以圖形化報表的方式進行叢集的審計分析。

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔
  1. 為盡可能保證叢集安全性,阿裡雲容器服務Kubernetes預設為使用者打開了APIServer審計日志并設定了較為安全且通用的審計日志政策,所有(符合審計政策)使用者、元件對APIServer的通路都會被記錄下來;
  2. Kubernetes叢集中預置的日志元件Logtail會将APIServer的審計日志自動采集到阿裡雲日志服務;
  3. 日志服務預設會為APIServer的審計日志建立索引、報表等;
  4. 容器服務控制台已經和日志服務打通,叢集管理者可以直接在控制台上檢視審計日志的各項報表以及名額;
  5. 若叢集管理者還有設定告警、自定義分析等需求,可直接登入日志服務控制台進行操作。

得益于阿裡雲日志服務的強大功能,該方案不僅大大降低了K8S審計日志分析的門檻,從分析能力、可視化、互動方式、性能等各方面都具有很強的優勢:

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

審計日志方案概覽

審計報表

我們預設為Kubernetes叢集建立了3個報表,分别是審計中心概覽、資源操作概覽和資源詳細操作清單:

  1. 審計中心概覽展示Kubernetes叢集中的事件整體概覽資訊以及重要事件(公網通路、指令執行、删除資源、通路保密字典等)的詳細資訊。
  2. 資源操作概覽展示Kubernetes叢集中常見的計算資源、網絡資源以及存儲資源的操作統計資訊,操作包括建立、更新、删除、通路。其中
  3. 計算資源包括:Deployment、StatefulSet、CronJob、DaemonSet、Job、Pod;
  4. 網絡資源包括:Service、Ingress;
  5. 存儲資源包括:ConfigMap、Secret、PersistentVolumeClaim。
  6. 資源詳細操作清單用于展示Kubernetes叢集中某類資源的詳細操作清單,通過選擇或輸入指定的資源類型進行實時查詢,該表報會顯示:資源操作各類事件的總數、namespace分布、成功率、時序趨勢以及詳細操作清單等。

所有的報表均支援設定時間範圍、子賬号ID、Namespace等進行自定義過濾并實時重新整理,通過這些報表,叢集管理者隻用點選滑鼠就可以擷取到:

  1. 最近任一時間段内建立/删除/修改了哪些資源;
  2. 事件的時序趨勢如何;
  3. 具體是哪個子賬号操作了資源;
  4. 操作的IP源是否為公網、地域分布如何、來源IP是否高危;
  5. 具體操作的事件ID、時間、結果、涉及的資源等詳細日志;
  6. 哪個子賬号登入了容器或通路了保密字典...
最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔
最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

這裡我們選擇一個圖示做詳細說明:上圖是Kubernetes資源操作清單,這個報表完全是互動式的,使用者可以指定一種資源(比如Deployment、Ingress、Secret等),表報會自動渲染出關于這個資源的所有操作,功能包括:

  1. 左上角會顯示對這個資源操作的使用者數、涉及Namespace數、涉及方法數、請求成功率等概覽資訊;
  2. 每種不同操作(增、删、改、查)的數量以及Namespace分布,用來确定涉及的Namespace;
  3. 各類操作的時序分布(按小時),數量較多的點一般都是釋出或系統被攻擊的時間點;
  4. 各類操作的詳細清單,包括:事件ID、操作事件、操作資源、操作結果、賬号、位址;
  5. 圖表中所有的事件ID都可以點選并跳轉到原始的日志,檢視具體和這個事件ID關聯的詳細日志;
  6. 圖表中所有的IP位址都可以點選并跳轉到外部的IP查詢庫,查詢該IP對應的地理位置、營運商等資訊;
  7. 圖表還支援根據賬号、namespace、請求碼等過濾,比如對某個使用者進行審計時,可以過濾子賬号,隻關心該使用者的操作。

自定義告警

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

例如需要對公網通路設定告警政策:出現公網通路時立即告警,則隻需3步就可完成設定:

  1. 在審計報表的公網通路圖表中點選右上角進階選項-建立告警
  2. 填入告警名稱、事件、判斷條件
  3. 填入告警通知方式以及通知内容

自定義分析

如果容器服務Kubernetes版提供的預設報表無法滿足您的分析需求,可以直接使用日志服務SQL、儀表盤等功能進行自定義的分析和可視化。

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

嘗鮮

為了讓大家可以體驗Kubernetes審計日志功能,我們特别開通了體驗中心,大家可以通過 

https://promotion.aliyun.com/ntms/act/logdoclist.html

 進入,該頁面提供了非常多和Kubernetes相關的報表。

最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

參考文檔

  1. kubernetes auditing
  2. Kubernetes 的審計日志和采集
  3. 阿裡雲容器服務Kubernetes審計日志
  4. 阿裡雲日志服務
  5. 阿裡雲容器服務Kubernetes版
最全Kubernetes審計日志方案前言Kubernetes審計日志概覽審計日志分析審計日志方案概覽嘗鮮參考文檔

繼續閱讀