V 1.23 CIS Kubernetes 基准
该版本已不再支持。 尽快将集群更新为 受支持的版本。
因特网安全中心 (CIS) 发布 CIS Kubernetes Benchmark 作为特定步骤的框架,以更安全地配置 Kubernetes,并使用与各种行业法规相称的标准。 本文档包含针对运行 Kubernetes V 1.23的集群的 V 1.5 CIS Kubernetes 基准测试的结果。 有关更多信息或帮助了解基准,请参阅 使用基准。
1 主节点安全性配置
查看 V 1.5 CIS Kubernetes 基准程序的主节点安全性配置结果。
1.1 主节点配置文件
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
1.1.1 | 确保 API 服务器 pod 规范文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.2 | 确保 API 服务器 pod 规范文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.3 | 确保控制器管理器 pod 规范文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.4 | 确保控制器管理器 pod 规范文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.5 | 确保调度程序 pod 规范文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.6 | 确保调度程序 pod 规范文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.7 | 确保 etcd pod 规范文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.8 | 确保 etcd pod 规范文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.9 | 请确保“容器网络接口”文件许可权设置为 644 或更具限制性。 |
未评分 | 1 | 传递 | IBM |
1.1.10 | 确保容器网络接口文件所有权设置为 root:root 。 |
未评分 | 1 | 传递 | IBM |
1.1.11 | 确保 etcd 数据目录许可权设置为 700 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.12 | 确保 etcd 数据目录所有权设置为 etcd:etcd 。 |
已评分 | 1 | 传递 | IBM |
1.1.13 | 确保 admin.conf 文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.14 | 确保 admin.conf 文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.15 | 确保 scheduler.conf 文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.16 | 确保 scheduler.conf 文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.17 | 确保 controller-manager.conf 文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.18 | 确保 controller-manager.conf 文件所有权设置为 r oot:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.19 | 确保 Kubernetes PKI 目录和文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
1.1.20 | 确保 Kubernetes PKI 证书文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
1.1.21 | 确保 Kubernetes PKI 密钥文件许可权设置为 600 。 |
已评分 | 1 | 传递 | IBM |
1.2 API 服务器
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
1.2.1 | 确保 --anonymous-auth 选项设置为 false 。 |
未评分 | 1 | 失败 | IBM |
1.2.2 | 确保未设置 --basic-auth-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.3 | 确保未设置 --token-auth-file 参数。 |
已评分 | 1 | 传递 | IBM |
1.2.4 | 确保 --kubelet-https 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
1.2.5 | 确保根据需要设置 --kubelet-client-certificate 和 --kubelet-client-key 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.6 | 确保根据需要设置 --kubelet-certificate-authority 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.7 | 确保 --authorization-mode 选项未设置为 AlwaysAllow 。 |
已评分 | 1 | 传递 | IBM |
1.2.8 | 确保 --authorization-mode 选项包含 Node 。 |
已评分 | 1 | 传递 | IBM |
1.2.9 | 确保 --authorization-mode 选项包含 RBAC 。 |
已评分 | 1 | 传递 | IBM |
1.2.10 | 确保设置了许可控制插件 EventRateLimit 。 |
未评分 | 1 | 失败 | IBM |
1.2.11 | 确保未设置许可控制插件 AlwaysAdmit 。 |
已评分 | 1 | 传递 | IBM |
1.2.12 | 确保设置了许可控制插件 AlwaysPullImages 。 |
未评分 | 1 | 失败 | IBM |
1.2.13 | 如果不使用 PodSecurityPolicy,请确保设置了准入控制插件 SecurityContextDeny 。 |
未评分 | 1 | 传递 | IBM |
1.2.14 | 确保设置了许可控制插件 ServiceAccount 。 |
已评分 | 1 | 传递 | IBM |
1.2.15 | 确保设置了许可控制插件 NamespaceLifecycle 。 |
已评分 | 1 | 传递 | IBM |
1.2.16 | 确保设置了许可控制插件 PodSecurityPolicy 。 |
已评分 | 1 | 传递 | IBM |
1.2.17 | 确保设置了许可控制插件 NodeRestriction 。 |
已评分 | 1 | 传递 | IBM |
1.2.18 | 确保未设置 --insecure-bind-address 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.19 | 确保 --insecure-port 选项设置为 0 。 |
已评分 | 1 | 传递 | IBM |
1.2.20 | 确保 --secure-port 选项未设置为 0 。 |
已评分 | 1 | 传递 | IBM |
1.2.21 | 确保 --profiling 选项设置为 false 。 |
已评分 | 1 | 传递 | IBM |
1.2.22 | 确保设置了 --audit-log-path 选项。 |
已评分 | 1 | 失败 | 共同承担 |
1.2.23 | 确保 --audit-log-maxage 选项设置为 30 或适当的选项。 |
已评分 | 1 | 失败 | 共同承担 |
1.2.24 | 确保 --audit-log-maxbackup 选项设置为 10 或适当的选项。 |
已评分 | 1 | 失败 | 共同承担 |
1.2.25 | 确保 --audit-log-maxsize 选项设置为 100 或适当的选项。 |
已评分 | 1 | 失败 | 共同承担 |
1.2.26 | 确保根据需要设置 --request-timeout 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.27 | 确保 --service-account-lookup 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
1.2.28 | 确保根据需要设置 --service-account-key-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.29 | 确保根据需要设置 --etcd-certfile 和 --etcd-keyfile 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.30 | 确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.31 | 确保根据需要设置 --client-ca-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.32 | 确保根据需要设置 --etcd-cafile 选项。 |
已评分 | 1 | 传递 | IBM |
1.2.33 | 确保根据需要设置 --encryption-provider-config 选项。 |
已评分 | 1 | 失败 | 共同承担 |
1.2.34 | 确保正确配置了加密提供程序。 | 已评分 | 1 | 失败 | 共同承担 |
1.2.35 | 确保 API 服务器仅使用强加密密码。 | 未评分 | 1 | 传递 | IBM |
1.3 控制器管理器
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
1.3.1 | 确保根据需要设置 --terminated-pod-gc-threshold 选项。 |
已评分 | 1 | 传递 | IBM |
1.3.2 | 确保 --profiling 选项设置为 false 。 |
已评分 | 1 | 传递 | IBM |
1.3.3 | 确保 --use-service-account-credentials 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
1.3.4 | 确保根据需要设置 --service-account-private-key-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.3.5 | 确保根据需要设置 --root-ca-file 选项。 |
已评分 | 1 | 传递 | IBM |
1.3.6 | 确保 RotateKubeletServerCertificate 选项设置为 true 。 |
已评分 | 2 | 失败 | IBM |
1.3.7 | 确保 --bind-address 选项设置为 127.0.0.1 。 |
已评分 | 1 | 传递 | IBM |
1.4 调度程序
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
1.4.1 | 确保 --profiling 选项设置为 false 。 |
已评分 | 1 | 传递 | IBM |
1.4.2 | 确保 --bind-address 选项设置为 127.0.0.1 。 |
已评分 | 1 | 传递 | IBM |
2 etcd 节点配置
查看 V 1.5 CIS Kubernetes 基准程序的 Etcd Node 配置结果。
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
2.1 | 确保根据需要设置 --cert-file 和 --key-file 选项。 |
已评分 | 1 | 传递 | IBM |
2.2 | 确保 --client-cert-auth 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
2.3 | 确保 --auto-tls 选项未设置为 true 。 |
已评分 | 1 | 传递 | IBM |
2.4 | 确保根据需要设置 --peer-cert-file 和 --peer-key-file 选项。 |
已评分 | 1 | 传递 | IBM |
2.5 | 确保 --peer-client-cert-auth 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
2.6 | 确保 --peer-auto-tls 选项未设置为 true 。 |
已评分 | 1 | 传递 | IBM |
2.7 | 确保将唯一的认证中心用于 etcd。 | 未评分 | 2 | 传递 | IBM |
3 控制平面配置
查看 V 1.5 CIS Kubernetes 基准程序的控制平面配置结果。
3.1 认证和授权
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
3.1.1 | 不应将客户机证书认证用于用户。 | 未评分 | 2 | 传递 | 共同承担 |
3.2 日志记录
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
3.2.1 | 确保创建最小审计策略。 | 已评分 | 1 | 失败 | 共同承担 |
3.2.2 | 确保审计策略涵盖关键安全问题。 | 未评分 | 2 | 失败 | 共同承担 |
4 工作程序节点安全性配置
查看 V 1.5 CIS Kubernetes 基准程序的工作程序 Node 安全性配置结果。
4.1 工作程序节点配置文件
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
4.1.1 | 确保 kubelet 服务文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
4.1.2 | 确保 kubelet 服务文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
4.1.3 | 确保代理 kubeconfig 文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
4.1.4 | 确保代理 kubeconfig 文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
4.1.5 | 确保 kubelet.conf 文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
4.1.6 | 确保 kubelet.conf 文件所有权设置为 root:root。 |
已评分 | 1 | 传递 | IBM |
4.1.7 | 确保认证中心文件许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
4.1.8 | 确保客户机认证中心文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
4.1.9 | 确保 kubelet 配置文件将许可权设置为 644 或更具限制性。 |
已评分 | 1 | 传递 | IBM |
4.1.10 | 确保 kubelet 配置文件所有权设置为 root:root 。 |
已评分 | 1 | 传递 | IBM |
4.2 Kubelet
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
4.2.1 | 确保 --anonymous-auth 选项设置为 false 。 |
已评分 | 1 | 传递 | IBM |
4.2.2 | 确保 --authorization-mode 选项未设置为 AlwaysAllow 。 |
已评分 | 1 | 传递 | IBM |
4.2.3 | 确保根据需要设置 --client-ca-file 选项。 |
已评分 | 1 | 传递 | IBM |
4.2.4 | 确保 --read-only-port 选项设置为 0 。 |
已评分 | 1 | 传递 | IBM |
4.2.5 | 确保 --streaming-connection-idle-timeout 选项未设置为 0 。 |
已评分 | 1 | 传递 | IBM |
4.2.6 | 确保 --protect-kernel-defaults 选项设置为 true 。 |
已评分 | 1 | 失败 | IBM |
4.2.7 | 确保 --make-iptables-util-chains 选项设置为 true 。 |
已评分 | 1 | 传递 | IBM |
4.2.8 | 确保未设置 --hostname-override 选项。 |
未评分 | 1 | 失败 | IBM |
4.2.9 | 确保 --event-qps 选项设置为 0 或确保相应事件捕获的级别。 |
未评分 | 2 | 传递 | IBM |
4.2.10 | 确保根据需要设置 --tls-cert-file 和 --tls-private-key-file 选项。 |
已评分 | 1 | 传递 | IBM |
4.2.11 | 确保 --rotate-certificates 选项未设置为 false 。 |
已评分 | 1 | 传递 | IBM |
4.2.12 | 确保 RotateKubeletServerCertificate 选项设置为 true 。 |
已评分 | 1 | 失败 | IBM |
4.2.13 | 确保 kubelet 仅使用强加密密码。 | 未评分 | 1 | 传递 | IBM |
5 Kubernetes 策略
查看 V 1.5 CIS Kubernetes 基准程序的 Kubernetes 策略结果。
5.1 RBAC 和服务帐户
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.1.1 | 确保仅在需要时使用 cluster-admin 角色。 |
未评分 | 1 | 传递 | 共同承担 |
5.1.2 | 最小化对私钥的访问。 | 未评分 | 1 | 失败 | 共同承担 |
5.1.3 | 尽量减少在角色和 ClusterRoles中使用通配符。 | 未评分 | 1 | 失败 | 共同承担 |
5.1.4 | 最大限度减少创建 pod 的访问权。 | 未评分 | 1 | 传递 | 共同承担 |
5.1.5 | 确保未主动使用缺省服务帐户。 | 已评分 | 1 | 失败 | 共同承担 |
5.1.6 | 请确保仅在需要时安装服务帐户令牌。 | 未评分 | 1 | 失败 | 共同承担 |
5.2 Pod 安全政策
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.2.1 | 尽量减少特权容器的许可。 | 未评分 | 1 | 传递 | 共同承担 |
5.2.2 | 最小化要共享主机进程标识名称空间的容器的许可。 | 已评分 | 1 | 传递 | 共同承担 |
5.2.3 | 最小化要共享主机 IPC 名称空间的容器的许可。 | 已评分 | 1 | 传递 | 共同承担 |
5.2.4 | 最小化要共享主机网络名称空间的容器的许可。 | 已评分 | 1 | 传递 | 共同承担 |
5.2.5 | 最大程度地减少使用 allowPrivilegeEscalation 的容器的许可。 |
已评分 | 1 | 传递 | 共同承担 |
5.2.6 | 最小化根容器的许可。 | 未评分 | 2 | 传递 | 共同承担 |
5.2.7 | 最小化具有 NET_RAW 功能的容器的许可。 | 未评分 | 1 | 传递 | 共同承担 |
5.2.8 | 最大程度地减少对具有新增功能的容器的许可。 | 未评分 | 1 | 传递 | 共同承担 |
5.2.9 | 最小化已分配功能的容器的许可。 | 未评分 | 2 | 传递 | 共同承担 |
5.3 网络策略和 CNI
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.3.1 | 确保正在使用的 CNI 支持网络策略。 | 未评分 | 1 | 传递 | IBM |
5.3.2 | 确保所有名称空间都定义了网络策略。 | 已评分 | 2 | 失败 | 共同承担 |
5.4 私钥管理
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.4.1 | 首选将私钥用作文件,而不是将私钥用作环境变量。 | 未评分 | 1 | 传递 | 共同承担 |
5.4.2 | 请考虑外部密钥存储器。 | 未评分 | 2 | 失败 | 共同承担 |
5.5 可扩展许可控制
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.5.1 | 使用 ImagePolicyWebhook 许可控制器配置 Image Provenance。 |
未评分 | 2 | 失败 | 共同承担 |
5.6 常规策略
部分 | 建议 | 已评分/未评分 | 级别 | 结果 | 职责 |
---|---|---|---|---|---|
5.6.1 | 使用名称空间在资源之间创建管理边界。 | 未评分 | 1 | 传递 | 共同承担 |
5.6.2 | 确保 seccomp 概要文件在 pod 定义中设置为 docker/default。 |
未评分 | 2 | 失败 | 共同承担 |
5.6.3 | 将安全上下文应用于 pod 和容器。 | 未评分 | 2 | 失败 | 共同承担 |
5.6.4 | 不应使用缺省名称空间。 | 已评分 | 2 | 失败 | 共同承担 |
IBM 补救措施和说明
查看 IBM 提供的有关 CIS Benchmark 结果的信息。
部分 | 补救/说明 |
---|---|
1.2.1 | IBM Cloud Kubernetes Service 利用 RBAC 进行集群保护,但允许匿名发现,每个 CIS Kubernetes Benchmark都认为合理。 |
1.2.10 | IBM Cloud Kubernetes Service 不会启用 EventRateLimit 因为它是 Kubernetes alpha 功能。 |
1.2.12 | IBM Cloud Kubernetes Service 不会启用 AlwaysPullImages 接纳控制器,因为它会覆盖容器的 imagePullPolicy 可能会影响性能。 |
1.2.22 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
1.2.23 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
1.2.24 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
1.2.25 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
1.2.33 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes 密钥管理服务(KMS)提供程序。 |
1.2.34 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes 密钥管理服务(KMS)提供程序。 |
1.3.6 | IBM Cloud Kubernetes Service 在每个工作程序节点重新装入或更新时轮换证书。 |
3.2.1 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
3.2.2 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes API 服务器审计。 |
4.2.6 | IBM Cloud Kubernetes Service 不会保护内核缺省值,以允许客户 调整内核参数。 |
4.2.8 | IBM Cloud Kubernetes Service 确保主机名与基础结构发出的名称匹配。 |
4.2.11 | IBM Cloud Kubernetes Service 在每个工作程序节点重新装入或更新时轮换证书。 |
4.2.12 | IBM Cloud Kubernetes Service 在每个工作程序节点重新装入或更新时轮换证书。 |
5.1.2 | IBM Cloud Kubernetes Service 会部署一些可能会进一步限制其 Kubernetes 私钥访问的系统组件。 |
5.1.3 | IBM Cloud Kubernetes Service 将部署一些可能进一步限制其 Kubernetes 资源访问权的系统组件。 |
5.1.5 | IBM Cloud Kubernetes Service 不会为每个默认服务账户设置 automountServiceAccountToken: false。 |
5.1.6 | IBM Cloud Kubernetes Service 部署了一些可以设置 automountServiceAccountToken: false 的系统组件。 |
5.2.1 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.2 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.3 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.4 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.5 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.6 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.7 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.8 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.2.9 | IBM Cloud Kubernetes Service 可以选择配置 pod 安全策略。 |
5.3.2 | IBM Cloud Kubernetes Service 具有一组 缺省 Calico 和 Kubernetes 定义的网络策略,并且可以选择添加 其他网络策略。 |
5.4.2 | IBM Cloud Kubernetes Service 可以选择 启用 Kubernetes 密钥管理服务(KMS)提供程序。 |
5.5.1 | IBM Cloud Kubernetes Service 可以选择 启用映像安全性实施。 |
5.6.2 | IBM Cloud Kubernetes Service 不会使用 seccomp 概要文件对所有 pod 进行注释。 |
5.6.3 | IBM Cloud Kubernetes Service 部署一些未设置 pod 或容器 securityContext 的系统组件。 |
5.6.4 | IBM Cloud Kubernetes Service 将一些 Kubernetes 资源部署到缺省名称。 |