本文主要介绍ACK容器服务对K8s多种组件日志和审计的采集和分析,包括API Server、Ingress,管控平面组件和K8s关键Events事件等日志审计的收集和分析。以方便日志在出现安全问题或集群出现问题时进行问题溯源。

使用集群审计功能

在Kubernetes集群中,API Server的审计日志可以帮助集群管理人员记录或追溯不同用户的日常操作,是集群安全运维中重要的环节。关于通过日志服务收集、分析审计日志、为审计日志设置自定义的告警规则、关闭集群审计功能,请参见使用集群审计功能

阿里云服务容器ACK的审计策略如下:

apiVersion: audit.k8s.io/v1beta1 # This is required.
kind: Policy
#不要为RequestReceived阶段中的所有请求生成审核事件。
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: ["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"]
#不要记录这些只读URL。
- 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: Request
  verbs: ["get", "list", "watch"]
  resources:
    - group: "" # core
    - group: "admissionregistration.k8s.io"
    - group: "apps"
    - group: "authentication.k8s.io"
    - group: "authorization.k8s.io"
    - group: "autoscaling"
    - group: "batch"
    - group: "certificates.k8s.io"
    - group: "extensions"
    - group: "networking.k8s.io"
    - group: "policy"
    - group: "rbac.authorization.k8s.io"
    - group: "settings.k8s.io"
    - group: "storage.k8s.io"
# 已知API的默认级别。
- level: RequestResponse
  resources:
    - group: "" # core
    - group: "admissionregistration.k8s.io"
    - group: "apps"
    - group: "authentication.k8s.io"
    - group: "authorization.k8s.io"
    - group: "autoscaling"
    - group: "batch"
    - group: "certificates.k8s.io"
    - group: "extensions"
    - group: "networking.k8s.io"
    - group: "policy"
    - group: "rbac.authorization.k8s.io"
    - group: "settings.k8s.io"
    - group: "storage.k8s.io"
    - group: "autoscaling.alibabacloud.com"
# 所有其他请求的默认级别。
- level: Metadata

利用审计元数据

Kubernetes审计日志包括两个注释,用于指示请求是否获得授权authorization.k8s.io/decision,以及作出决定的原因authorization.k8s.io/reason。使用这些属性来确定允许特定API调用的原因。

使用NPD结合SLS的Kubernetes事件中心监控集群可疑事件

NPD(node-problem-detector)是阿里云容器服务ACK维护的Kubernetes节点诊断的工具,可以将节点的异常,例如Docker Engine Hang、Linux Kernel Hang、网络出网异常、文件描述符异常转换为Node的事件,结合kube-eventer可以实现节点事件告警的闭环。除了NPD检测到的集群节点实时问题和故障,Kubernetes集群自身也会因为集群状态的切换产生各种事件,例如Pod驱逐、镜像拉取失败等异常情况。另外对于普通用户使用exec登录到指定容器等可疑运维操作,SLS(Log Service)日志服务的Kubernetes事件中心实时汇聚Kubernetes中的所有事件并提供存储、查询、分析、可视化、告警等能力,帮助安全运维管理人员及时发现集群稳定性风险。具体操作,请参见事件监控

开启Ingress Dashboard监控

阿里云Ingress组件支持将您的所有HTTP请求日志记录到标准输出中。同时,阿里云打通Ingress组件访问日志服务与阿里云日志服务,从而您可以使用日志服务快速创建日志分析和监控大盘。在Ingress的可视化仪表盘中,您可以方便地查看Ingress的整体状态,包括:PV、UV、流量、响应延迟、Top URL统计等关键信息,帮助您实时掌控业务流量动态、及时发现恶意访问和DOS攻击。具体操作,请参见Ingress Dashboard监控

开启CoreDNS日志

阿里云容器服务ACK部署了CoreDNS作为集群内的DNS服务器,您可以通过查看CoreDNS日志来分析CoreDNS解析慢、访问高危请求域名等问题。在日志服务仪表盘中可以看到关于CoreDNS的日志分析报表,您可以及时发现可疑的高危域名请求,具体操作,请参见分析和监控CoreDNS日志