Kubernetes审计日志功能

作者: VienFu | 来源:发表于2020-03-12 11:36 被阅读0次

    1. 背景

    kubernetes 1.6版本开始支持审计功能,到1.12版本审计功能GA,而本文则是针对kubernetes 1.15+简单说明其审计功能的开启和配置。那何为审计功能呢,审计功能又有什么作用呢?

    如下是摘自Kubernetes官方文档的一段话:

    Kubernetes 审计功能提供了与安全相关的按时间顺序排列的记录集,记录单个用户、管理员或系统其他组件影响系统的活动顺序。 它能帮助集群管理员处理以下问题:

    • 发生了什么?
    • 什么时候发生的?
    • 谁触发的?
    • 为什么发生?
    • 在哪观察到的?
    • 它从哪触发的?
    • 它将产生什么后果?

    2. 审计功能开启

    Kubernetes的审计功能是通过kube-apiserver开启,具体是主要设置kube-apiserver的两个启动参数audit-policy-fileaudit-log-path,如果是kubeadm搭建的kubernetes集群,则修改kube-apiserver的配置文件/etc/kubernetes/manifests/kube-apiserver.yaml即可,比如:

    至于这两个参数以及如上截图中其他审计相关的参数的具体意义,下文会进一步说明。

    2.1 审计策略

    审计策略定义了kubernetes哪些资源的事件被记录以及被记录事件的数据规则,对应上面截图中参数audit-policy-file,文件配置会涉及到两个十分重要的名词解释:审计阶段和审计级别。

    2.1.1 审计阶段

    及记录事件的时机,这里分为四种类型:

    • RequestReceived:一旦接收到请求即刻记录审计事件;
    • ResponseStarted:响应头发出,响应消息体未发出之前,一般适用于长连接或者耗时任务的场景;
    • ResponseComplete:响应消息体完成;
    • Panic:出现panic

    2.1.2 审计级别

    代表记录审计日志的完整程度,常见的也有四种:

    • None:不记录审计日志;
    • Metadata:记录请求的原子数据信息比如请求的user、method、时间、资源类型等,但不包括请求体和响应体;
    • Request:记录包括Metadata和请求体,但不包括响应体;
    • RequestResponse:记录包括Metadata、请求体、响应体;

    当然,除了上述两个关键字之外,审计策略还应包括具体的规则(rules),比如请求的user、method、resource等,并且这里规则的配置跟kubernetes role规则的写法基本一致,举一个简单的审计策略配置的例子,只针对pod的创建和删除记录审计日志:

    # cat /etc/kubernetes/pki/audit-policy.yaml
    apiVersion: audit.k8s.io/v1beta1  # 必须字段,固定写法
    kind: Policy  # 必须字段,固定写法
    omitStages:
      - "RequestReceived"  # 审计阶段
    rules:  # rule按顺序匹配
      - level: Request  # 审计级别
        verbs:
        - create
        - delete
        resources:
        - group: ""
          resources:
          - pods
      - level: None 
    

    2.2 审计后端

    审计后端则实现将审计日志导出,支持两种方式:Log后端webhook后端,后一种方式此文不做展开,简单说明一下Log后端

    2.2.1 配置参数

    其中最重要的参数则对应上面截图中参数audit-log-path,即审计日志写入的文件路径,如果不设置此参数则表示禁用Log后端,如果设置-则表示标准输出(比如stdout、strerr形式的输出),此时可以通过kubectl logs命令打印日志输出。

    还有一些参数比如:

    • audit-log-maxage:日志保留的最大天数;
    • audit-log-maxbackup:日志文件保留的最大数量;
    • audit-log-maxsize:单个日志文件的最大容量,超过则轮转记录到一个新文件;
    • audit-log-format:日志记录的格式,比如json等;

    2.2.2 审计日志采集

    对于将日志保存到文件中,默认是无法采集到日志信息,实际环境中可以采用sidecar或者其他三方代理的形式比如fluentd,这儿呢为了做下简单测试直接使用了卷挂载的形式(将pod容器中文件映射到本地),即在kube-apiserver添加如下配置:

    ...
        VolumeMounts:
        - mountPath: /var/log
          name: audit-log
      volumes:
      - hostPath:
          path: /var/log/kubernetes
          type: DirectoryOrCreate
    ...
    

    保存kube-apiserver配置则会自动重启apiserver,待重启完成后可通过手动删除、创建一个pod来观察审计日志的输出:

    相关文章

      网友评论

        本文标题:Kubernetes审计日志功能

        本文链接:https://www.haomeiwen.com/subject/hxoyjhtx.html