作者 | 阿里云智能事业群技术专家 元乙
当前 Kubernetes(K8s)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能、稳定性提升等,正如 Kubernetes 项目创始人和维护者谈到,Kubernetes 已经不再是 buzzword,当我们谈起它的时候,变得越发的 boring,它作为成熟项目已经走向了 IT 基础设施的中台,为适应更大规模的生产环境和更多场景的应用不断延展迭代。
现在 ,我们更加专注于如何利用 K8s 平台进行 CI/CD、发布管理、监控、日志管理、安全、审计等等。本文我们将介绍如何利用 K8s 中的 Audit 事件日志来对平台进行安全监控和审计分析。
IT 设施/系统是当今每个互联网公司最为重要的资产之一,除了成本外,这里承载了所有的用户访问,同时保存了非常多的用户、订单、交易、身份等敏感信息。因此每个公司都有必要确保 IT 设施/系统是可靠、安全、未泄漏的。
其中必不可少的环节是审计,通过审计我们可以知道系统在任一时间段内发生的事件以及对应关联的内外部人员、系统,在损失发生后能够立即知道具体是谁、在哪个时间对系统做了什么事,同时基于审计事件的实时分析和告警,能够提前发现问题并及时止损。
Kubernetes 审计日志概览
Kubernetes 作为容器编排领域的领导者、未来 PaaS 平台的标准基座,在 IT 领域有着举足轻重的影响,因此审计功能也是 Kubernetes 必不可少的安全功能之一。
Kubernetes 在 1.7 版本中发布了审计(Audit)日志功能,审计(Audit)提供了安全相关的时序操作记录(包括时间、来源、操作结果、发起操作的用户、操作的资源以及请求/响应的详细信息等),通过审计日志,我们能够非常清晰地知道 K8s 集群到底发生了什么事情,包括但不限于:
当前/历史上集群发生了哪些变更事件;
这些变更操作者是谁,是系统组件还是用户,是哪个系统组件/用户;
重要变更事件的详细内容是什么,比如修改了 POD 中的哪个参数;
事件的结果是什么,成功还是失败;
操作用户来自哪里,集群内还是集群外。
日志格式与策略
K8s 中的审计日志是标准的 JSON 格式,APIServer 会根据具体的日志策略将对应的审计日志保存本地,并可以设置最大保存周期、时间、轮转策略等。
关于审计日志格式和策略的详细介绍,可以参考Audit官方文档(https://kubernetes.io/docs/tasks/debug-application-cluster/audit/)。
日志记录阶段
审计日志根据日志策略可以选择在事件执行的某个阶段记录,目前支持的事件阶段有:
RequestReceived
- 接收到事件且在分配给对应 handler 前记录;ResponseStarted
- 开始响应数据的 Header 但在响应数据 Body 发送前记录,这种一般应用在持续很长的操作事件,例如 watch 操作;