Kubernetes1.7 新特性:日志审计变化

2023年 7月 9日 73.7k 0

背景概念

出于安全方面的考虑,Kubernetes提供了日志审计记录,用来记录不同普通用户、管理员和系统中各个组件的日志信息。

Kubernetes日志审计是Kube-apiserver组件的一部分功能,通过日志审计来记录apiserver上面所有请求处理过程。每条审计日志记录包括两行:

1、  请求行:唯一ID、源IP、请求用户、请求资源信息、模拟信息等。

2、  响应行:唯一ID、相应信息代码。

通过唯一ID就可以识别出对应的请求行和响应行。

下面的例子就是admin用户查询default命名空间中pod信息的两行审计日志信息。

  • 2017-03-21T03:57:09.106841886-04:00 AUDIT:id=”c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53″ ip=”127.0.0.1″method=”GET” user=”admin”groups=”\”system:masters\”,\”system:authenticated\””as=”” asgroups=””namespace=”default” uri=”/api/v1/namespaces/default/pods”
  • 2017-03-21T03:57:09.108403639-04:00 AUDIT:id=”c939d2a7-1c37-4ef1-b2f7-4ba9b1e43b53″ response=”200″
  • 1.7 新特性

    我们先来看看1.7版本中日志审计相关的几个核心结构体:

    在Kubernetes 1.7中,新增加了两个结构体,分别是AuditOptions和AuditWebhookOptions。在AuditOptions结构体中通过LogOptions参数来对应之前版本的AuditLogOptions结构体。

    一、AuditLogOptions结构体介绍

    1、  Path参数:如果设置了这个参数,那么所有访问apiserver的请求都会被记录到这个参数指向的文件,也可以设置成“-”,这样表示请求输出到标准输出中。

    2、  MaxAge参数:保存日志审计记录的最大天数,超出保存最大天数的日志审计记录都会被删除掉。

    3、  MaxBackups参数:保存日志审计记录文件的最大个数,超出保存最大个数的日志审计记录都会被删除掉。

    4、  MaxSize参数:一个日志审计记录文件的最大空间,单位是M。

    二、AuditWebhookOptions结构体介绍

    1、  ConfigFile参数:将Kubernetes日志审计结果向外部输出的配置文件。

    2、  Mode参数:将Kubernetes日志审计结果向外部输出模式。在1.7版本中有两种输出模式,batch模式,表示缓存日志审计记录,然后批量发送给外部接收端;blocking模式,表示每条发送给外部接收端,发送的时候apiserver处在阻塞状态。

    三、AuditOptions结构体介绍

    1、  PolicyFile参数:日志审计策略配置文件,通过这个文件可以配置哪些信息会生成日志审计记录。

    2、  LogOptions参数:表示AuditLogOptions结构体。

    3、  WebhookOptions参数:表示AuditWebhookOptions结构体。

    在kubernetes1.7中如果想启用日志审计新的功能,那么需要在启动kube-apiserver组件时,增加一个新的参数: –feature-gates=AdvancedAuditing=true。

    一旦启用了AdvancedAuditing参数,那么kubernetes在日志审计中就可以配置审计策略和审计处理方式。日志审计策略配置文件中可以配置不同审计级别策略,包括:

    1、  None:与此规则匹配的日志审计事件不用被记录。

    2、  Metadata:记录请求的元数据信息,包括用户、时间戳、请求类型等信息。

    3、  Request:记录请求的元数据和请求内容信息。

    4、  RequestResponse:记录请求的元数据、请求内容信息、响应内容信息。

    另外一旦启用了这个参数,日志审计也不会按照之前每条审计日志记录两行信息了。日志审计记录在不同的阶段会记录不同的信息,其中包括:

    1、  RequestReceived阶段:在这个阶段,审计处理程序收到请求后立即生成日志审计事件。

    2、  ResponseStarted阶段:在这个阶段,响应标头被发送出去了,但是响应内容还没有被发送,此日志审计记录在长时间运行的响应时会生成。

    3、  ResponseComplete阶段:在这个阶段,一旦响应内容被发送出去了,那么就会生成日志审计记录。

    4、  Panic阶段:当有错误发生时,会生成日志审计记录。

    新特性例子

    1、  下面的例子是日志审计策略配置文件的配置信息,表示按照Metadata级别记录所有请求信息:

    rules:  
    
    - level: Metadata

    2、  下面的例子是日志审计策略配置文件的配置信息,表示不对用户system:kube-proxy在endpoints和services两种类型资源上的信息进行审计。

    rules:  
    
       - level: None  
    
        users:["system:kube-proxy"]  
    
        verbs: ["watch"]  
    
        resources:  
    
        - group: "" #core API group  
    
          resources:["endpoints", "services"]

    3、  下面的例子是日志审计策略配置文件的配置信息,表示审计表空间kube-system中configmaps资源类型的请求。

    rules:  
    
      # Log the request body ofconfigmap changes in kube-system.  
    
      - level: Request  
    
        resources:  
    
        - group: "" #core API group  
    
          resources:["configmaps"]  
    
        # This rule only appliesto resources in the "kube-system" namespace.  
    
        # The empty string"" can be used to select non-namespaced resources.  
    
        namespaces:["kube-system"]

    4、  下面的例子是设置审计处理方式

    --audit-webhook-config-file=/etc/kubernetes/audit-webhook-kubeconfig  
    
    --audit-webhook-mode=batch

    使用batch模式,向/etc/kubernetes/audit-webhook-kubeconfig文件中配置的服务端发送日志审计信息。

    相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论