当前Kubernetes(K8S)已经成为事实上的容器编排标准,你们关注的重点也再也不是最新发布的功能、稳定性提高等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经再也不是buzzword,当咱们谈起它的时候,变得愈加的boring,它做为成熟项目已经走向了IT基础设施的中台,为适应更大规模的生产环境和更多场景的应用不断延展迭代。html
而如今咱们更加专一于如何利用K8S平台进行CICD、发布管理、监控、日志管理、安全、审计等等。本期咱们将介绍如何利用K8S中的Audit事件日志来对平台进行安全监控和审计分析。
node
IT设施/系统是当今每一个互联网公司最为重要的资产之一,除了成本外,这里承载了全部的用户访问,同时保存了很是多的用户、订单、交易、身份等敏感信息。所以每一个公司都有必要确保IT设施/系统是可靠、安全、未泄漏的。其中必不可少的环节是审计,经过审计咱们能够知道系统在任一时间段内发生的事件以及对应关联的内外部人员、系统,在损失发生后可以当即知道具体是谁、在哪一个时间对系统作了什么事,同时基于审计事件的实时分析和告警,可以提早发现问题并及时止损。api
Kubernetes做为容器编排领域的领导者、将来PAAS平台的标准基座,在IT领域有着举足轻重的影响,所以审计功能也是Kubernetes比不可少的安全功能之一。
Kubernetes在1.7版本中发布了审计(Audit)日志功能,审计(Audit)提供了安全相关的时序操做记录(包括时间、来源、操做结果、发起操做的用户、操做的资源以及请求/响应的详细信息等),经过审计日志,咱们可以很是清晰的知道K8S集群到底发生了什么事情,包括但不限于:安全
K8S中的审计日志是标准的JSON格式,APIServer会根据具体的日志策略将对应的审计日志保存本地,并能够设置最大保存周期、时间、轮转策略等。
关于审计日志格式和策略的详细介绍,能够参考Audit官方文档。微信
审计日志根据日志策略能够选择在事件执行的某个阶段记录,目前支持的事件阶段有:网络
RequestReceived
- 接收到事件且在分配给对应handler前记录。ResponseStarted
- 开始响应数据的Header但在响应数据Body发送前记录,这种通常应用在持续很长的操做事件,例如watch操做。ResponseComplete
- 事件响应完毕后记录。Panic
- 内部出现panic时记录。审计日志根据日志策略能够选择事件保存的等级,根据等级不一样,APIServer记录日志的详细程度也不一样。目前支持的事件等级有:app
None
- 不记录日志.Metadata
- 只记录Request的一些metadata (例如user, timestamp, resource, verb等),但不记录Request或Response的body。Request
- 记录Request的metadata和body。RequestResponse
- 最全记录方式,会记录全部的metadata、Request和Response的Body。APIServer支持对每类不一样的资源设置不一样的审计日志策略,包括日志记录阶段以及日志记录等级,目前官方以及不少云厂商都会提供日志策略,通常都遵循如下原则:性能
目前对于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审计日志与日志服务SLS打通,推出了一站式的Kubernetes审计日志方案,让每一个用户都可以以图形化报表的方式进行集群的审计分析。
ui
得益于阿里云日志服务的强大功能,该方案不只大大下降了K8S审计日志分析的门槛,从分析能力、可视化、交互方式、性能等各方面都具备很强的优点:
咱们默认为Kubernetes集群建立了3个报表,分别是审计中心概览、资源操做概览和资源详细操做列表:
资源操做概览展现Kubernetes集群中常见的计算资源、网络资源以及存储资源的操做统计信息,操做包括建立、更新、删除、访问。其中
全部的报表均支持设置时间范围、子帐号ID、Namespace等进行自定义过滤并实时刷新,经过这些报表,集群管理员只用点击鼠标就能够获取到:
这里咱们选择一个图标作详细说明:上图是Kubernetes资源操做列表,这个报表彻底是交互式的,用户能够指定一种资源(好比Deployment、Ingress、Secret等),表报会自动渲染出关于这个资源的全部操做,功能包括:
例如须要对公网访问设置告警策略:出现公网访问时当即告警,则只需3步就可完成设置:
若是容器服务Kubernetes版提供的默认报表没法知足您的分析需求,能够直接使用日志服务SQL、仪表盘等功能进行自定义的分析和可视化。
为了让你们能够体验Kubernetes审计日志功能,咱们特别开通了体验中心,你们能够经过 https://promotion.aliyun.com/ntms/act/logdoclist.html 进入,该页面提供了很是多和Kubernetes相关的报表。
原文连接 更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight