面向 DevOps 的 Kubernetes 最佳安全实践

简介: Hello folks,我是 Luga,今天我们来分享一下与云原生安全相关的话题,即面向“DevOps”的 Kubernetes 最佳安全实践。

    Hello folks,我是 Luga,今天我们来分享一下与云原生安全相关的话题,即面向“DevOps”的 Kubernetes 最佳安全实践。

    如今,DevOps 和云原生理念事实上已成为各大企业和组织的标准实践。因此,软件开发人员及运维人员越来越希望利用这些更新的计算范例来加快上市时间,同时保持高可用性并降低资源成本。Kubernetes 就是这样一种平台,组织希望采用这种平台来加快软件交付速度。

    然而,不幸的是,在没有适当安全措施的情况下采用 Kubernetes 会增加我们业务的网络攻击风险。容器服务的分布式特性使我们的环境面临更多的攻击窗口。但是,若我们通过适当的安全协议和最佳实践,那么可以避免所构建的 Kubernetes Cluster 和应用程序免受这些潜在威胁,并确保我们的核心数据处于安全和机密状态。

 1

Kubernetes 安全重要性

   据 ionir 的一项调查结果显示,大约 60% 的受访者正在或已經在 Kubernetes 平台上运行不同種類的应用程序,50% 的受访者表示他们计划在未来 12 个月内也將其業務遷移至 Kubernetes 平台。此外,Red Hat 的《2022 年 Kubernetes 安全状况》调查报告指出,在 Kubernetes 部署方面,78% 的受访者选择 DevSecOps 作为他们的首選解决方案。

    在深入探讨 Kubernetes 安全性的细节之前,让我们先看看这些安全协议背后的概念。众所周知,Kubernetes 之所以能够如此安全,无非是因为它基于与主机操作系统完全隔离的 Linux 容器环境。即意味着如果攻击者想要尝试破坏我们所构建的 Kubernetes Cluster 平台,他们将只能够访问容器,而无法进入主机操作系统的其他部分。基于这种隔离特性,使得攻击者需要单独破坏集群中运行的每个容器才能访问或修改敏感数据,因此,导致攻击者在未经授权的情况下访问 Kubernetes Cluster 内的数据变得更加困难(如果不是不可能的话)。

    诚然, Kubernetes 为现代组织提供了诸多好处,并带来了较大收益,然而,我們需要注意的是,作为一种软件产品,这也意味着 Kubernetes 在某种特定的场景中可能会遭受到网络安全威胁。此外,再加上 Kubernetes 开源特性,使得它可能比商业软件更容易受到更多安全风险的影响。因此,在我们的环境中引入 Kubernetes 之前,我们应当确保有一个安全策略来保护我们的数据免受网络威胁。否则,攻击者可能会在未经授权的情况下访问我们的敏感数据并破坏所规划的业务流程,从而导致重大的经济及名誉受损。

 2

Kubernetes 安全最佳实践

    接下来,笔者将为大家分享一下 Kubernetes Cluster 安全的一些最佳实践,主要涉及如下不同层面。

使用可信容器镜像

    1、容器 Image 的选型

   首先,确保我们环境使用的是受信任的容器 Image。在实际的项目活动中,基于大家的“良好”习惯,可能会在网上随意 Pull 所想构建的应用镜像,然而,这些镜像的来源未知,可能会导致将来构建好的容器存在各种风险及漏洞。因此,在团队技术实力不允许的条件下,我们还是尽量使用受信任的开源镜像,毕竟,这些镜像经过安全扫描或认证,降低了在容器中引入恶意代码注入的风险。

    当然,若团队技术实力比较雄厚或是行业的龙头,有自己的标准体系,那么,可以基于自身的业务属性进行镜像的分级构建,从所依赖的底层 OS、中间件、第三方支撑组件以及到应用本身等。

    2、权限的赋予

    此外,在配置容器时应遵循最小权限原则。这意味着尽量减少我们所构建的容器比他们实际需要更多的访问权限。毕竟,这样做会增加违规的风险,因为恶意行为者如果没有权限就无法获得对操作系统的完全访问权限。

权限管理

    在实际的系统维护活动中,如何能够减轻资源的管理成本,乃是保护 Kubernetes Cluster 的关键的第一步。许多组织选择为需要集群范围权限的 Kubernetes 创建有限的服务账户。本质上就是为 Kubernetes 中需要集群范围权限的每个组件创建一个特殊的用户帐户以进行资源的合理维护。

    Kubernetes 有两类用户:

    1、集群用户用于集群的日常管理。他们可以创建 Pod 和 Services,但无权修改 Kubernetes API。

    2、经过身份验证的用户使用 Kubernetes API 进行身份验证,并拥有对 Kubernetes API 的完全访问权限。

Kubernetes Cluster 观测

    基于云原生生态环境,在实际的业务场景中,我们必须持续性观测所构建的 Kubernetes 工作负载和环境是否存在恶意的活动,以防止这些活动带来以下安全风险及威胁,具体如下:

    1、未经授权用户的访问:我们应该能够监控访问所构建的 Kubernetes Cluster 的用户的资源信息,例如,IP 地址等。理想情况下,这应该扩展到容器本身。这使我们可以查看访问的容器的请求是否是授权用户。

    2、API 滥用:若我们正在使用 Kubernetes 的 API,那么,应该监控 API 调用以确保恶意行为者不会滥用我们的 API 来破坏所构建的 Kubernetes Cluster。这可能包括监控来自未授权 IP 地址的 API 调用、失败的 API 调用或比预期时间更长的 API 调用等。

    3、数据泄露:除上述所述的 2 种风险之外,基于业务特性,我们还应该监控 Kubernetes Cluster 内的数据泄露问题,例如,可能涉及异常文件活动的监视、对敏感数据的意外和随机访问或异常网络流量。

CI/CD 中集成安全工具

    Kubernetes 安全工具/平台(例如 Kubescape、Datree、Trivy 等)可以帮助我们发现所编写的 Yaml 文件和 Cluster 中的安全问题和漏洞。运维、开发人员需要有一种方法将这些工具集成到 CI/CD 管道中。

引入 GitOps

    基于 GitOps ,使得我们在不同的场景中能够轻而易举地解决各种安全问题。以 Git 作为主要工具,一切都可以追溯,让观测变得更为容易。将 CI/CD 工具链与 GitOps 方法结合使用对于确保 Kubernetes 部署安全并在整个组织中维护标准方法至关重要。让我们深入了解如何实现它。

 3 

Kubernetes 安全扫描工具

    针对上述所述的 Kubernetes 安全工具/平台,让我们来了解一下每个工具的作用以及它在管道中所能检测到的具体内容。

Kubescape

     作为一个 K8s 开源工具,Kubescape 能够提供 Kubernetes 单一管理平台,包括风险分析、安全合规、RBAC 可视化工具和图像漏洞扫描。Kubescape 工具能够扫描 K8s 集群、YAML 文件和 HELM 图表,根据多个框架(如 NSA-CISA、MITRE ATT & CK®)检测错误配置、软件漏洞和早期 RBAC(基于角色的访问控制)违规 CI/CD 管道,即时计算风险评分并显示随时间变化的风险趋势。

    从本质上讲,Kubescape 主要扫描 Kubernetes Cluster 并展示不符合安全标准的 YAML 文件,具体如下所示:


+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
| SEVERITY |              CONTROL NAME              |                 DOCS                  |                                ASSISTANT REMEDIATION                                |
+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
| High     | Apply Security Context to Your         | https://hub.armosec.io/docs/cis-5-7-3 | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true        |
|          | Pods and Containers                    |                                       | spec.template.spec.containers[0].securityContext.runAsNonRoot=true                  |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false     |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.capabilities.drop=NET_RAW          |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE          |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.seccompProfile=YOUR_VALUE          |
+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
| Medium   | Allow privilege escalation             | https://hub.armosec.io/docs/c-0016    | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false     |
+          +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
|          | ……                                     |                                       | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE          |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.capabilities.drop[0]=YOUR_VALUE    |
+          +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
|          | Non-root containers                    | https://hub.armosec.io/docs/c-0013    | spec.template.spec.containers[0].securityContext.runAsNonRoot=true                  |
|          |                                        |                                       | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false     |
+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
| Low      | Immutable container filesystem         | https://hub.armosec.io/docs/c-0017    | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true        |
+          +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
|          | Label usage for resources              | https://hub.armosec.io/docs/c-0076    | metadata.labels=YOUR_VALUE                                                          |
|          |                                        |                                       | spec.template.metadata.labels=YOUR_VALUE                                            |
+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+

Trivy

    作为多合一的开源安全扫描工具,Trivy 是当下云原生生态领域中最流行的开源安全扫描器。基于其可靠、快速且易于使用特性,使得 Trivy 在漏洞查找和 IaC 错误配置、SBOM 发现、云扫描以及 Kubernetes 安全风险等不同场景下广泛应用

    基于此优秀特性,Aqua Trivy 也成为许多流行项目和公司的 DevOps 和安全团队的默认选择扫描仪。用户受益于定期的、高质量的贡献和创新的功能请求。同时,Aqua Trivy 也是 GitLab 代码库、Artifact Hub以及 Harbor 镜像仓库的默认扫描器。除此之外,Aqua Trivy 也已成为 RedHat 认证的扫描组件,其影响力甚广。

    其实,从本质上而言,Trivy 则主要扫描我们 Kubernetes Cluster 工作负载中的漏洞情况,具体如下所示:


=====================
Total: 1 (HIGH: 1, CRITICAL: 0)
┌──────────┬────────────────┬──────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐
│ Library  │ Vulnerability  │ Severity │ Installed Version │ Fixed Version │                           Title                           │
├──────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ httplib2 │ CVE-2021-21240 │ HIGH     │ 0.12.1            │ 0.19.0        │ python-httplib2: Regular expression denial of service via │
│          │                │          │                   │               │ malicious header                                          │
│          │                │          │                   │               │ https://avd.aquasec.com/nvd/cve-2021-21240                │
└──────────┴────────────────┴──────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘
Dockerfile (dockerfile)
=======================
Tests: 17 (SUCCESSES: 16, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
HIGH: Last USER command in Dockerfile should not be 'root'

Datree

    作为一个开源扫描器,Datree 主要用于检查 Kubernetes Cluster 文件资源是否存在错误配置。通常情况下,Datree 能够通过阻止不符合所预设定的策略的资源来防止配置错误。基于 Datree 内置的各种规则,我们无须担心自己编写策略。毕竟,其内置了多个领域的多种不同规则,主要涉及容器、工作负载、CronJob、网络、安全、弃用、Argo、NSA-hardening-guidelines 等。

    除此之外,Datree 还能够用于命令行、Admission Webhook,甚至作为 Kubectl 插件来针对 Kubernetes Cluster 对象运行策略进行扫描。

    与上述 2 种不同工具相比而言,Datree 显示我们的 Kubernetes 清单文件中是否存在任何错误配置。具体如下所示:


>  File: /Users/leonli/traefik_values.yml
[V] YAML validation
[X] Kubernetes schema validation
❌  k8s schema validation error: error while parsing: missing 'kind' key
Are you trying to test a raw Helm file? To run Datree with Helm - check out the helm plugin README:
https://github.com/datreeio/helm-datree 
[?] Policy check didn't run for this file
(Summary)
- Passing YAML validation: 1/1
- Passing Kubernetes (1.20.0) schema validation: 0/1
- Passing policy check: 0/1
+-----------------------------------+------------------------------------------------------+
| Enabled rules in policy "Default" | 21                                                   |
| Configs tested against policy     | 0                                                    |
| Total rules evaluated             | 0                                                    |
| Total rules skipped               | 0                                                    |
| Total rules failed                | 0                                                    |
| Total rules passed                | 0                                                    |
| See all rules in policy           | https://app.datree.io/login?t=mMcCiuo14nt2DZx1E7ZhA8 |
+-----------------------------------+------------------------------------------------------+

    作为部署和扩展应用程序的一种方式,Kubernetes 和容器化正迅速流行起来。然而,随着 DevOps 的普及,安全威胁也随之增加,尤其是在团队没有始终如一地遵循最佳实践的情况下。毕竟,安全是一件有趣的、难以捉摸的事情。

    诚然,Kubernetes 是一种用于交付容器化应用程序的流行技术,但扩展 Kubernetes 环境仍具有挑战性,每一个新部署的容器都会增加攻击面。要有效处理 Kubernetes 安全性,我们必须对每个托管容器和应用程序请求具有完整的可见性。Kubernetes 擅长编排,但不擅长安全。对于所有部署,必须采用适当的部署架构和安全最佳实践。

    Adiós !

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
Kubernetes Devops 应用服务中间件
基于 Azure DevOps 与阿里云 ACK 构建企业级 CI/CD 流水线
本文介绍如何结合阿里云 ACK 与 Azure DevOps 搭建自动化部署流程,涵盖集群创建、流水线配置、应用部署与公网暴露,助力企业高效落地云原生 DevOps 实践。
528 1
|
弹性计算 Kubernetes 数据处理
KubeRay on ACK:更高效、更安全
阿里云 ACK 以托管组件化的方式给客户提供快速搭建Ray集群的能力,并通过结合使用阿里云的调度,存储,日志与监控,给用户提供更佳使用体验。
|
9月前
|
存储 负载均衡 测试技术
ACK Gateway with Inference Extension:优化多机分布式大模型推理服务实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with Inference Extension组件,在Kubernetes环境中为多机分布式部署的LLM推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
10月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
10月前
|
存储 人工智能 物联网
ACK Gateway with AI Extension:大模型推理的模型灰度实践
本文介绍了如何使用 ACK Gateway with AI Extension 组件在云原生环境中实现大语言模型(LLM)推理服务的灰度发布和流量分发。该组件专为 LLM 推理场景设计,支持四层/七层流量路由,并提供基于模型服务器负载感知的智能负载均衡能力。通过自定义资源(CRD),如 InferencePool 和 InferenceModel,可以灵活配置推理服务的流量策略,包括模型灰度发布和流量镜像。
|
11月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
11月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
11月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。

推荐镜像

更多