容器能将应用从底层基础设施中抽象出来,令开发人员能够将应用打包成可在不同服务器上运行的较小模块,令应用的部署、维护和升级都更加简单易行。
但容器化应用的安全方法与保护传统应用环境的方法略有不同,因为容器化应用的安全漏洞更难以发现,它们所依托的系统镜像往往是未经过验证的,且容器领域的标准化仍在发展过程中。更重要的是,容器的启用和弃用都很方便快捷,从安全角度看略有点转瞬即逝的特点。
Red Hat 高级首席产品经理科斯腾·纽卡曼( Kirsten Newcomer )认为:“即便容器技术对部署它们的公司企业而言是个新概念,但其背后的理念应该是为人熟知的。”
在部署容器之前和应用容器的整个生命周期里,公司企业都应考虑该应用栈的安全。“虽然容器继承了Linux的很多安全特性,在该应用模式上仍有一些具体的问题需要考虑。”
以下就是公司企业在部署容器时需要检查的8个方面内容:
1. 秘密管理
正如其他应用环境中你需要安全地管理口令、API密钥和令牌等秘密,容器环境中也需要相应的秘密管理控制措施。
很多容器化应用要访问敏感信息,比如用户名和口令,所以你的容器平台得支持敏感信息安全功能,比如默认加密各种秘密、在容器启动时自动找回并注入秘密、防止容器访问其他容器的秘密等。
2. 镜像源
你得信任承载你容器应用的基础镜像。这意味着你需要知道这些镜像的来源,构建镜像所用的源代码,镜像的构建方式和地点,镜像运行的软件,以及镜像是否含有什么安全问题。
容器镜像是生产环境中应用程序的基础。公司企业需要做的最重要的事,就是确保自己的基础容器镜像是经过验证的、可信的、受支持的。
在确定镜像可信前一定要注意镜像代码中是否存在什么安全漏洞。容器镜像往往是从非信任源下载的,或者不是经过企业策划收录的,镜像完整性需受到管理和检查。
3. 容器工作流可见性
容器和容器编配工具令安全团队难以跟踪应用通信流,可能导致应用意外暴露在风险之中。
所以,企业使用的工具集应能驱动对容器内和容器间过程的可见性。该可见性是确保企业了解容器过程工作流的关键。
Docker、Kubernetes和OpenShift之类容器编配平台也应具备容器工作流可见性,这可以带来过程依赖性映射、策略创建及实施上的种种好处。
4. 标准化配置和部署
带安全漏洞的容器配置可能将IT环境暴露在更高的风险之中,具有数据泄露和敏感信息遗失的隐患。希望部署容器的企业需标准化配置和部署过程。
在这方面,企业应引入合规即代码(compliance-as-code)方法来检查Docker主机部署是否遵从了互联网安全中心(CIS)提供的各项标准。
另外,企业敏捷开发运维(DevOps)中也应集成进工具和API供开发人员和DevOps团队使用。企业应开始保护容器收集元数据和特定于容器部署的日志,了解Kubernetes之类的新编配环境。
5. 发现与监测
想要保护容器环境,就得能够发现和跟踪企业范围内的容器使用情况。企业得具备检测诸如资源瓶颈和漏洞等潜在问题的安全控制措施。
有效漏洞管理、合规操作和容器原生入侵检测/预防也是企业需要的。
6. 特定于容器的主机操作系统
NIST说,如果你想要减小自身容器环境的攻击界面,就不要使用通用操作系统。特定于容器的操作系统摒除了无关功能和服务,是专门设计来在容器中使用的简化版操作系统,留给攻击者利用来入侵的机会最少。
7. 容器风险优先级划分
有效安全的关键在于划分关键容器风险优先级。来自漏洞扫描、秘密管理、编配设置、服务配置、用户权限和注册表元数据的各项数据,可以提供与容器环境威胁相关的大量信息和上下文。应使用这些数据标定企业环境中的最大威胁暴露面,让开发人员可以在创建容器应用时有所注意。
8. 容器分组
不同威胁状况的容器都放到同一个主机操作系统内核上运行,就是在提升所有应用面临的风险。NIST建议,将按相同目的、同级别敏感度和相似威胁状况来分组。以这种方式分隔容器能实现深度防御,防止成功入侵了一组容器攻击者扩大他的战果。