写在前面
Docker 平台和容器已经逐渐成为打包、部署和管理应用程序的标准。为了让容器在集群中于多节点间协调运行,这就需要一个关键的功能:容器编排(container orchestrator)。本主题将分两篇为大家详细讲解这一重要功能。下篇《详解Docker 最低特权编排原则,安全与效率并行!(二)》链接为:https://yq.aliyun.com/articles/228215
编排功能
编排功能(Orchestrators)负责关键的集群和调度任务,例如:
- 管理容器调度和资源分配
- 支持服务发现和无中断应用程序部署
- 分发让应用程序运行所必需的资源
不幸的是,在这种环境中,编排的分布式特性与资源的短暂特性让安全的编排成为一项具有挑战性的任务。在这篇文章里,我将详细解读这个常常被人们所忽略的重要方面——编排的安全模型,我还会演示如何利用Docker 企业版(EE)内置的编排工具——Swarm 来如何克服上述困难。
活跃模型和威胁模型
在Docker 企业版(EE)中使用Swarm Mode的主要目的是为用户提供一个内置安全功能的编排。为了实现这一目标,我们开发了首款容器编排工具,它的设计理念就是要时刻保持占用最低特权原则,以提高主机整体的运行效率。
计算机科学中,每一个参与者都需要在分布式系统中遵循最低特权原则,它要求参与者仅可以访问符合其合法目的的必要信息和资源,不能多也不能少。
最低特权原则——一个进程只能访问符合其合法目的所必需的信息和资源。
Docker企业版(EE)中的Swarm 为每一个节点都分配了相应的角色(无论是管理人员还是工作人员)。这些角色分别为节点限定了其粗颗粒度的权限等级,即管理任务级别和执行任务级别。但是,不管它的角色是什么,节点都只能访问其执行必要任务所需的信息和资源,并且具有强制加密的访问保障机制。因此利用这种机制可以更加轻松的保护集群免遭黑客的致命攻击,如通过控制底层通信网络或者盗用集群节点的攻击方式。
默认安全核心
IT领域有一个安全准则,它规定:如果不是默认的,就没有人会使用它。 Docker Swarm Mode将这一理念带入产品中,并配有默认机制来解决编排生命周期中最困难和最重要的三个方面(本篇将介绍前两个方面):
- 信任引导和节点介绍;
- 节点身份签发和管理;
- 对认证、授权、加密过的信息进行存储和分发;
下面,让我们分别来看这几个方面:
信任引导和节点介绍
安全集群的第一步是对成员资格和身份进行严格的控制。没有这一步,管理员就不能利用其节点管理者的身份,对节点之间的工作负载进行严格的分离。这意味着未经授权的节点将不能被允许加入集群,而已经成为集群中的节点则不允许更改其身份,从而杜绝了伪装成其它节点的可能。
为了满足这一需求,就需要通过Docker 企业版(EE)的Swarm Mode来管理节点以对其进行严格的控制并维持其固定的身份。所需的属性是通过使用两个关键的构建模块进行加密保护:
- 为集群成员提供安全连接令牌;
- 将唯一标识嵌入到由中央主机认证授权签发的证书中;
加入Swarm
要加入Swarm,节点就需要一个安全连接令牌。令牌对集群中每个操作角色都是唯一的——目前有两种类型的节点:工作人员节点和管理员节点。由于这种分离,具有工作人员身份的节点将不允许作为管理人员加入集群。获取特殊令牌的唯一方法就是让集群管理员通过Swarm管理的API界面进行交互式地申请。
令牌是安全、随机生成的,它同时还具有一种特殊的语法,使得管理员更容易检测到泄漏的令牌:利用一个特殊的前缀,您就可以的轻松的监控日志和存储库中的泄漏问题。幸运的是,即使发生泄漏,令牌也很容易进行更新,我们建议您经常轮转它们——特别是在集群短时间内不会更新换代的情况下。
信任引导
作为建立其身份的一部分,新节点将申请一个由网络管理员所签发的全新身份。但是,根据我们威胁模型的假设,即所有通信都可以被第三方截获。这就引出了一个问题: 一个节点如何判断它是否在与一个合法的管理员对话?
幸运的是,Docker有一个内置的保护机制来防止这种情况发生。连接令牌包含CA证书的散列就是主机连接Swarm的保障机制。因此,主机可以使用单向TLS,并使用散列来验证它是否在与正确的Swarm进行连接:如果管理员显示的不是通过与散列匹配的CA证书,则该节点就清楚不能与其连接了。
节点身份的签发和管理
节点在Swarm 中的身份会嵌入到每个节点所持有的x509证书中。根据最低特权原则,证书的私钥将严格限制在其发起的主机上。值得注意的是,除自己所持有的私钥之外,管理员无权访问任何其它证书的私钥。
身份签发
要在不共享私钥的情况下接收证书,就需要新主机首先发出一个证书签名请求(CSR),然后由管理员将其转换成证书。现在,这个证书就是节点在新主机上的身份证明,拥有该证书的节点就是该群集的正式成员了!
当与安全引导机制一起使用时,默认情况下,这种为连接节点进行身份签发的机制是安全的。所有通信方都是经过验证的、经过授权的,并且没有在明文中交换任何敏感信息。
身份续约
然而,将节点安全地连接到Swarm只是其中的一部分。为了最大限度地减少证书泄漏或被盗的影响,并且消除管理CRL列表的复杂性,Swarm Mode 只为其节点提供短期的身份验证证书。这些证书的默认有效期为3个月,但是可以根据您的需要自由配置时间!
使用这个有效期很短的证书意味着证书更新不能是一个手动的过程,因为它通常用于大多数PKI系统。使用Swarm,所有证书都将以一种不中断的方式进行自动更新。这个过程很简单:使用相互验证过的TLS连接去证明特定身份的所有权,Swarm节点定期生成新的公钥/私钥,并发送相应的CSR以进行签名,创建一个全新的证书,但不会改变其原有身份。(未完待续......)