前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >实践分享:基于DevOps流程的容器安全看板

实践分享:基于DevOps流程的容器安全看板

作者头像
米开朗基杨
发布于 2022-11-07 09:13:13
发布于 2022-11-07 09:13:13
1.3K01
代码可运行
举报
文章被收录于专栏:云原生实验室云原生实验室
运行总次数:1
代码可运行

容器作为实现云原生的核心技术,凭借其轻量化、便捷性、高弹性的特点成为释放了云计算效能红利的重要技术之一。但容器作为新的防护对象,也面临着诸多安全风险。要确保容器安全,不仅要保护容器构建、分发和执行过程中涉及的组件堆栈,而且要涵盖容器开发、分发、执行、入侵检测和事件响应等不同阶段。基于此,青藤云安全总结得出了适用于 DevOps 工作流程的 14 个容器安全最佳实践。

文末可下载完整版的《DevSecOps 发展与解决方案》

防御阶段:安全左移的 6 个步骤

1. 在 CI/CD 过程中集成代码扫描工具

在分发应用程序之前甚至构建应用程序时,可以通过扫描代码来检测错误或是否存在潜在的可利用漏洞。用户可以在开发者机器上运行 IAST、DAST、SAST 工具,也可以在 CI/CD 过程中整合代码扫描工具可以确保代码质量得到保证。例如,如果某些检查不合格,就可以默认阻止拉取请求。

2. 通过依赖项扫描减少外部漏洞

只有非常小的应用程序才不需要第三方库或框架。但在代码中重复使用外部依赖项意味着这些依赖项中存在的错误和漏洞也会成为应用程序的一部分。因此,在应用程序构建过程中,应该整合依赖项扫描。软件包管理工具,如 npm、maven、go 等,可以将漏洞数据库与应用依赖关系相匹配,并提供有用的警告。

3. 使用镜像扫描工具来分析容器镜像

应用程序构建完成后,通常会被打包成为容器镜像。用户可以使用镜像扫描工具来分析容器镜像,以此来发现操作系统包(rpm、dpkg、apk 等)中的漏洞,以及 Java、Node、Python 等软件包依赖项中的漏洞。

镜像扫描很容易实现自动化,并进行强制执行。可以将镜像扫描纳入 CI/CD 过程中,当新的镜像被推送到镜像仓库时会触发镜像扫描,或者在集群准入控制器中进行验证,以确保不符合要求的镜像不允许运行。

4. 避免常见的配置错误

如果主机、容器运行时、集群或云资源配置错误,很可能会导致攻击。一些常用基准、最佳实践和加固指南为我们介绍了如何发现这些错误配置,其中,CIS 基准是一个非常重要的基准。CIS 是一个非营利组织,为许多不同的环境发布免费基准,目前已经成为事实上的安全基准标准。为了确保高效检查此类容器安全配置,可以进行自动化检查。青藤蜂巢基于 CIS Benchmark 的 Docker 和 Kubernetes 基准要求,涵盖多版本主流操作系统、Web 应用、数据库等,可以自动化检查一些常见安全配置错误。

5. 整合 IaC 扫描

云资源管理起来纷繁复杂,而像 Terraform 或 CloudFormation 这样的工具有助于缓解这一重担。基础设施即代码(IaC)存储在存储库中并在存储库中进行版本更新,通过自动化功能实现规定的变化更新,让现有基础设施与声明保持一致。如果用户使用了基础设施即代码,可以结合 IaC 扫描工具,如 Apolicy、Checkov、tfsec 或 cfn_nag,在创建或更新基础设施之前验证其配置。

6. 通过主机扫描来确保主机安全

保护主机安全与保护容安全同样重要。运行容器的主机通常是由含有 Linux 内核的操作系统、存储库、容器运行时以及其他在后台运行的公共服务组成。这些内容中的任何一个组件都可能存在漏洞或配置错误,并可能被用作访问正在运行的容器的入口点或造成拒绝服务攻击。通过主机扫描工具可以检测出内核、标准库、甚至是在主机上运行的容器中的已知漏洞。

保护阶段:安全运行容器

7. 资源保护

容器和主机都可能含有漏洞,而且不断有新的漏洞被发现。然而,危险不在于主机或容器漏洞本身,而在于攻击向量和可利用性。因此,限制可以访问主机、云账户和资源的用户数量,并通过使用不同的机制阻止不必要的网络流量。

● 通过云提供商的 VPC、安全组、网络规则、防火墙规则等,限制虚拟机、VPC 和互联网之间的通信。

● 通过主机层面的防火墙,只暴露最小服务集。

● 集群中的 Kubernetes 网络策略和其他工具,如服务网或 API 网关,可以增加一个额外的安全层来过滤网络请求。

8. 限制运行时的容器权限

容器内可利用的漏洞的影响范围主要取决于容器的权限,以及与主机和其他资源的隔离程度。运行时配置可以通过以下方式减轻现有和未来漏洞的影响。

● 有效用户。 不要以 root 身份运行容器。最好是使用随机 UID(如 Openshift),不映射到主机中的真实用户,或者在 Docker 和 Kubernetes 中使用用户命名空间功能。

● 限制容器权限。Docker 和 Kubernetes 提供了删除 Linux Capabilities 的方法,不允许存在特权容器。Seccomp 和 AppArmor 可以对容器的可执行操作范围添加更多限制。

● 增加资源限制。 避免容器消耗所有的内存或 CPU,导致其他应用程序饿死。

● 要小心共享存储或卷。 特别是像 hostPath 这样的东西,以及从主机上共享文件系统。

● 其他选项如 hostNetwork、hostPID 或 hostIPC:Kubernetes 让容器与主机共享一个命名空间,减少隔离,很容易造成容器逃逸。

● 定义 Pod 安全策略(PSPs)和安全上下文约束(Openshift 的 SCCs)。 在集群中设置护栏,防止容器配置错误。PSP 和 SCC 是准入控制器,在安全上下文不符合定义的策略时,拒绝创建 Pod。

9. 有效管理容器漏洞

不是所有的漏洞都有修复措施,也不是所有的漏洞现在就能轻易被利用,此外,有些漏洞可能需要对主机进行本地甚至物理访问才能被利用。这时就需要良好的漏洞管理策略,包括:

● 优先考虑需要修复的内容。 我们应该专注于分数或严重程度较高的主机和容器漏洞,这通常意味着它们可以远程利用,并且有公开的利用方法。如果是旧的、众所周知的漏洞,那么它们被利用的可能性就很大。

● 评估环境中漏洞的严重程度。 供应商或 Linux 发行版提供的分数或严重程度具有很好的参考价值。但是,如果一个漏洞可以被远程利用,并且存在于暴露于互联网的内部主机的软件包中,那么应该给这个漏洞一个较高的评分。评估上下文中的影响,并制定相应的漏洞评估计划。

● 规划好修复措施,以保护容器和主机。 创建和跟踪工单系统,将漏洞管理纳入标准开发工作流程之中。

● 在确定没有受到影响时,可以忽略该漏洞。 这会减少噪音。可以考虑短期内忽略该漏洞,而不是永久性地忽略,这样就可以在以后进行重新评估。

检测阶段:异常行为告警

防御和保护阶段的安全措施可以有效限制攻击者的行动范围,但攻击总是会发生,问题只是何时会发生。因此,我们需要检测异常和意外行为,以便采取纠正措施,防止安全事件再次发生。MITRE ATT&CK 提供了一个广泛的 " 基于现实世界观察 " 的战术和技术清单,既可以用来采取预防措施,也可以用来分析活动以检测异常行为。而且,MITRE ATT&CK 容器矩阵涵盖了专门针对容器的攻击技术。《云原生安全技术实践指南》对针对容器和 K8S 的攻击技术进行了详细解析。

10. 设立实时事件和日志审计

通过审计不同来源的日志和事件,并分析异常活动,可以发现对容器安全的威胁。事件的来源包括:

● 主机和 Kubernetes 日志

● 云日志(AWS 的 CloudTrail、GCP 的 Activity Audit 等)

● 容器中的系统调用

11. 监控资源

资源使用量过大(CPU、内存、网络)、可用磁盘空间快速减少、错误率超过平均水平或延迟增加,可能表示系统中正在发生一些异常情况。可以利用 Prometheus 工具等收集指标。配置警报,在数值超过预期阈值时迅速收到通知。使用仪表盘来观测指标的演变,并与系统中发生的其他指标和事件的变化关联起来。

响应阶段:事件响应与取证

12. 隔离和调查

在检测到系统中发生了安全事件后,就要采取行动阻止威胁并限制进一步造成损害。不要只是杀死容器或关闭主机,而是考虑隔离、暂停、拍摄快照。通过取证分析,我们可以通过很多线索来搞清楚发生了怎样的入侵、何时发生的、如何发生的。

13. 解决配置错误问题

导致主机、容器或应用程序被攻击的原因可能是配置不当,如权限过高、暴露了端口或服务,或漏洞利用。如果是错误配置引起的,则可以修复错误的配置以防止再次发生此类攻击。如果是漏洞利用,也许可以通过改变配置来防止漏洞被利用(或至少限制其范围),如防火墙、增强用户限制、用额外权限或 ACL 保护文件或目录等。

14. 漏洞补丁

虽然漏洞数量非常大,但用户还是要尽可能修复漏洞:

● 对于操作系统软件包(dpkg、rpm 等)。 首先检查发行商提供的更新版本中是否包含了修复程序。如果有,要更新软件包或容器的基础镜像。

● 较旧的发行版本。 供应商有时会停止提供更新版本和安全修复,因此,用户需要提前确认使用的是供应商支持的版本。

● 对于语言包,如 NodeJS、Go、Java 等。 检查依赖项的更新版本。如果没有办法确认进行重大版本更新会给业务造成多大影响,可以先进行小版本更新,修复一些简单的安全问题。

● 发行版不提供补丁版本。 仍然有可能存在一个修复程序,可以手动应用或回传。这可能会麻烦一些,但对于那些对系统至关重要的软件包,以及还没有官方固定版本的情况下,还是有必要的。

总结

容器作为云原生时代一项新的基础设施,面临着新的安全风险,需要新的安全防护措施。本文提出的针对 DevOps 流程的 14 项容器安全最佳实践,是针对云原生时代容器的特定环境与风险提出的,对于确保容器安全运行发挥着重要作用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
.NET 10静默优化实战:LINQ与性能调优深度解析
在.NET 9中处理海量数据集时,IEnumerable的抽象层带来了高达83%的性能损耗。.NET 10通过底层优化将开销压缩至10%,实测客户数据流水线吞吐量提升15%:
郑子铭
2025/06/13
880
.NET 10静默优化实战:LINQ与性能调优深度解析
Unity性能调优手册9Unity的Script:空生命周期函数,tags,组件,string,显式销毁的类(Texture2D、Sprite、Material),burst
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/
立羽
2023/11/27
5900
Unity性能调优手册9Unity的Script:空生命周期函数,tags,组件,string,显式销毁的类(Texture2D、Sprite、Material),burst
Unity性能调优手册2基础:硬件,渲染,数据,Unity如何工作,C#基础,算法和计算复杂度
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/ 性能调优需要对整个应用程序进行检查和修改。因此,有效的性能调整需要广泛的知识,从硬件到3D渲染再到Unity机制。因此,本章总结了执行性能调优所需的基本知识
立羽
2023/11/19
1K0
Unity性能调优手册2基础:硬件,渲染,数据,Unity如何工作,C#基础,算法和计算复杂度
Unity性能调优手册1:开始学习性能调优
翻译自https://github.com/CyberAgentGameEntertainment/UnityPerformanceTuningBible/
立羽
2023/09/27
9810
Unity性能调优手册1:开始学习性能调优
从代码到性能:20个硬核.NET优化技巧,避开90%开发者踩过的坑
我深耕.NET技术栈十余年,专注于C#代码优化,深知普通开发者与高性能工程师之间的差距往往源于对细节的把控。性能优化并非依赖最新硬件或盲目扩展,而是从编码之初就贯彻高效原则。
郑子铭
2025/04/15
2290
从代码到性能:20个硬核.NET优化技巧,避开90%开发者踩过的坑
使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
本文是一篇不可多得的好文,MemoryPack 的作者 neuecc 大佬通过本文解释了他是如何将序列化程序性能提升到极致的;其中从很多方面(可变长度、字符串、集合等)解释了一些性能优化的技巧,值得每一个开发人员学习,特别是框架的开发人员的学习,一定能让大家获益匪浅。
InCerry
2023/03/08
1.9K0
使用.NET7和C#11打造最快的序列化程序-以MemoryPack为例
foreach, 用还是不用,这是一个问题~
  接触过C#循环的朋友,想来对foreach应该不会陌生,相比一般的for循环方式,foreach显得更加优雅简洁,Unity支持C#脚本,平日使用中数组列表什么的自然也会遇到不少,想来foreach定然大有用武之地呀!
用户2615200
2018/08/02
1.6K0
foreach, 用还是不用,这是一个问题~
内存优化:Boxing
如今,许多开发人员都熟悉性能分析的工作流程:在分析器下运行应用程序,测量方法的执行时间,识别占用时间较多的方法,并致力于优化它们。然而,这种情况并没有涵盖到一个重要的性能指标:应用程序多次GC所分配的时间。当然,你可以评估GC所需的总时间,但是它从哪里来,如何减少呢? “普通”性能分析不会给你任何线索。
用户10786849
2024/06/07
1950
内存优化:Boxing
ILRuntime热更新
项目/教程地址:传送门 IL热更优点: 1、无缝访问C#工程的现成代码,无需额外抽象脚本API 2、直接使用VS2015进行开发,ILRuntime的解译引擎支持.Net 4.6编译的DLL 3、执行效率是L#的10-20倍| 4、选择性的CLR绑定使跨域调用更快速,绑定后跨域调用的性能能达到slua的2倍左右(从脚本调用GameObject之类的接口) 5、支持跨域继承 6、完整的泛型支持 7、拥有Visual Studio的调试插件,可以实现真机源码级调试。支持Visual Studio 2015 U
[Sugar]
2022/09/21
2.6K0
项目优化之优化技巧进阶(Unity3D)
做游戏经验比较丰富的人都知道,优化的好坏一直是一个游戏的评判标准之一,它直接影响着玩家们的游戏体验,优化一直是项目中开发周期比较长的一个点,也是开发者头疼的一个问题,要求掌握的知识点比较全面,经验也要求比较丰富。 这篇文章参考很多文章的知识点,加以总结与学习,从最基础的概念讲起,配合讲解各种优化技巧,希望大家可以在我的文章中学到一些东西。
恬静的小魔龙
2022/08/07
2.1K0
项目优化之优化技巧进阶(Unity3D)
C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的。但是在编译代码时,查询语法必须转换为针对 .NET 公共语言运行时 (CLR) 的方法调用。 这些方法调用会调用标准查询运算符(名称为 Where、Select、GroupBy、Join、Max 和 Average 等)。 可以使用方法语法(而不查询语法)来直接调用它们。
张传宁IT讲堂
2019/09/17
4.3K0
C#3.0新增功能09 LINQ 基础07 LINQ 中的查询语法和方法语法
20个高效 .NET 开发技巧:让你的 C# 代码飞起来!
我已经使用 .NET 超过十年,优化过许多 C# 代码,并掌握了那些将普通开发者与高性能工程师区分开来的微妙细节。性能优化并不依赖于最新的硬件或扩展规模,而是从一开始就高效地编写代码。
郑子铭
2025/04/30
1600
20个高效 .NET 开发技巧:让你的 C# 代码飞起来!
Unity 游戏的 String interning 优化
本文探讨了在 Unity 中使用字符串池(string pooling)以减少内存分配和减少垃圾回收问题的方法。通过使用 C# 的 `string.Intern()` 方法,我们可以将重复的字符串放入一个全局的字符串池中,从而避免在程序运行过程中产生大量无用的字符串。这种方法特别适用于内存受限的环境,如嵌入式设备和性能要求较高的游戏引擎。同时,作者还介绍了一种自定义字符串类,该类提供了类似于 `string.Intern()` 的功能,但允许更细粒度的控制,包括指定哪些字符串要放入池中以及何时从池中移除。
serena
2017/08/22
1.2K0
Unity 游戏的 String interning 优化
[C#] 走进 LINQ 的世界
    技巧:《Linq To Objects – 如何操作字符串》 和 《Linq To Objects – 如何操作文件目录》
全栈程序员站长
2022/09/06
5.1K0
[C#] 走进 LINQ 的世界
【翻译】.NET 5中的性能改进
在.NET Core之前的版本中,其实已经在博客中介绍了在该版本中发现的重大性能改进。从.NET Core 2.0到.NET Core 2.1到.NET Core 3.0的每一篇文章,发现 谈论越来越多的东西。然而有趣的是,每次都想知道下一次是否有足够的意义的改进以保证再发表一篇文章。.NET 5已经实现了许多性能改进,尽管直到今年秋天才计划发布最终版本,并且到那时很有可能会有更多的改进,但是还要强调一下,现在已提供的改进。在这篇文章中,重点介绍约250个PR,这些请求为整个.NET 5的性能提升做出了巨大贡献。
李明成
2020/07/20
3.8K0
.NET性能优化-使用ValueStringBuilder拼接字符串
这一次要和大家分享的一个Tips是在字符串拼接场景使用的,我们经常会遇到有很多短小的字符串需要拼接的场景,在这种场景下及其的不推荐使用String.Concat也就是使用+=运算符。 目前来说官方最推荐的方案就是使用StringBuilder来构建这些字符串,那么有什么更快内存占用更低的方式吗?那就是今天要和大家介绍的ValueStringBuilder。
用户9127601
2022/06/09
5510
.NET性能优化-使用ValueStringBuilder拼接字符串
C#规范整理·集合和Linq
LINQ(Language Integrated Query,语言集成查询)提供了类似于SQL的语法,能对集合进行遍历、筛选和投影。一旦掌握了LINQ,你就会发现在开发中再也离不开它。
郑子铭
2023/08/30
5410
C#规范整理·集合和Linq
掌握25个C#实战技巧:从代码优化到高效开发
C#持续进化,每个版本都引入新特性,助你编写更高效、更优雅的代码。掌握以下技巧,不仅能提升代码质量,还能让开发过程更愉悦。
郑子铭
2025/04/18
2140
掌握25个C#实战技巧:从代码优化到高效开发
Java 代码性能调优“三十六”策
代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。
技术zhai
2018/09/05
4580
Java 代码性能调优“三十六”策
Unity IL2CPP 游戏分析入门
很多时候App加密本身并不难,难得是他用了一套新玩意,天生自带加密光环。例如PC时代的VB,直接ida的话,汇编代码能把你看懵。
奋飞安全
2022/11/15
3.3K0
推荐阅读
相关推荐
.NET 10静默优化实战:LINQ与性能调优深度解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验