安全扫描

从 v2.4.0 版本起可用

Rancher 可以运行安全扫描,根据互联网安全中心(Center for Internet Security,简称 CIS ) Kubernetes 基准测试中定义的安全最佳实践,来检查已部署 Kubernetes 的是否满足安全标准。

CIS 是一个501(c)(3)非营利组织,成立于 2000 年 10 月,其使命是“通过识别,开发,验证,推广和维护最佳实践解决方案来防御网络攻击,并建立和引导社区打造安全可信的网络环境”。该组织的总部位于纽约东格林布什,成员包括大型公司,政府机构和学术机构。

CIS 基准测试是安全配置目标系统的最佳实践。CIS 基准是通过领域专家,技术供应商,公共和私人社区成员以及 CIS 基准开发团队的不懈努力而制定的。

基准提供两种类型的建议:计分和不记分。我们仅运行与“计分建议”相关的测试。

关于 CIS 基准测试

CIS 官方基准文件可通过 CIS 网站获得。用于访问文档的注册表格在此处

Rancher 通过使用 Aqua Security 的开源工具 kube-bench 检查集群是否符合 CIS Kubernetes Benchmark 的规定。

关于生成的报告

每次扫描都会生成一个报告。您可以在 Rancher UI 中查看报告,您也可以下载 CSV 格式的报告。

从 Rancher v2.4 开始,该扫描将使用 CIS Benchmark v1.4。基准版本信息将包含在生成的报告中。

基准提供两种类型的建议:计分不记分。在基准中标记为不记分的建议不包括在生成的报告中。

一些测试被指定为“不适用”。由于 Rancher 通过容器的方式启动 RKE 集群,这些测试将不会在任何 CIS 扫描上运行。有关如何审核测试结果以及为何指定某些测试不适用的信息,请参阅 Rancher 的相应 Kubernetes 版本的自测报告

该报告包含以下信息:

报表中的列描述
IDCIS 基准的 ID 号。
描述CIS 基准测试的说明。
处理办法为了通过测试需要修复的内容。
测试状态指示测试是否通过,失败,被跳过或不适用。
节点类型节点角色,它影响在节点上运行哪些测试。主测试在控制平面节点上运行,etcd 测试在 etcd 节点上运行,而节点测试在工作节点上运行。
节点运行测试的节点的名称。
通过的节点测试通过的节点的名称。
失败的节点测试失败的节点的名称。

请参阅集群安全加固指南表格,获取有关哪个版本的 Kubernetes、Benchmark 和 Rancher,与我们的安全加固指南版本相互对应。另请参阅包括 CIS 合规的集群的配置文件的安全强化指南以及有关修复失败测试的相关信息。

安全扫描配置文件

CIS 有两种类型的配置文件:

  • Permissive(宽松): 该配置文件具有一组将被跳过的测试,因为这些测试将在默认的 RKE Kubernetes 集群上失败。除了已跳过的测试列表之外,配置文件也不会运行不适用的测试。
  • Hardened(严格): 除不适用的测试外,此配置文件不会跳过任何测试。

对于每个 CIS 基准版本,Rancher 都附带两种类型的配置文件。这些配置文件是根据集群的类型(例如 RKE),CIS 基准测试版本(例如 CIS 1.4)和配置文件类型(例如 PermissiveHardened)来命名的。例如,完整的个人资料名称为RKE-CIS-1.4-Permissive

由于 RKE 通过容器的方式启动 Kubernetes ,所有的配置文件都有一组不适用的测试,在 CIS 扫描期间将跳过这些测试。

为了通过Hardened配置文件,您需要遵循安全加固指南上的步骤,使用加固指南中定义的cluster.yml来配置安全加固的集群。

跳过和不适用的测试

CIS 基准 v1.4 跳过的测试

名称描述跳过原因
1.1.11确保设置了准入控制插件 AlwaysPullImages。(计分)启用 AlwaysPullImages 可能会占用大量带宽。
1.1.21确保对--kubelet-certificate-authority参数进行了适当的设置。(计分)生成服务证书时,可能会破坏某些功能,因为某些 Cloud Provider 要求配置 Hostname Override。 具体例子请参考这里
1.1.24确保设置了准入控制插件 PodSecurityPolicy。(计分)启用 Pod 安全策略可能会导致应用程序意外失败。
1.1.34确保将--encryption-provider-config参数设置为适当的值。(计分)启用加密插件会改变数据解析的方式,因为数据被使用其他方式加密了。
1.1.35确保将加密插件设置为 aescbc。(计分)启用加密插件会改变数据解析的方式,因为数据被使用其他方式加密了。
1.1.36确保设置了准入控制插件 EventRateLimit。(计分)需要根据集群的情况来调整 EventRateLimit。
1.2.2确保--address参数设置为127.0.0.1。(计分)添加此参数将导致 Rancher 监控无法采集 scheduler 的监控指标。
1.3.7确保--address参数设置为127.0.0.1。(计分)添加此参数将导致 Rancher 监控无法采集 kube-controller 的监控指标。
1.4.12确保将 etcd 数据目录所有权设置为 etcd:etcd。(计分)设置 etcd 数据目录所有权需要有一个系统服务账号。有关如何配置此所有权的更多详细信息,请参阅 Rancher 的安全加固指南。
1.7.2不允许容器共享主机进程 ID 命名空间。(计分)启用 Pod 安全策略可能会导致应用程序意外失败。
1.7.3不允许容器共享主机 IPC 命名空间。(计分)启用 Pod 安全策略可能会导致应用程序意外失败。
1.7.4不允许容器共享主机网络命名空间。(计分)启用 Pod 安全策略可能会导致应用程序意外失败。
1.7.5不允许容器使用allowPrivilegeEscalation。(计分)启用 Pod 安全策略可能会导致应用程序意外失败。
2.1.6确保将--protect-kernel-defaults参数设置为true。(计分)在配置集群之前,需要进行系统级配置,以便将此参数设置为 true。
2.1.10确保正确设置--tls-cert-file--tls-private-key-file参数。(计分)生成服务证书时,可能会破坏某些功能,因为某些 Cloud Provider 要求配置 Hostname Override。具体例子请参考这里

CIS 基准 v1.4 不适用的测试

编号描述不适用原因
1.1.9确保--repair-malformed-updates参数设置为false。(计分)自 Kubernetes 1.14 版以来,参数--repair-malformed-updates已被删除。
1.3.6确保RotateKubeletServerCertificate参数设置为true。(计分)RKE 创建的集群直接通过 RKE 处理证书轮换。
1.4.1确保将 API Server 的 Pod 规范文件权限设置为 644 或更高的限制。(计分)由 RKE 创建的集群不需要或维护 kube-apiserver 的配置文件。
1.4.2确保将 API Server 的 Pod 规范文件所有权设置为 root:root。(计分)由 RKE 创建的集群不需要或维护 kube-apiserver 的配置文件。
1.4.3确保将 Controller Manager 的 Pod 规范文件所有权设置为 644 或更高的限制。(计分)RKE 创建的集群不需要或维护 Controller Manager 的配置文件。
1.4.4确保将 Controller Manager 的 Pod 规范文件所有权设置为 root:root。(计分)RKE 创建的集群不需要或维护 Controller Manager 的配置文件。
1.4.5确保将 Scheduler 的 Pod 规范文件所有权设置为 644 或更高的限制。(计分)RKE 创建的集群不需要或维护 Scheduler 的配置文件。
1.4.6确保将 Scheduler 的 Pod 规范文件所有权设置为 root:root。(计分)RKE 创建的集群不需要或维护 Scheduler 的配置文件。
1.4.7确保将 etcd 的 Pod 规范文件所有权设置为 644 或更高的限制。(计分)RKE 创建的集群不需要或维护 etcd 的配置文件。
1.4.8确保将 etcd 的 Pod 规范文件所有权设置为 root:root。(计分)RKE 创建的集群不需要或维护 etcd 的配置文件。
1.4.13确保将admin.conf文件权限设置为 644 或更高的限制。(计分)RKE 创建的集群不会在节点上存储 kubernetes 默认的 kubeconfig 凭据文件。
1.4.14确保将admin.conf文件所有权设置为 root:root。(计分)RKE 创建的集群不会在节点上存储 kubernetes 默认的 kubeconfig 凭据文件。
2.1.8确保未设置--hostname-override参数。(计分)RKE 集群和大多数云提供商配置的集群需要主机名。
2.1.12确保--rotate-certificates参数未设置为 false。(计分)RKE 创建的集群直接通过 RKE 处理证书轮换。
2.1.13确保RotateKubeletServerCertificate参数设置为true。(计分)RKE 创建的集群直接通过 RKE 处理证书轮换。
2.2.3确保将 kubelet 服务文件权限设置为 644 或更高的限制。(计分)由 RKE 创建的集群不需要或维护 kubelet 服务的配置文件。
2.2.4确保将 kubelet 服务文件所有权设置为root:root。(计分)由 RKE 创建的集群不需要或维护 kubelet 服务的配置文件。
2.2.9确保将 kubelet 配置文件的所有权设置为root:root。(计分)RKE 不需要或维护 kubelet 的配置文件。
2.2.10确保将 kubelet 配置文件的权限设置为 644 或更严格。(计分)RKE 不需要或维护 kubelet 的配置文件。

先决条件

  • 如果想要对集群运行安全扫描并生成报告,您必须是系统管理员集群管理员

  • Rancher 只能在通过 RKE 创建的集群中执行安全扫描。这些集群包括自定义集群和 Rancher 在云提供商的虚拟机上创建的集群例如 Amazon EC2 或 GCE。您不能通过 Rancher 对导入的集群和托管的 Kubernetes 集群进行安全扫描。

  • 您不能在含有 Windows 节点的集群里运行安全扫描。

  • 您将只能看到您有权访问的集群的 CIS 扫描报告。

运行扫描

  1. 在 Rancher 的集群级别菜单中,单击 工具 > CIS 扫描
  2. 单击 运行扫描
  3. 选择一个 CIS 扫描配置文件。

结果: 将会在CIS 扫描页面中生成一份报告。您可以单击报告的名称,查看报告的详细内容。

设置定期扫描

在任何 RKE 集群上都可以设置定期扫描。

如果您要启用定期扫描,请在创建集群期间或创建集群之后在集群配置中的高级选项里设置。

在现有集群中配置定期扫描的步骤如下:

  1. 转到 Rancher 中的集群视图。
  2. 单击 工具 > CIS 扫描
  3. 单击 添加计划。这将带您到编辑集群页面中的配置 CIS 扫描计划的部分。(您也可以通过转到集群视图来访问此部分,单击省略号 > 编辑,然后转到 高级选项。)
  4. 启用 CIS 扫描字段中,单击
  5. CIS 扫描配置文件中,选择 PermissiveHardened 配置文件。相应的 CIS Benchmark 版本信息包含在配置文件名称中。注意:无论选择了 Permissive 还是 Hardened 配置文件,任何在 ConfigMap 中定义的测试都将被跳过。选择 Permissive 的配置文件时,您应该查看 Rancher 都跳过了哪些测试(RKE 集群默认情况下跳过的测试)以及 Rancher 用户跳过了哪些测试。在 Hardened 测试配置文件中,仅会跳过用户选择跳过的测试。
  6. CIS 扫描间隔(cron)中,输入 cron 表达式以定义对集群进行扫描的频率。
  7. CIS 扫描报告保留数中,输入应保留的过去的报告的数量。

结果: 安全扫描将按计划的时间间隔进行并生成报告。

测试时间表可以通过cluster.yml配置。

scheduled_cluster_scan:
    enabled: true
    scan_config:
        cis_scan_config:
            override_benchmark_version: rke-cis-1.4
            profile: permissive
    schedule_config:
        cron_schedule: 0 0 * * *
        retention: 24

跳过测试

您可以定义一组测试,生成下一个报告时,这些测试会被 CIS 扫描跳过。

对于后续的 CIS 扫描(包括手动触发的扫描和定时触发的扫描),将跳过这些测试,并且使用任何扫描配置文件时,都将跳过这些测试。

当为定期集群扫描选择扫描配置文件时,跳过的测试将在集群配置选项中的测试配置文件名称旁边列出。每次单击运行扫描从 Rancher UI 手动触发扫描时,也会显示跳过的测试。Rancher UI 以这种方式告知您,每次扫描将运行和跳过哪些测试。

如果您要跳过某些测试,您将需要在 Kubernetes ConfigMap 资源中定义它们。配置映射中列出了每个跳过的 CIS 扫描测试以及该测试所属的 CIS 基准测试的版本。

您可以通过编辑 ConfigMap 资源的方式跳过测试。

  1. 创建一个security-scan命名空间。

  2. 创建一个名为security-scan-cfg配置映射。

  3. 以以下格式在config.json键下输入跳过信息:

    {
    "skip": {
    "rke-cis-1.4": ["1.1.1", "1.2.2"]
    }
    }

    在上面的示例中,指定了 CIS 基准测试版本以及该版本要跳过的测试。

结果: 在使用定义的 CIS Benchmark 版本的后续扫描中,将跳过这些测试。

设置告警

Rancher 为集群扫描提供了一组告警。默认情况下,这些告警没有配置任何通知接收者:

  • 手动集群扫描已完成
  • 手动集群扫描失败
  • 定期集群扫描已完成
  • 定期集群扫描失败

先决条件:您需要在配置,发送或接收告警之前配置通知

要为 CIS 扫描结果激活现有告警,

  1. 在 Rancher 的集群视图中,单击工具 > 告警
  2. 转到A set of alerts for cluster scans的部分。
  3. 转到要激活的告警,然后单击省略号 (...) > 激活
  4. 转到告警规则组A set of alerts for cluster scans,然后单击省略号 (...) > 编辑
  5. 向下滚动至告警部分。在接收者字段中,选择要用于发送告警的通知。
  6. 可选:要限制通知的频率,请单击显示高级选项并配置告警的时间间隔。
  7. 单击保存

结果: 当在集群上运行扫描并且满足报警条件时,将触发通知。

要创建新告警,

  1. 转到集群视图,然后单击工具 > CIS 扫描
  2. 单击添加告警
  3. 填写表格。
  4. 输入告警的名称。
  5. 字段中,设置在扫描完成或扫描失败时触发的告警。
  6. 发送字段中,将告警级别设置为严重警告信息
  7. 为告警选择一个通知

结果: 告警已创建并激活。当在集群上运行扫描并且满足报警条件时,将触发通知。

有关告警的更多信息,请参考本页

删除报告

  1. 在 Rancher 的集群级别菜单中,单击工具 > CIS 扫描
  2. 导航到您想要删除的报告。
  3. 单击省略号 (...) > 删除
  4. 单击删除

下载报告

  1. 在 Rancher 的集群视图中,单击工具> CIS 扫描
  2. 转到您要下载的报告。单击省略号 (...) >下载

结果: 下载 CSV 格式的报告。有关各列的更多信息,请参阅有关生成的报告的部分

最后由 yzeng25更新 于