使用配置巡检检查集群工作负载

容器计算服务 ACS(Container Compute Service)提供了工作负载配置的巡检功能,帮助您扫描集群中工作负载配置的安全隐患。执行巡检任务后,ACS会生成巡检报告,您可以根据报告结果查看并处理集群风险项,实时了解集群健康状态。

前提条件

  • 已创建ACS集群。具体操作,请参见创建ACS集群

  • 如果您当前使用的是RAM用户,请确保已参见下方内容完成RAM授权和RBAC授权。

    • RAM授权

      请完成容器计算服务ACS配置巡检页面的RAM授权操作,确保当前RAM用户拥有操作当前集群配置巡检页面的权限,否则会出现权限不足无法操作配置巡检页面功能的问题。具体操作,请参见为RAM用户或RAM角色授予RAM权限

      展开查看配置巡检授权代码

      {
        "Statement": [
          {
            "Action": [
              "cs:DescribePolarisConfig",
              "cs:DescribePolarisJob",
              "cs:DescribePolarisCronJob",
              "cs:UpdatePolarisJob",
              "cs:UpdatePolarisCronJob"
            ],
            "Effect": "Allow",
            "Resource": [
              "acs:cs:*:*:cluster/<yourclusterID>"
            ]
          }
        ],
        "Version": "1"
      }

      如果您还需要使用巡检报告功能,请完成日志服务指定logproject(当前集群logtail-ds组件所使用的logproject)的RAM授权,确保当前RAM用户拥有日志服务指定logproject的数据读取权限,否则会出现权限不足无法查看巡检报告的问题。具体操作,请参见RAM自定义授权示例

      展开查看日志服务日志读取授权代码

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "log:Get*",
                      "log:List*"
                  ],
                  "Resource": "acs:log:*:*:project/<指定的Project名称>/*",
                  "Effect": "Allow"
              }
          ]
      }
    • RBAC授权

      请完成容器计算服务ACS配置巡检页面涉及资源的RBAC授权,授予RAM用户指定集群的管理员权限,以确保RAM用户拥有操作配置巡检页面中涉及的Kubernetes资源的权限。具体操作,请参见配置RAM用户或RAM角色RBAC权限

启用集群工作负载配置巡检功能

  1. 登录容器计算服务控制台,在左侧导航栏选择集群

  2. 集群页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 配置巡检

  3. 可选:安装并升级巡检组件。

    如果您首次使用未安装巡检组件,请按照页面提示安装security-inspector组件。若巡检组件不是最新版本,请按照页面提示将组件升级至最新版本。组件安装完成后,您也可以在集群信息页面的概览页签,单击安全巡检进入配置巡检页面。

    关于security-inspector组件的介绍和变更记录,请参见security-inspector

  4. 配置巡检页面右上方,单击立即执行巡检,等待巡检完成后,在巡检详情页签的操作列,单击详情查看巡检详情。

    重要

    为了更好地提升系统的稳定性和高可用性,同时确保业务的连续性和用户体验,请在业务低峰期执行巡检操作。

  5. 可选:配置巡检页面右上方,单击巡检配置,开启或禁用定期自动执行配置巡检的功能以及配置巡检时执行的检查项。

巡检详情

巡检详情页面通过表格化的方式展示不同工作负载的详细巡检结果,主要包括以下功能:

  • 支持按照是否有风险命名空间工作负载类别等条件对结果进行过滤展示工作负载的巡检通过项风险项数量。

  • 展示巡检结果的各个检查项的详细信息,包括Pod和容器维度的检查状态(已通过、未通过)、检查项详细说明以及加固建议。如有未通过的检查项无需处理,您可以将其加入白名单。

  • 查看工作负载的YAML文件。

巡检报告

巡检报告中主要展示最近执行的巡检扫描结果,主要包括以下几类信息:

  • 扫描结果概览,包括总的检查条目数、检查各个资源项数目及百分比、整体的健康度。

  • 各大类扫描结果统计,包括报告健康检查、镜像、网络、资源、安全等大类的结果。

  • 各个工作负载配置的详细扫描结果,包括资源类别、资源名称、命名空间、检查类型、检查项、检查结果等内容。

检查项

配置巡检功能会扫描并展示以下检查项的扫描结果。

检查项名称

检查的内容及安全风险

修复建议

hostNetworkSet

通过检查工作负载的Pod Spec中是否配置了hostNetwork: true,检查是否配置了共享使用主机的网络namespace。如果配置了,存在Pod中容器攻击主机网络、嗅探主机网络数据的风险。

修改Pod Spec,删除hostNetwork字段。

示例:1

hostIPCSet

通过检查工作负载的Pod Spec中是否配置了hostIPC: true,检查是否配置了共享使用主机的IPC namespace。如果配置了,存在Pod中容器攻击主机上进程、嗅探主机上进程数据的风险。

修改Pod Spec,删除hostIPC字段。

示例:2

hostPIDSet

通过检查工作负载的Pod Spec中是否配置了hostPID: true,检查是否配置了共享使用主机的PID namespace。如果配置了,存在Pod中容器攻击主机上进程、采集主机上进程数据的风险。

修改Pod Spec,删除hostPID字段。

示例:3

hostPortSet

通过检查工作负载的Pod Spec中是否配置了hostPort,检查是否配置了把容器中监听的端口映射到主机指定端口上。如果配置了,存在挤占主机可用端口以及被非预期的请求方请求容器端口的风险。

修改Pod Spec,删除hostPort字段。

示例:4

runAsRootAllowed

通过检查工作负载的Pod Spec中是否未配置runAsNonRoot: true,检查是否未配置使用非root用户运行容器。如果未配置,存在被容器中的恶意进程入侵用户应用、入侵主机甚至入侵整个集群的风险。

修改Pod Spec,增加runAsNonRoot: true

示例:5

runAsPrivileged

通过检查工作负载的Pod Spec中是否配置了privileged: true,检查是否配置了允许以特权模式运行容器。如果配置了,存在被容器中的恶意进程入侵用户应用、入侵主机甚至入侵集群的风险。

修改Pod Spec,删除privileged字段。

示例:6

privilegeEscalationAllowed

通过检查工作负载的Pod Spec中是否未配置allowPrivilegeEscalation: false,检查是否未配置禁止容器中的子进程拥有比父进程更高的权限。如果未配置,存在被容器中的恶意进程实现越权操作的风险。

修改Pod Spec,增加allowPrivilegeEscalation:false字段。

示例:7

capabilitiesAdded

通过检查工作负载的Pod Spec中的capabilities字段,检查是否配置了允许容器中的进程拥有SYS_ADMIN、NET_ADMIN、ALL等特权Linux Capabilities。如果配置了,存在被容器中的恶意进程通过这些特权入侵用户应用、入侵或破坏组件/集群的风险。

修改Pod Spec,根据实际需求只添加必需的Linux Capabilities,删除不需要的Linux Capabilities。

不依赖额外Linux Capabilities,删除所有不需要的Linux Capabilities。示例:

8

只添加必需的Linux Capabilities,删除所有不需要的Linux Capabilities。示例:9

notReadOnlyRootFileSystem

通过检查工作负载的Pod Spec中是否未配置readOnlyRootFilesystem: true,检查是否未配置容器中的文件系统是不可修改的。如果未配置的话,存在被容器中的恶意进程修改系统文件的风险。

修改Pod Spec,增加readOnlyRootFilesystem: true

示例:

10

如果需要修改某个目录下的文件,可以通过volumeMounts字段实现。

示例:11

cpuRequestsMissing

通过检查工作负载的Pod Spec中是否未配置resources.requests.cpu字段,可以检查是否未配置运行容器所需的最少CPU资源。如果未配置的话,Pod有被调度到资源紧张的节点上的风险,可能会出现容器内进程运行缓慢的情况。

修改Pod Spec,增加resources.requests.cpu字段。

示例:

12

cpuLimitsMissing

通过检查工作负载的Pod Spec中是否未配置resources.limits.cpu字段,检查是否未配置运行容器所需的最大CPU资源。如果未配置的话,存在被容器内的异常进程消耗大量节点资源,甚至把整个节点或集群的资源销耗殆尽的风险。

修改Pod Spec,增加resources.limits.cpu字段。

示例:

13

memoryRequestsMissing

通过检查工作负载的Pod Spec中是否未配置resources.requests.memory字段,检查是否未配置运行容器所需的最少内存资源。如果未配置,Pod有被调度到资源紧张的节点上的风险,可能会出现容器内进程OOM的风险。

修改Pod Spec,增加resources.requests.memory字段。

示例:

14

memoryLimitsMissing

通过检查工作负载的Pod Spec中是否未配置resources.limits.memory字段,检查是否未配置运行容器所需的最大内存资源。如果未配置的话,存在被容器内的异常进程消耗大量节点资源,甚至把整个节点或集群的资源消耗殆尽的风险。

修改Pod Spec,增加resources.limits.memory字段。

示例:

15

readinessProbeMissing

通过检查工作负载的Pod Spec中是否未配置readinessProbe字段,检查是否未配置检测容器内应用能否正常处理请求的探针。如果未配置的话,存在容器内应用异常无法处理请求时仍旧有请求发送,继而导致业务异常的风险。

修改Pod Spec,增加readinessProbe字段。

示例:

16

livenessProbeMissing

通过检查工作负载的Pod Spec中是否未配置livenessProbe,检查是否未配置检测容器内应用是否出现异常需要重启容器的探针。如果未配置,存在容器内应用异常需要重启容器才能恢复时未及时重启导致业务异常的风险。

修改Pod Spec,增加livenessProbe字段。

示例:

17

tagNotSpecified

通过检查工作负载的Pod Spec中的image字段的值是否未包含镜像Tag或者使用了latest作为镜像Tag,检查是否未配置运行容器时使用指定Tag的容器镜像。如果未配置,存在运行容器时运行了非预期的容器镜像版本导致业务异常的风险。

修改Pod Spec,修改image字段,使用指定的镜像Tag,并且不要使用latest作为镜像Tag。

示例:

18

anonymousUserRBACBinding

通过检查集群内的RBAC(Role-based access control)绑定找出配置了匿名用户访问权限的配置项。如果配置了允许匿名用户访问集群资源的配置项,则存在被恶意匿名用户窃取集群敏感信息、攻击和入侵集群的风险。

修改扫描出来的RBAC绑定,根据实际情况删除允许匿名用户访问集群资源的权限配置项。

示例:

z-1

事件

事件类型

事件名称

事件内容示例

事件说明

处理措施

Normal

SecurityInspectorConfigAuditStart

Start to running config audit

开始执行巡检任务。

无需处理。

Normal

SecurityInspectorConfigAuditFinished

Finished running once config audit

巡检任务执行完成。

无需处理。

Warning

SecurityInspectorConfigAuditHighRiskFound

2 high risks have been found after running config audit

巡检执行完之后,发现部分工作负载存在未修复的高风险检查项。

  1. 在集群的配置巡检页面,查看详细的巡检结果。

  2. 通过过滤选项中的有风险所有命名空间以及显示所有工作负载,过滤查看有风险的工作负载。然后,单击详情,查看该工作负载中每个检查项的检查结果和修复建议。

    • 对于确认无需修复的检查项,单击加白名单,将该检查项加入白名单。

    • 对于确认需要修复的检查项,请参考修复建议进行修复。