首页 > 其他分享 >K8s 开启审计日志

K8s 开启审计日志

时间:2024-07-09 14:31:37浏览次数:19  
标签:audit filebeat log 开启 system 日志 K8s resources name

一、背景

  • 应安全规范,对 apiserver 核心组件,需要记录,"谁在什么时候操作了什么"
  • 方便故障排查

二、操作步骤

apiserver 开启审计日志

在所有 master 节点执行

  1. 备份 配置文件

    mkdir -p /home/clay/bak$(date +%F)
    cp /etc/kubernetes/manifests/kube-apiserver.yaml /home/clay/bak$(date +%F)
    
     
  2. 创建审计策略

    mkdir /etc/kubernetes/audit/
    
     

    vim /etc/kubernetes/audit/audit-policy.yaml

    apiVersion: audit.k8s.io/v1beta1 # This is required.
    kind: Policy
    omitStages:
      - "RequestReceived"
    rules:
      - level: None
        users: ["system:kube-proxy"]
        verbs: ["watch"]
        resources:
          - group: "" # core
            resources: ["endpoints", "services"]
      - level: None
        users: ["system:unsecured"]
        namespaces: ["kube-system"]
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["configmaps"]
      - level: None
        users: ["system:serviceaccount:kube-system:calico-node"]
        verbs: ["get","list"]
      - level: None
        users: ["kubelet"] # legacy kubelet identity
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["nodes"]
      - level: None
        userGroups: ["system:nodes"]
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["nodes"]
      - level: None
        users:
          - system:kube-controller-manager
          - system:kube-scheduler
          - system:serviceaccount:kube-system:endpoint-controller
        verbs: ["get", "update"]
        namespaces: ["kube-system"]
        resources:
          - group: "" # core
            resources: ["endpoints"]
      - level: None
        users: ["system:apiserver"]
        verbs: ["get"]
        resources:
          - group: "" # core
            resources: ["namespaces"]
      - level: None
        nonResourceURLs:
          - /healthz*
          - /version
          - /swagger*
      - level: None
        resources:
          - group: "" # core
            resources: ["events"]
      - level: Metadata
        resources:
          - group: "" # core
            resources: ["secrets", "configmaps"]
          - group: authentication.k8s.io
            resources: ["tokenreviews"]
      - level: Metadata
    
     
  3. 修改apiserver 配置文件 vim /etc/kubernetes/manifests/kube-apiserver.yaml

    # 在spec.containers.command 最后新增
        - --audit-policy-file=/etc/kubernetes/audit/audit-policy.yaml
        - --audit-log-maxage=7
        - --audit-log-maxsize=200
        - --audit-log-path=/var/log/apiserver/audit.log
    # 在spec.containers.volumeMounts 最后新增
        - mountPath: /etc/kubernetes/audit
          name: audit
          readOnly: true
        - mountPath: /var/log/apiserver/
          name: log
    # 在spec.volumes 最后新增
      - hostPath:
          path: /etc/kubernetes/audit
          type: DirectoryOrCreate
        name: audit
      - hostPath:
          path: /var/log/apiserver
          type: DirectoryOrCreate
        name: log
    
     

使用 filebeat 收集审计日志到 elk 中

编写 yaml 文件

vim filebeat-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: audit
  labels:
    k8s-app: filebeat
    kubernetes.io/cluster-service: "true"
    app: filebeat-config
data:
  filebeat.yml: |
    filebeat.prospectors:
    - input_type: log
      enabled: true
      tail_files: true
      paths:
        - /var/log/apiserver/*.log

    output.kafka:
      hosts: ["xxx:9092"]
      topic: 'test_k8s_audit_log'
      required_acks: 1
      partition.round_robin:
        reachable_only: false
      compression: gzip
      max_message_bytes: 10000000
 

vim filebeat-ds.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: audit
  labels:
    k8s-app: filebeat
spec:
  selector:
    matchLabels:
      app: filebeat
      k8s-app: filebeat
  template:
    metadata:
      name: filebeat
      labels:
        app: filebeat
        k8s-app: filebeat
    spec:
      tolerations:
      - effect: NoSchedule
        key: node-role.kubernetes.io/master
      nodeSelector:
        node-role.kubernetes.io/master-select: master
      containers:
      - image: docker.elastic.co/beats/filebeat:6.4.0
        name: filebeat
        args: [
            "-c", "/home/filebeat-config/filebeat.yml",
            "-e",
        ]
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: log
          mountPath: /var/log/apiserver
        - name: "filebeat-volume"
          mountPath: "/home/filebeat-config"
      volumes:
        - name: filebeat-volume
          configMap:
            name: filebeat-config
        - hostPath:
            path: /var/log/apiserver
            type: DirectoryOrCreate
          name: log
 

master 节点打标签,部署

kubectl label node masternamexxx node-role.kubernetes.io/master-select=master
kubectl create ns audit
kubectl apply -f filebeat-configmap.yaml
kubectl apply -f filebeat-ds.yaml
 

标签:audit,filebeat,log,开启,system,日志,K8s,resources,name
From: https://www.cnblogs.com/david-cloud/p/18291792

相关文章

  • 【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统
    【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统一、OrangeHRM介绍1.1OrangeHRM简介1.2OrangeHRM特点1.3OrangeHRM使用场景二、相关知识介绍2.1本次实践存储介绍2.2k8s存储介绍三、本次实践介绍3.1本次实践简介3.2本次......
  • 实践1-使用 ansible 快速安装 k8s 机器
    推荐:kubeadm安装用:kubesprayopeninnewwindow二进制安装用:kubeaszopeninnewwindow此安装方式参考上面两个项目创建,如果刚开始搭建,直接使用上面的安装方式即可,可根据实际情况微调项目地址:https://github.com/clay-wangzhi/ansible-collection-k8s 相关支持支......
  • 用Goaccess对Web及雷池WAF日志实现可视化分析
    君衍.一、项目环境介绍二、Goaccess1、Goaccess介绍2、存储方式3、配置选项4、自定义日志/日期格式5、特殊格式说明符三、雷池访问日志1、配置文件改变2、docker配置3、示例测试四、Goaccess安装1、安装依赖2、编译安装五、Goaccess对Nginx日志分析1、常用命令参数2、......
  • K8s 一条默认参数引起的性能问题-Pod enableServiceLinks
    问题时间线xx:xx]开发收到业务反馈接口响应超时[xx:xx]开发&SRE&中间件联合排查代码、网关、底层网络问题,无果[xx:xx] 测试环境复现排查[xx:xx] 利用差异法、排除法和经验解决,先上线[xx:xx] 根因定位 问题现象1)接口偶发性超时image-202401161814518792)容器化......
  • k8s 关闭 enableServiceLink-Pod-CPU-内存占用过高
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<特性说明:enableServiceLinks特性,是k8s提供给pod发现和访问svc的两种方案之一(另一种是DNS)。该特性在pod启动时,kubelet会将activesvc通过env {SVCNAME}_SERVICE_HOST、......
  • K8s 中 Pod OOMKilled 原因
    在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的ExitCode编码。 ExitCode137表明容器收到......
  • K8S学习教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全
      背景wiki.js是非常优秀的开源Wiki系统,尽管在与xwiki功能相比,还不算完善,但也在不断进步。常用的功能还是比较实用的,如:Wiki写作、分享、权限管理功能还是非常实用的,UI设计非常的漂亮,精美的界面和直观的操作体验,能够满足小团队的基本知识管理需求。认真阅读......
  • Docker日志批量清理
    转发:原文:https://blog.csdn.net/u013737132/article/details/134639909Docker容器日志查看查看所有容器数据大小并按倒序排列:du-d1-h/var/lib/docker/containers|sort-rhdu:用于估算文件或目录空间使用量。-d1:仅显示深度为1的目录,即只显示直接子目录的信息。......
  • Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时
    章节内容上一节我们完成了:HiveServer2的介绍和配置安装修改core-sizehdfs-site实现集群的启动Beeline简单上手HCatalog简单上手背景介绍这里是三台公网云服务器,每台2C4G,搭建一个Hadoop的学习环境,供我学习。之前已经在VM虚拟机上搭建过一次,但是没留下笔记,这次......
  • k8s集群离线部署
    K8s离线部署环境目标k8s离线部署步骤部署docker详情见文章:《离线安装docker及后端项目离线打包》https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501所用到的所有文件在:链接:https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?......