在Docker内部,咱们花了不少时间讨论一个话题:如何将运行时安全和隔离做为容器架构的一部分?然而这只是软件流水线的一部分。docker
咱们须要的不是一次性的标签或设置,而是须要将安全放到软件生命周期的每一个阶段。数据库
因为软件供应链上的人、代码和基础设施一直在改变,交互也越来多,组织(公司)必须将安全归入供应链的核心部分。安全
考虑一个实际存在的产品:如电话,仅仅考虑到最终产品的安全性是不够的。除了决定使用什么样的防盗包装,你可能也想知道材料的来源,以及他们是如何组装,包装,运输。由于,重要的是咱们还要确保手机不被改造或运输途中被盗。网络
软件供应链几乎跟实际产品的供应链是相同的。你必须可以识别和信任原材料(代码、依赖、打包),把它们组装在一块儿后,将它们从海上、陆上或空中(网络)运输到一个存储地(存储库),以便将项目(应用)出售(部署)给终端用户。架构
确保软件供应链也十分类似。你须要:工具
● 肯定流水线中的全部东西,从人,代码,依赖关系,到基础设施测试
● 确保一个一致和优质的构建过程加密
● 在存储和运输中保护产品spa
● 对材料清单的交付保证并验证最终产品
在这篇文章中,咱们将诠释Docker的安全特性如何为软件供应链提供持续的安全。翻译
整个流水线构建在身份验证和访问控制之上 。从根本上说,你须要知道谁能够访问什么资产,可使用哪些操做。
Docker 架构中的身份认证理念很清晰,它隐藏在软件供应链策略中:加密密钥容许发布者对镜像进行签名,以保证其来源的真实性。
肯定一致的构建容许你建立一个可重复的过程,并控制你的应用程序依赖和组件,以便使它更容易测试出缺陷和漏洞。当你对你的组件有一个清晰认识的时候,它变得更容易识别异常的组件。
要得到一致的构建,你必须确保你添加了优质的组件:
● 评价依赖的质量,确保它是最新/兼容的版本,并用你的软件进行测试
● 验证组件来自于你指望的来源,而且在传输过程当中没有损坏或改变
● 肯定依赖后不要轻易改变,确保后续重建是一致的,所以若是一个缺陷是由代码或依赖的变化引发的,很容易被发现
● 使用Docker Content Trust ,从可信的、有标识的基础镜像中构建你的镜像
应用程序签名是从构建进行有效“密封”的一步。经过镜像签名,能够确保任何在接收端(docker pull)的签名验证与镜像发布者创建一个安全链。
这种关系保证了镜像在传输过程当中不被改变、添加、或删除。此外,签名代表发布者“赞同”你拉取的该镜像是没问题的 。
在构建机器和运行环境上启用 Docker Content Trust后,一个策略就会生效:只有签名镜像才能够被拉取并运行在那些 Docker 主机上。
在组织中,签名的镜像向其余人传递一个信号:发布者(构建者)声明镜像是没问题的。
CI系统和开发者都须要确认一件事情:构建工具与依赖一块儿工做,操做你的应用程序时,不管在成功仍是失败,都有预期的行为。
但他们审查过依赖的漏洞吗?审查过子依赖或捆绑系统库的依赖吗?他们知道依赖的许可证吗?这种审查很难经过常规的方式来完成,由于提供错误修正和功能上是一个巨大的开销。
Docker 安全扫描有助于镜像的自动化扫描。由于这是发生在镜像被推送到registry以前,在容器被部署进生产环境以前的最后一次检查。
该功能目前在Docker Cloud 中可用,而且很快延伸到Docker Datacenter。安全扫描建立了一个清单,清单中包括镜像每一层的打包信息和版本信息。
这份材料清单被用于连续监测各类 CVE 数据库。确保该扫描不止一次地发生,并在爆出新漏洞时,及时通知使用镜像的系统管理员或应用程序开发者。
安全保证最强大的一点来自Docker Content Trust 签名,它容许多个签名者参与容器的签名过程。要了解这一点,想象一个简单的 CI 过程,经过如下步骤移动容器镜像:
自动化CI
Docker 安全扫描
推送到 staging环境
推送到 production 环境
这里有四个阶段,每一个阶段完成后,均可以添加一个签名,从而CI/CD 过程的每个阶段都有验证。
一、镜像经过CI 吗?添加签名!
二、Docker Security Scanning 肯定镜像没有漏洞?添加签名!
三、staging阶段中构建成功?添加签名!
四、验证全部3个签名的镜像并将其部署到生产中
如今构建被部署到生产集群以前,它能够加密验证,CI / CD过程各阶段已经签定了一个镜像。
在软件生命周期的每一个环节,Docker 平台都容许企业将安全归入其中。从与用户创建信任,到基础设施和代码,docker模型给了开发者以及 IT团队足够的自由和控制力。
从构建安全的基础镜像,到扫描每个镜像验证签名,每一个特性都容许IT人员将信任植入到应用中。
当应用沿着正常的生命周期不断前行,安全信息也可以动态维护和更新,并在部署到生产环境以前经过风控检查。