[TOC]
Kubernetes 審計(Auditing) 功能提供了與安全相關的、按時間順序排列的記錄集, 記錄每個用戶、使用 Kubernetes API 的應用以及控制面自身引發的活動。
它能幫助集群管理員處理以下問題:
- 發生了什么?
- 什么時候發生的?
- 誰觸發的?
- 活動發生在哪個(些)對象上?
- 在哪觀察到的?
- 它從哪觸發的?
- 活動的后續處理行為是什么?
審計記錄最初產生于 kube-apiserver 內部。每個請求在不同執行階段都會生成審計事件;這些審計事件會根據特定策略 被預處理并寫入后端。策略確定要記錄的內容和用來存儲記錄的后端。 當前的后端支持 `日志文件` 和 `webhook`。
每個請求都可被記錄其相關的 階段(stage)。已定義的階段有:
- `RequestReceived` - 此階段對應審計處理器接收到請求后,并且在委托給 其余處理器之前生成的事件。
- `ResponseStarted` - 在響應消息的頭部發送后,響應消息體發送前生成的事件。 只有長時間運行的請求(例如 watch)才會生成這個階段。
- `ResponseComplete` - 當響應消息體完成并且沒有更多數據需要傳輸的時候。
- `Panic` - 當 panic 發生時生成。
審計日志記錄功能會增加 API server 的內存消耗,因為需要為每個請求存儲審計所需的某些上下文。 此外,內存消耗取決于審計日志記錄的配置。
## 審計策略
審計政策定義了關于應記錄哪些事件以及應包含哪些數據的規則。 審計策略對象結構定義在 audit.k8s.io API 組 處理事件時,將按順序與規則列表進行比較。第一個匹配規則設置事件的 審計級別(Audit Level)。已定義的審計級別有:
- `None` - 符合這條規則的日志將不會記錄。
- `Metadata` - 記錄請求的元數據(請求的用戶、時間戳、資源、動詞等等), 但是不記錄請求或者響應的消息體。
- `Request` - 記錄事件的元數據和請求的消息體,但是不記錄響應的消息體。 這不適用于非資源類型的請求。
- `RequestResponse` - 記錄事件的元數據,請求和響應的消息體。這不適用于非資源類型的請求。
你可以使用 --audit-policy-file 標志將包含策略的文件傳遞給 kube-apiserver。 如果不設置該標志,則不記錄事件。 注意 rules 字段 必須 在審計策略文件中提供。沒有(0)規則的策略將被視為非法配置。
## 審計后端
審計后端實現將審計事件導出到外部存儲。Kube-apiserver 默認提供兩個后端:
- Log 后端,將事件寫入到文件系統
- Webhook 后端,將事件發送到外部 HTTP API
> 這里分析log后端
Log 后端將審計事件寫入 JSONlines 格式的文件。 你可以使用以下 kube-apiserver 標志配置 Log 審計后端:
- `--audit-log-path` 指定用來寫入審計事件的日志文件路徑。不指定此標志會禁用日志后端。- 意味著標準化
- `--audit-log-maxage` 定義保留舊審計日志文件的最大天數
- `--audit-log-maxbackup` 定義要保留的審計日志文件的最大數量
- `--audit-log-maxsize` 定義審計日志文件的最大大小(兆字節)
## 審計策略示例
1. 創建審計策略
```yaml
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
# 所有資源都記錄請求的元數據(請求的用戶、時間戳、資源、動詞等等), 但是不記錄請求或者響應的消息體。
- level: Metadata
# 只有pods資源記錄事件的元數據和請求的消息體,但是不記錄響應的消息體。
- level: Request
resources:
- group: ""
resources: ["pods"]
```
2. 創建log后端審計
在 `kube-apiserver` 服務配置文件中添加以下幾行:
```shell
# 審計策略文件位置
--audit-policy-file=/data/k8s/conf/kube-apiserver-audit.yml \
# 根據文件名中編碼的時間戳保留舊審計日志文件的最大天數。
--audit-log-maxage=3 \
# 輪換之前,審計日志文件的最大大小(以兆字節為單位)
--audit-log-maxsize=100 \
# 審計日志路徑
--audit-log-path=/data/k8s/logs/kubernetes.audit \
```
3. 重啟kube-apiserver服務
```shell
systemctl restart kube-apiserver.service
```
## 參考文章
https://kubernetes.io/zh/docs/reference/command-line-tools-reference/kube-apiserver/
https://kubernetes.io/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-Policy
https://kubernetes.io/zh/docs/reference/config-api/apiserver-audit.v1/#audit-k8s-io-v1-PolicyRule
- 前言
- 架構
- 部署
- kubeadm部署
- kubeadm擴容節點
- 二進制安裝基礎組件
- 添加master節點
- 添加工作節點
- 選裝插件安裝
- Kubernetes使用
- k8s與dockerfile啟動參數
- hostPort與hostNetwork異同
- 應用上下線最佳實踐
- 進入容器命名空間
- 主機與pod之間拷貝
- events排序問題
- k8s會話保持
- 容器root特權
- CNI插件
- calico
- calicoctl安裝
- calico網絡通信
- calico更改pod地址范圍
- 新增節點網卡名不一致
- 修改calico模式
- calico數據存儲遷移
- 啟用 kubectl 來管理 Calico
- calico卸載
- cilium
- cilium架構
- cilium/hubble安裝
- cilium網絡路由
- IP地址管理(IPAM)
- Cilium替換KubeProxy
- NodePort運行DSR模式
- IP地址偽裝
- ingress使用
- nginx-ingress
- ingress安裝
- ingress高可用
- helm方式安裝
- 基本使用
- Rewrite配置
- tls安全路由
- ingress發布管理
- 代理k8s集群外的web應用
- ingress自定義日志
- ingress記錄真實IP地址
- 自定義參數
- traefik-ingress
- traefik名詞概念
- traefik安裝
- traefik初次使用
- traefik路由(IngressRoute)
- traefik中間件(middlewares)
- traefik記錄真實IP地址
- cert-manager
- 安裝教程
- 頒布者CA
- 創建證書
- 外部存儲
- 對接NFS
- 對接ceph-rbd
- 對接cephfs
- 監控平臺
- Prometheus
- Prometheus安裝
- grafana安裝
- Prometheus配置文件
- node_exporter安裝
- kube-state-metrics安裝
- Prometheus黑盒監控
- Prometheus告警
- grafana儀表盤設置
- 常用監控配置文件
- thanos
- Prometheus
- Sidecar組件
- Store Gateway組件
- Querier組件
- Compactor組件
- Prometheus監控項
- grafana
- Querier對接grafana
- alertmanager
- Prometheus對接alertmanager
- 日志中心
- filebeat安裝
- kafka安裝
- logstash安裝
- elasticsearch安裝
- elasticsearch索引生命周期管理
- kibana安裝
- event事件收集
- 資源預留
- 節點資源預留
- imagefs與nodefs驗證
- 資源預留 vs 驅逐 vs OOM
- scheduler調度原理
- Helm
- Helm安裝
- Helm基本使用
- 安全
- apiserver審計日志
- RBAC鑒權
- namespace資源限制
- 加密Secret數據
- 服務網格
- 備份恢復
- Velero安裝
- 備份與恢復
- 常用維護操作
- container runtime
- 拉取私有倉庫鏡像配置
- 拉取公網鏡像加速配置
- runtime網絡代理
- overlay2目錄占用過大
- 更改Docker的數據目錄
- Harbor
- 重置Harbor密碼
- 問題處理
- 關閉或開啟Harbor的認證
- 固定harbor的IP地址范圍
- ETCD
- ETCD擴縮容
- ETCD常用命令
- ETCD數據空間壓縮清理
- ingress
- ingress-nginx header配置
- kubernetes
- 驗證yaml合法性
- 切換KubeProxy模式
- 容器解析域名
- 刪除節點
- 修改鏡像倉庫
- 修改node名稱
- 升級k8s集群
- 切換容器運行時
- apiserver接口
- 其他
- 升級內核
- k8s組件性能分析
- ETCD
- calico
- calico健康檢查失敗
- Harbor
- harbor同步失敗
- Kubernetes
- 資源Terminating狀態
- 啟動容器報錯