对于任何存储机密数据或服务的组织而言,安全性都是一个至关重要的问题。 随着云计算、DevOps 和其他数字化转型计划的兴起,安全性日益成为 IT 部门的主要关注点。 采用 Kubernetes 为其基于容器的部署策略提供支持的企业还必须考虑怎样保护其 Kubernetes 集群中的敏感数据和服务。
Kubernetes 是一种开源集群管理软件,旨在自动化在任何环境中部署和扩展容器化应用程序的过程。 作为跨多个节点管理容器的行业标准,Kubernetes 受到许多 IT 团队的青睐,他们正在寻找一种更有效的方式来跨不同环境部署和管理容器。 然而,这种采用在网络安全方面也带来了一系列挑战。
为了跟上不断增加的网络攻击缓解措施,使用 Kubernetes 安全工具非常重要,例如 库贝斯卡普这是由 ARMO. 它用于扫描 Kubernetes 集群组件和远程存储库。 扫描您的集群后,Kubescape 将输出一份详细的扫描结果报告,该报告深入为您提供检测到的漏洞文档以及要更改哪些配置属性以消除检测到的漏洞。 它是免费和开源的。
以下是 Kubecape 将为您提供解决漏洞的解决方案示例。 解决方案将根据检测到的漏洞而有所不同。
禁用对 Kubelet 服务的匿名访问。
在配置文件中强制执行 Kubelet 客户端 TLS 身份验证应用程序凭据。
将安全上下文应用到您的 Pod 和容器。
确保正确配置了加密提供程序。
确保
--anonymous-auth
参数设置为 false。确保
--tls-cert-file
和--tls-private-key-file
参数被适当地设置。
在本文中,您将学习怎样在 Linux 上安装 Kubernetes 并扫描 Kubernetes 集群、GitHub 存储库和 YAML 文件。
先决条件
要成功完成本教程,您需要以下工具和平台:
Kubectl
一个跑步 Kubernetes 集群
怎样在 Linux 上安装 Kubescape
Kubescape CLI 可以在所有 Windows、macOS 和 Linux 版本上下载。 本教程仅涵盖 Linux 的安装。
Enter 使用以下命令在 Linux 上使用 Homebrew 安装 Kubescape CLI:
$ brew tap armosec/kubescape
使用以下命令查看刚刚下载的Kubescape版本的版本:
$ kubescape version
稍后使用以下命令更新 Kubescape:
$ kubescape update
使用以下命令获取所有 Kubescape 命令及其描述,以防您在第一次使用 Kubescape 时遇到困难:
$ Kubescape -help
怎样分析 Kubescape 结果
在使用 Kubescape 之前,学习怎样分析 Kubescape 扫描结果很重要。 这是分析 Kubescape 扫描结果的综合指南。
Kubescape 扫描报告将包含以下字段:
控制: 该字段告诉您 Kubescape 正在扫描的资源组件。
严重性分数: Kubescape将各种漏洞严重程度分为四类:
批判的
高的
中等的
低的
这些类别在这里提醒您检测到的漏洞的危害程度。 被评为高或关键的漏洞必须立即解决,因为它们会构成严重的危险。
文档: Kubescape 拥有关于任何检测到的漏洞的大量数据。 该字段将为您提供漏洞的文档链接。 本文档将为您提供有关检测到的漏洞的更多详细信息。
补救: 该字段建议您可以实施的解决方案来消除检测到的漏洞。 如果您的容器已获得升级权限,Kubescape 将告诉您删除权限。 它还可以深入到告诉您应该设置哪些属性和参数来解决问题。
在扫描报告表的底部,您将看到扫描结果摘要。 摘要为您提供集群或资源风险评分。 摘要还将包括 Kubescape 使用的不同安全框架分析的风险百分比:
DevOpsBest(风险:8.91)
ArmoBest(风险:5.53)
MITRE(风险:1.99)
CIS(风险:9.18)
美国国家安全局(风险:6.76)
AllControls(风险:4.72)
怎样使用 Kubescape 扫描您的集群
Kubernetes 容易受到多种不同类型的攻击:
攻击者可以伪装成管理员来访问特权帐户。
攻击者可以利用底层组件中的漏洞来访问敏感数据或中断服务。
攻击者可以使用错误配置的 Kubernetes 版本对其他系统发起恶意攻击。
为了更好地保护您的系统免受此类攻击,使用 Kubescape 定期扫描您的集群以检测潜在漏洞非常重要。
使用以下命令扫描您的集群:
$ kubescape scan --submit --enable-host-scan --format-version v2 --verbose
Kubescape 扫描将输出许多检测到的漏洞。 这是一个 example 检测到的安全问题:
+----------+--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
| SEVERITY | CONTROL NAME | DOCS | ASSISTANT REMEDIATION |
+----------+--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
| High | Apply Security Context to Your | https://hub.armosec.io/docs/cis-5.7.3 | spec.containers[0].securityContext.readOnlyRootFilesystem=true |
| | Pods and Containers | | spec.containers[0].securityContext.runAsNonRoot=true |
| | | | spec.containers[0].securityContext.allowPrivilegeEscalation=false |
| | | | spec.containers[0].securityContext.capabilities.drop=NET_RAW |
| | | | spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE |
+----------+--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
| Medium | Ensure that Service Account | https://hub.armosec.io/docs/cis-5.1.6 | spec.automountServiceAccountToken=false |
| | Tokens are only mounted where | | |
| | necessary | | |
+ +--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
| | Ensure that the | https://hub.armosec.io/docs/cis-1.3.1 | spec.containers[0].command[18] |
| | Controller Manager | | spec.containers[0].command[18]=--terminated-pod-gc-threshold=YOUR_VALUE |
| | --terminated-pod-gc-threshold | | |
| | argument is set as appropriate | | |
+----------+--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
| Low | Ensure that the Controller | https://hub.armosec.io/docs/cis-1.3.2 | spec.containers[0].command[18]=--profiling=false |
| | Manager --profiling argument | | |
| | is set to false | | |
+----------+--------------------------------+---------------------------------------+-------------------------------------------------------------------------+
如果您希望 Kubescape 以 PDF 格式发布扫描结果,请使用以下命令添加 --output
和 --format pdf
标志:
$ kubescape scan --format pdf --output [enter name of file here].pdf
怎样使用 Kubescape 扫描您的存储库
当您在中央存储库中管理源代码时,您将受益于对代码更改的更高可见性和控制。 然而,这些好处伴随着风险。 如果恶意用户获得了对您的存储库的访问权限,他们可以上传恶意代码,这些代码将传播给所有开发人员。 此外,如果您的用户不使用安全凭据访问存储库,他们可能会让未经授权的第三方访问它。
代码库广泛托管在 GitHub 存储库中,以促进团队合作和协作。 但是,在开源项目中与许多人合作时会出现许多安全问题,例如庞大的秘密。 Kubescape 还会扫描您的本地和远程存储库。 如果您的存储库托管在 GitHub 上,您将需要存储库链接。
使用以下命令扫描托管在 GitHub 上的存储库:
$ kubescape scan [enter GitHub repository link here]--submit
使用 Kubescape 扫描您的存储库后,让它们保持最新。 您的源代码存储库可能是您最有价值的数字资产之一。 这意味着您应该定期更新他们的安全软件。 源代码存储库通常提供用于自动应用安全更新的内置功能。 安装定期更新将确保您拥有软件的最新安全补丁。
扫描舵图
如果您的集群或存储库有 掌舵图 安装后,Kubescape 会将其包含在集群或存储库扫描过程中。 Helm 图表中检测到的漏洞将显示在漏洞扫描报告中。 您不必单独扫描 Helm 图表。
扫描 YAML 配置文件
将代码部署到生产环境时,必须降低引入错误的风险,并让开发人员尽可能轻松地阅读和理解他们的代码。 YAML 文件是存储系统配置数据的常用方式。 虽然它们作为人类可读的文本很容易阅读,但它们可能包含错误配置。
如果任何人都可以看到关键数据,它们还会带来安全风险。 为避免这些风险并简化部署过程,您应该从一开始就在项目中实施 YAML 文件安全最佳实践。
Kubescape 通过扫描和查找漏洞来提高 YAML 配置质量。 使用以下命令扫描您的 YAML 配置文件:
$ kubescape scan first-deployment.yaml
不要在 YAML 文件中存储密码或机密数据。 YAML 文件未加密,因此很容易以纯文本形式读取其内容。 这使得它们不适合存储敏感信息,如密码或密钥。 使用秘密加密工具,如 密封的秘密 帮助您存储敏感信息。
使用 Kubescape 检测特权容器
只有一些用户需要获得 root 访问权限; 容器也是如此。 Docker 容器是在 Docker 引擎之上实现的,它由主机运行,必须不惜一切代价加以保护。 根或特权容器可以访问主机,这与对主机的访问权限有限的普通容器不同。 特权容器本身是无害的。 当未经授权的人员和黑客利用其对主机的无限制访问权时,就会出现问题。
当黑客可以访问主机时,攻击面会变大。 如果黑客利用主机漏洞,黑客可以窃取存储在主机中的秘密并关闭服务器。 特权容器也可以绕过安全测试。 如果被黑客利用,这就是特权容器的危害。
当需要直接访问主机以执行诸如通过 FUSE 在 pod 内安装 S3 存储桶和共享主机目录等任务时,将使用特权容器。 然而,特权容器不是一个好主意,必须不惜一切代价加以阻止。 不使用特权容器不会阻止攻击者利用容器漏洞。 尽管如此,它仍将减少表面攻击,因为黑客在安全漏洞期间无法访问主机。
使用 Kubescape,您可以使用以下命令扫描集群以检测特权容器:
$ kubescape scan control "Privileged container" --format pdf --output privcontainer.pdf
Docker 还有一个命令可用于检查特定容器是否具有特权容器。 使用以下需要您的容器 ID 的命令来检查您的容器是否具有特权:
$ docker inspect --format="{{.HostConfig.Privileged}}" [enter your container ID here]
如果您的容器有特权,上述命令将输出 True,如果没有特权,则输出 False。
Kubescape 和自动化
Kubernetes 有很多分布式组件需要监控,例如:
豆荚
部署
节点
控制平面
接口服务器
调度程序
库贝莱特
Kube-代理
服务
等
配置图
广泛的 Kubernetes 架构需要更明确的安全策略和措施。 这是必须优化和充分利用自动化的地方 close 开发商留下的空白。 安全自动化是您的 Kubernetes 环境和 CI/CD 管道可以获得的最大保护。 人类会犯错,而自动化不会。 人类必须睡觉; 自动化保持 24/7 全天候监控您的基础架构。 一个配置良好的自动化系统会给你带来奇迹。
Kubescape 可以与以下 CI/CD 管道工具和平台集成,以提高安全自动化:
Kubescape 将通过其文档向您介绍您从未听说过的漏洞。 Kubescape 将使您了解集群的安全性和健康状况的最新信息。
学到更多
要了解有关 Kubescape 的更多信息,请参阅 项目文件.
文章标题 名称(可选) 电子邮件(可选) 描述
发送建议
注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com