【51CTO.com快译】从技术上讲,相比过去那些重量级的虚拟机,Docker为软件开发人员提供了可扩展的数据包和发布代码的容器,为应用程序的灵活性和可移植性需求提供了一种可持续的业务模型。而作为一种基于云的存储库,最终用户既能够在Docker Hub中发布各种Docker镜像,又可以将它们拉出来,用于各种云原生基础架构的部署。由于Docker镜像不但轻巧、可移植,而且能够在系统之间轻松地被移动,因此任何人都可以创建一组标准化的Docker容器镜像,将其存储在存储库中,以便通过Docker Hub在整个组织中共享它们。
Docker镜像的威胁
不过,用户不能盲目地并从Docker Hub中直接提取镜像。仅在2018年,Docker Hub上就被发现了17种恶意Docker镜像(请参见--https://threatpost.com/malicious-docker-containers-earn-crypto-miners-90000/132816/),攻击者已从中牟利90,000美元。由于Docker Hub中帐户和项目是相互联系的,一旦安全漏洞被发现,准确地找到那些可能受到严重影响的资产,会是一项艰巨的任务。同时,这也会减慢从开发到运营、再到部署的整个过程。因此,DevOps团队不得不花费大量的时间,通过跟踪镜像的自动构建与存储,既检查相关帐户和项目中的可疑活动,又需要重设已感染帐户的密码,删除并替换已受攻击的镜像。
Docker许可证的风险
Docker镜像往往是由那些具有不同许可证条款和合规性义务的软件,以及操作系统包所组成。为了在企业中管控容器使用的风险,我们需要了解所有这些依赖关系,以便根据公司的安全准则、以及开源策略进行合规性评估。
在实际操作中,我们可以借用自动化工具来识别镜像,获悉操作系统的所有软件包、已捆绑的应用、以及从属库,进而汇总各个层面上的许可证,以便识别出不合规的软件包,最终降低企业在法律和业务上的风险。例如,由JFrog提供的Xray是一种常见的安全扫描解决方案。它可以通过深入到Docker镜像中,来识别许可证的合规性,并在安全研究人员发现了新的安全漏洞时,及时对其进行标记。
缓解风险
基于安全方面的考虑,Docker Hub在提供服务的同时,采取了如下两个方面的限制:
- 镜像保留限制
那些使用免费账号(这在开源项目和自动化构建中十分常见)在DockerHub上存储的镜像,会受到六个月的镜像保留政策限制。也就是说:如果这些镜像在六个月后处于非活动状态,那么就会被直接删除掉。
- 下载节流
Docker对匿名用户引入了“每六小时只允许100次请求”的下载速率限制;而对于免费帐户,则采取了“每六小时只允许200次请求”的下载速率限制。
由此,会有两组人员可能会受到此类限制策略的影响:创建Docker镜像的开源贡献者和使用镜像的DevOps爱好者。具体说来,开源贡献者会碰到丢失那些少用但重要的镜像等问题。而由于DevOps爱好者会将Docker Hub用作存储系统,因此碰到在没有任何警告的情况下,丢失镜像或破坏构建等问题。并且由于请求次数的限制,他们的匿名或免费构建也可能出现失败。
面对此类状况,我们可以选用一种更为高效的替代品--Artifactory。
如上图所示,Artifactory的应对措施包括:
- 由于Artifactory能够缓存镜像,因此用户不会受到上游镜像被移除的影响。
- 由于Artifactory能够提供缓存服务,因此每个镜像只需被拉取一次,有效地实现了节流。
- 整个组织内的所有开发人员和构建主机都只需要一个Docker Hub许可证。
- Artifactory允许用户为每个实例创建多个Docker注册表。您可以将本地存储库用作私有的Docker注册表,以细粒度的访问控制方式,在整个组织中共享Docker镜像。
- 您可以存储和检索任何类型的工件(artifact),甚至是由开发团队生成的安全Docker镜像。由于这些工件存储在中央托管位置,因此Artifactory成为了任何软件交付生命周期的重要组成部分。
JFrog Artifactory的基本特征:
- 提供2 GB的存储空间和10 GB传输的免费套餐
- 处于大型组织的商业层
作为一种无缝托管和分发容器镜像的服务,Artifactory能够将所有二进制文件存储到单个位置(如:Docker注册表,https://jfrog.com/integration/docker-registry/),以实现对进入某个Docker镜像的内容和信息进行管控。同时,Artifactory也提供了广泛的集成、高可用性、高安全性、大规模的可扩展存储,以及能够通过持续更新,来支持最新的Docker客户端版本和API。
JFrog容器注册表(JFrog Container Registry,JCR)的基本特征:
- 自托管:提供免费且无限制的容器注册表
- Cloud SaaS:2 GB的存储空间和10 GB传输的免费套餐
- 云端BYOL(Bring Your Own License,自带许可):在用户自己的基础架构上是免费的
JFrog容器注册表能够与Docker完全兼容,用户可以使用各种工具按需进行“原生”操作,从而实现对Docker镜像的管理(请参见--https://www.jfrog.com/confluence/display/JCR/Docker+Registry)。
JCR可以被作为我们管理所有Docker镜像的单一节点。通过集成到已构建的生态系统中,用户可以安全、可靠、一致、高效的方式,访问到远程的Docker容器注册表。
服务管理员可以按需使用细粒度的权限控制,来维护任意数量的公共和私有Docker注册表。同时,它还为用户的容器存储了丰富的元数据,以提供容器内各个层面上的唯一且全面的视图。用户可以据此了解其中的具体内容。
建立可持续的容器生态系统
拥有蓬勃发展的容器生态系统,对于那些正在使用Docker和Kubernetes等云原生技术来实现成功部署的公司来说,是至关重要的。通过在企业内部部署JFrog Artifactory和JFrog Container Registry之类的本地存储技术,我们不但可以灵活地支持构建、测试和部署等各种实用场景,还能够减少各种共享式社区基础架构的负载,其中包括:Docker Hub、Maven、NPM、Go、Conan、以及其他由社区运营的中央存储库。
虽然我们在使用Docker Hub时可能会遇到上游容器镜像被删除,以及服务受限或中断等风险,但是通过部署工件管理系统,用户能够在实现流畅地端到端软件交付的同时,更加专注于软件包的质量和安全性,而不仅仅着眼于扩展基础架构。
原标题:Mitigating DevOps Repository Risks ,作者: Pavan Belagatti and Stephen Chin
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】