审计规则

    启用 KubeSphere 审计日志后,使用拥有 platform-admin 角色的用户登录控制台。在集群管理页面转到 CRD,在搜索栏中输入 rules.auditing.kubesphere.io。点击搜索结果 Rule,您便可以看到这两种 CRD 规则。

    下方是部分规则的示例。

    alerting-rule

    1. apiVersion: auditing.kubesphere.io/v1alpha1
    2. kind: Rule
    3. metadata:
    4. labels:
    5. type: alerting
    6. workspace: system-workspace
    7. name: alerting-rule
    8. spec:
    9. rules:
    10. - desc: all operator need to be audit
    11. list:
    12. - create
    13. - update
    14. - patch
    15. name: action
    16. type: list
    17. - condition: Verb in ${action}
    18. desc: audit the change of resource
    19. enable: true
    20. name: ResourceChange
    21. priority: INFO
    22. type: rule

    如果审计日志符合 archiving-rule 中的规则并且该规则的优先级不低于 archivingPriority,则会保存该日志供后续使用。如果审计日志符合 alerting-rule 中的规则并且该规则的优先级低于 alertingPriority,则会保存该日志供后续使用;否则将生成告警并发送至用户。

    Condition 是一个过滤表达式,可以使用比较运算符(=、!=、<、<=、>、>=、contains、in、like 以及正则表达式),也可以使用布尔运算符(and、or 和 not)和括号进行组合。以下是支持的过滤器。

    过滤器描述信息
    Workspace发生审计事件的企业空间。
    DevOps发生审计事件的 DevOps 项目。
    Level审计日志的级别。
    RequestURIRequestURI 是由客户端发送至服务器的请求 URI。
    Verb与该请求相关联的动词。
    User.Username在所有活跃用户中唯一标识该用户的名称。
    User.Groups该用户所属的组的名称。
    SourceIPs该请求来源的源 IP 和中间代理。
    ObjectRef.Resource与该请求相关联的对象的资源。
    ObjectRef.Namespace与该请求相关联的对象的命名空间。
    ObjectRef.Name与该请求相关联的对象的名称。
    ObjectRef.Subresource与该请求相关联的对象的子资源。
    ResponseStatus.code对该请求的建议 HTTP 返回码。
    ResponseStatus.Status操作状态。
    RequestReceivedTimestamp该请求到达 Apiserver 的时间。
    StageTimestamp该请求到达当前审计阶段的时间。
    1. ObjectRef.Namespace = "test"

    匹配命名空间中以 test 开头的所有日志:

    匹配最近一小时内发生的所有日志:

    1. RequestReceivedTimestamp >= "2020-06-12T09:23:28.359896Z" and RequestReceivedTimestamp <= "2020-06-12T10:23:28.359896Z"

    宏(即 Macro)

    macro 是一种规则条件片段,可以在规则甚至其他宏中复用。宏提供了一种命名常用模式的方法,并消除了规则中的冗余。以下是一个宏的示例。

    1. apiVersion: auditing.kubesphere.io/v1alpha1
    2. kind: Rule
    3. name: alerting-rule
    4. labels:
    5. workspace: system-workspace
    6. type: alerting
    7. rules:
    8. - name: pod
    9. type: macro
    10. desc: pod
    11. macro: ObjectRef.Resource="pods"

    备注

    list 是一个可以包含在规则、宏或其他 List 中的项目的集合。与规则和宏不同,List 不能被解析为过滤表达式。下面是一个 List 的示例。

    别名(即 Alias)

    alias 是一个过滤字段的简称。它可以包含在规则、宏、List 和输出字符串中。下面是一个 Alias 的示例。

    1. apiVersion: auditing.kubesphere.io/v1alpha1
    2. kind: Rule
    3. metadata:
    4. name: alerting-rule
    5. labels:
    6. workspace: system-workspace
    7. type: alerting
    8. spec:
    9. rules:
    10. - name: namespace
    11. type: alias
    12. desc: the alias of the resource namespace
    13. alias: ObjectRef.Namespace

    当审计日志触发告警时,Output 字符串用于格式化告警消息。Output 字符串可以包括 List 和 Alias。下面是一个示例。

    1. Output: ${user} ${verb} a HostNetwork Pod ${name} in ${namespace}.

    备注