为Docker容器保驾护航的8款工具

为Docker容器保驾护航的8款工具

瞻博网络的网络策略主管James Kelly说:“不可能有哪种工具能一应俱全,并保护企业组织远离可能出错的所有方面。”Kelly认为,有很多方面需要考虑,包括安全编程实践、构建签名、映像签名、版本管理、安全网络、为下一代防火墙(NGFW)针对入口-出口和东西流量执行深度包检查、高级威胁及预防、流量加密、访问控制列表、微分段和应用程序API身份等。

安全在大规模环境下变得尤为重要。为此,Kelly坚称开发人员和管理员必须考虑“多租户、微分段以及容器化的NGFW服务链。”

但是,开发人员和管理员可以使用哪些工具来增强容器部署的安全性呢?不妨一探究竟。

开发映像

容器方面最大的安全问题之一是构建那些容器的映像。如果你基于受损的映像开发容器,会造成严重破坏。为此,Alcide的首席技术官兼联合创始人Gadi Naor说:“容器方面的最佳实践是创建一个含有构建工具的开发容器映像,针对特定语言的工具链团队需要对其工程进行迭代。通常,你从基础操作系统映像开始入手,然后将相关软件包添加到所使用的运行时语言中。”

换句话说,内部构建自己的映像。这应该被认为是部署容器的安全支柱。

Harbor

Harbor是一种开源容器注册中心,若与Red Hat的Clair漏洞扫描工具结合使用,还可以扫描映像查找已知漏洞。安装后,Harbor充当存储库,然后可以扫描任何上传的映像以查找问题。对于所有容器开发人员和管理员来说,这样的扫描平台都应该被视为必不可少的工具。了解映像文件存在的问题对于确保你在部署安全的容器大有帮助。

基于角色的访问控制

除了使用安全映像外,RBAC(基于角色的访问控制)应该是每个容器工程师都完全了解的工具。RBAC确定是否允许用户通过本地角色和绑定对特定项目执行操作。如果你允许开发人员访问集群,这意味着他们也可以访问Kubernetes API。为什么这如此重要?据Red Hat的容器首席产品经理Scott McCarty声称:“如果开发人员访问这些API,无论在间接的开发环境中还是在直接的生产环境中(用于故障排除),基于角色的访问对于限制恶意或无意造成的破坏都至关重要。”

Hadolint

Hadolint是Haskell Dockerfile代码检查工具(linter)。正如你可以代码检查编程语言那样,也可以代码检查静态文件。但为什么代码检查Dockerfile呢?很简单:检查优化、编程错误、缺陷、类型错误、可疑构件以及可能的故障。代码检查Dockerfile不仅带来更整洁的代码,还杜绝错误,带来更小的Docker映像。更棒的是,Hadolint可以集成到你的CI管道中,因此检查你的代码可自动执行。针对使用代码检查工具,Naor说:“它将促使此类用户完善其容器创建技能,同时直接洞察安全最佳实践。”

Snyk

Snyk有助于确定构建期间潜在的运行时应用程序风险。具体来说,如果整合到CI管道中,Snyk可以不断发现并修复容器中的漏洞。Snyk的工作原理是,检查相关的OS软件包管理器清单信息来扫描OS软件包(每个映像),然后基于此信息,Snyk分析映像查找关键应用程序二进制文件,并将结果与​​已知的漏洞数据库进行比较。不像Harbor/Clair仅扫描映像查找漏洞,Snyk还可以扫描你的Dockerfile(如果包含在命令行中),对你的基本映像进行更详细的分析。

WhiteSource

WhiteSource是一种开源安全和许可证合规管理平台,可自动识别所构建软件中的所有组件和依赖项。使用WhiteSource搜索开源组件时,其浏览器插件会显示任何报告的错误、安全风险、不良许可证(由配置的策略来定义)、每个组件的新版本等等。若能使用类似WhiteSource的工具,你就可以对想要添加到容器构建中的组件做出更合理的决策。

Kubernetes Advisor

Alcide提供了Kubernetes Advisor,这个多集群漏洞扫描器可以执行最佳实践和合规检查,以便扫描漏洞、查找放错位置的机密内容和过多的机密访问权限、加固工作负载、Istio安全配置、Ingress控制器的最佳安全实践和Kubernetes API服务器访问权等。一旦你设置好了Kubernetes Advisor,可以通过一种易于使用的、基于Web的仪表板,对Kubernetes集群进行持续的审核和合规。

Styra

如果你希望面对整个Kubernetes生态系统定义、执行和验证安全,可能应该考虑Styra。 Styra结合了开源和专有解决方案,以提供合规保护机制,从而简化安全应用程序的合规。有了Styra,你不再需要将合规硬编码到软件中。相反,你只需定义一次策略,之后就可以随时随地执行策略。Styra包括内置的合规策略库、在提交之前能够监测和验证策略变更、使用声明性模型来定义所需状态以及防止安全漂移等。

相关推荐