简介
集群审计是基于 Kubernetes Audit 对 kube-apiserver 产生的可配置策略的 JSON 结构日志的记录存储及检索功能。本功能记录了对 kube-apiserver 的访问事件,会按顺序记录每个用户、管理员或系统组件影响集群的活动。
功能优势
集群审计功能提供了区别于 metrics 的另一种集群观测维度。开启集群审计后,Kubernetes 可以记录每一次对集群操作的审计日志。每一条审计日志是一个 JSON 格式的结构化记录,包括元数据(metadata)、请求内容(requestObject)和响应内容(responseObject)三个部分。其中元数据(包含了请求的上下文信息,例如谁发起的请求、从哪里发起的、访问的 URI 等信息)一定会存在,请求和响应内容是否存在取决于审计级别。通过日志可以了解到以下内容:集群里发生的活动。活动的发生时间及发生对象。活动的触发时间、触发位置及观察点。活动的结果以及后续处理行为。
阅读审计日志
{ "kind":"Event", "apiVersion":"audit.k8s.io/v1", "level":"RequestResponse", "auditID":0a4376d5-307a-4e16-a049-24e017******, "stage":"ResponseComplete", // 发生了什么 "requestURI":"/apis/apps/v1/namespaces/default/deployments", "verb":"create", // 谁发起的 "user":{ "username":"admin", "uid":"admin", "groups":[ "system:masters", "system:authenticated" ] }, // 从哪里发起 "sourceIPs":[ "10.0.6.68" ], "userAgent":"kubectl/v1.16.3 (linux/amd64) kubernetes/ald64d8", // 发生了什么 "objectRef":{ "resource":"deployments", "namespace":"default", "name":"nginx-deployment", "apiGroup":"apps", "apiVersion":"v1" }, // 结果是什么 "responseStatus":{ "metadata":{ }, "code":201 }, // 请求及返回具体信息 "requestObject":Object{...}, "responseObject":Object{...}, // 什么时候开始/结束 "requestReceivedTimestamp":"2020-04-10T10:47:34.315746Z", "stageTimestamp":"2020-04-10T10:47:34.328942Z", // 请求被接收/拒绝的原因是什么 "annotations":{ "authorization.k8s.io/decision":"allow", "authorization.k8s.io/reason":"" }}
TKE 集群审计策略
审计级别(level)
和一般日志不同,kubernetes 审计日志的级别更像是一种 verbose 配置,用来标示记录信息的详细程度。一共有4个级别,可参考以下表格内容:
参数 | 说明 |
None | 不记录。 |
Metadata | 记录请求的元数据(例如:用户、时间、资源、操作等),不包括请求和响应的消息体。 |
Request | 除了元数据外,还包括请求消息体,不包括响应消息体。 |
RequestResponse | 记录所有信息,包括元数据以及请求、响应的消息体。 |
审计阶段(stage)
记录日志可以发生在不同的阶段,参考以下表格内容:
参数 | 说明 |
RequestReceived | 一收到请求就记录。 |
ResponseStarted | 返回消息头发送完毕后记录,只针对 watch 之类的长连接请求。 |
ResponseComplete | 返回消息全部发送完毕后记录。 |
Panic | 内部服务器出错,请求未完成。 |
TKE 审计策略
TKE 默认收到请求即会记录审计日志,且大部分的操作会记录 RequestResponse 级别的审计日志。但也会存在如下情况:get、list 和 watch 会记录 Request 级别的日志。针对 secrets 资源、configmaps 资源或 tokenreviews 资源的请求会在 Metadata 级别记录。以下请求将不会进行记录日志:system:kube-proxy
发出的监视 endpoints 资源、services 资源或 services/status 资源的请求。system:unsecured
发出的针对 kube-system 命名空间中 configmaps 资源的 get 请求。kubelet 发出的针对 nodes 资源或 nodes/status 资源的 get 请求。system:nodes
组中的任何身份发出的针对 nodes 资源或 nodes/status 资源的 get 请求。system:kube-controller-manager
、system:kube-scheduler
或 system:serviceaccount:endpoint-controller
发出的针对 kube-system 命名空间中 endpoints 资源的 get 和 update 请求。system:apiserver
发出的针对 namespaces 资源、namespaces/status 资源或 namespaces/finalize 资源的 get 请求。对与 /healthz*
、/version
或 /swagger*
匹配的网址发出的请求。
操作步骤
开启集群审计
注意开启集群审计功能需要重启 kube-apiserver ,建议不要频繁开关。独立集群会占用 Master 节点约1Gib本地存储,请保证 Master 节点存储充足。1. 登录 容器服务控制台。2. 选择左侧导航栏中的运维功能管理,在运维功能管理页面上方选择地域和集群类型。3. 单击希望开启集群审计的集群右侧的设置。如下图所示:

4. 在设置功能页面,单击集群审计功能右侧的编辑。如下图所示:

5. 勾选开启集群审计,选择存储审计日志的日志集和日志主题,推荐选择自动创建日志主题。

6. 单击确定即可开启集群审计功能。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠
转转请注明出处:https://www.yunxiaoer.com/147720.html