为AKS VMSS配置主机级审计日志记录

本文详细介绍了如何在Azure Kubernetes Service (AKS)的虚拟机规模集(VMSS)上启用和配置Linux审计日志子系统auditd,以监控工作节点和容器内核级别的活动,包括进程创建、文件访问和命令行活动等。

为AKS VMSS配置主机级审计日志记录

警告
本文档中的信息截至发布日期(2023年3月)是准确的,未来可能会有变化。

与Kubernetes控制平面日志提供集群高级操作可见性不同,在集群上启用auditd日志记录可以让您了解AKS工作节点和容器内核级别的活动。这包括进程创建、文件访问和命令行活动等,对于发现集群上异常的命令行活动和执行程序非常有价值。与容器级日志记录不同,这为您提供了底层工作节点上运行的负载的可见性,而不仅仅是运行在其上的容器化负载(包括容器逃逸和其他漏洞利用)。它具有高度可配置性,特别是在运行多租户集群时非常有价值。

要了解Linux主机级审计日志记录(和Kubernetes控制平面日志记录)如何为集群提供有用的可见性,请查看我们在Azure Kubernetes Service (AKS)威胁狩猎博客文章和Jupyter笔记本中提供的威胁狩猎查询。

主机级审计日志记录管道

主机级审计日志记录利用多个Linux工具捕获审计日志并将其发送到Log Analytics工作区进行审查。

使用的组件包括:

  • auditd:Linux审计系统的守护进程。守护进程写入磁盘的审计事件由auditd.rules中定义的规则配置。
  • audisp:审计事件多路复用器,可用于将auditd事件数据分发到像syslog这样的数据收集服务器。
  • syslog:将日志转发到Linux的Log Analytics代理(OMS)。可以通过Azure门户或管理主机上的配置文件来配置syslog转发的事件的设施和严重性。
  • auoms:Microsoft的审计收集工具,可以使用auoms配置中定义的处理规则来收集和过滤auditd/audisp事件数据。
  • Log Analytics工作区:您可以使用Kusto查询语言(KQL)探索来自Azure资源和服务的遥测数据。

如何在AKS VMSS上启用auditd日志记录

警告
以下内容指导您完成在AKS集群上设置auditd日志记录的手动步骤。但是,这需要在集群中的每个工作节点上安装auditd,并且在集群自动扩展后配置将被删除。为避免这种情况,我们建议您使用aks-auditd自动在集群上设置此日志记录,或使用自定义脚本扩展。aks-auditd还支持节点重新映像和自动扩展,而手动配置不支持。

  1. 通过运行以下命令在AKS集群VMSS上启用Linux Operations Management Suite (OMS)代理(auoms):

    1
    2
    3
    4
    5
    6
    7
    
    az vmss extension set \
      --resource-group $RESOURCE_GROUP \
      --vmss-name $VMSS_NAME \
      --name OmsAgentForLinux \
      --publisher Microsoft.EnterpriseCloud.Monitoring \
      --protected-settings '{\"workspaceKey\":\"<KEY>\"}' \
      --settings '{\"workspaceId\":\"<ID>",\"skipDockerProviderInstall\":true}'
    

    集群的vmss-name以aks-agentpool开头,并属于以MC_开头的管理资源组。

    workspaceId和workspaceKey可以在Log Analytics工作区的“代理管理”选项卡中找到。workspaceKey对应于“主键”。

  2. 通过Azure门户触发VM更新(选择每个实例并选择升级)。

  3. 在VMSS工作节点上安装auditd。为此,您需要部署或获取一个在集群上运行的具有访问底层工作节点文件系统和进程ID命名空间权限的特权Pod。您可以通过以下方式实现:

    • 部署一个Pod,其规范将hostPath卷挂载到容器环境中。
    • 在Pod规范中包含securityContext字段并启用特权模式。
    • 通过包含hostPID字段并启用它来配置主机进程ID命名空间共享。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    apiVersion: 1
    kind: Pod
    metadata:
      name: privileged-pod
    spec:
      hostPID: true
      containers:
        - name: priv-host-mount
          image: alpine:latest
          command:
            - /bin/sh
            - -c
            - -
          args:
            - while true; do sleep 30; done;
          securityContext:
            privileged: true
          volumeMounts:
            - name: privmount
              mountPath: /workernode
      volumes:
        - name: privmount
          hostPath:
            path: /
            type: Directory
    

    使用kubectl exec获取到Pod上运行容器的交互式shell,使用chroot模拟对底层虚拟机的访问并安装auditd:

    1
    2
    3
    
    kubectl exec -it $POD /bin/sh
    > chroot /workernode
    > apt-get update && apt-get install auditd -y
    
  4. 根据需要配置auditd规则:

    • 添加一个规则来监控进程执行。可以通过在/etc/audit/rules.d/10-procmon.rules创建文件并添加以下内容来实现。更详细的配置信息可以在这里找到。
      1
      2
      
      -a exit,always -F arch=b64 -S execve -k procmon
      -a exit,always -F arch=b32 -S execve -k procmon
      
    • 通过运行systemctl restart auditd更新auditd守护进程。
  5. 更新syslog插件设施设置,将auditd记录定向到syslog。为此,需要更新/etc/audisp/plugins.d/syslog.conf中的配置,并将active字段设置为yes。默认情况下,syslog启用的设施是用户设施。如果要更改此设置,可以更改ARGS中的第二个参数(第一个参数是日志级别)。例如,以下配置将syslog设施更改为authpriv。

    1
    2
    3
    4
    5
    6
    
    active = yes
    direction = out
    path = builtin_syslog
    type = builtin
    args = LOG_INFO LOG_AUTHPRIV
    format = string
    

    使用systemctl restart auditd重新启动auditd守护进程以应用更改。

  6. 转到门户中的Log Analytics工作区,并配置日志代理以接受authpriv设施的INFO级别的syslog事件。为此:

    • 导航到“设置”>“代理配置”
    • 选择“Syslog”
    • 选择“+添加设施”
    • 在下拉菜单中选择authpriv。
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计