docker 容器到容器的流量有多安全?

信息安全 验证 码头工人
2021-08-23 17:54:28

我正在使用一组 docker 容器中的微服务架构模式构建一个 Web 应用程序,我想知道保护应用程序和微服务之间通信的重要性。

应用程序和微服务将使用该--link选项在集群中链接在一起,并且微服务不会暴露任何端口。应用程序和微服务之间的通信将通过 HTTP。该应用程序将仅公开端口 80。

我已经考虑过如果应用程序被入侵会发生什么——在我看来,如果发生这种情况,对微服务 API 进行的任何调用的细节都将掌握在攻击者手中(包括任何密钥,如果实施的话——请参阅下面讨论的方案),因此他们将有权访问可以通过这些 API 调用获得的任何数据,但他们无法访问数据库或任何其他由微服务专门使用的资源。但无论 API 调用是否通过上面给出的方法进行身份验证,这都是正确的。

这有多安全?我是否需要向 API 调用添加额外的身份验证层?

我正在考虑这种身份验证方案:Designing a Secure REST (Web) API without OAuth

基本上,这个想法是应用程序和服务有一个共享的秘密,用于加密消息内容,以确定消息是否来自授权来源以及是否已被篡改。目前,API 将仅对应用程序可用,尽管在未来的某个时候,将一些微服务 API 提供给其他应用程序可能会有所帮助,可能不会在 docker 容器中运行,而且我知道一个健壮的身份验证方案将那时需要 -上面讨论的方案是否足够?

1个回答

从关于容器链接的 docker 文档中可以看出,链接的标准设置是在 docker 主机上创建一个内部网络,容器使用该内部网络相互通信。

默认情况下,此网络不会暴露在主机之外,因此从这个角度来看,它应该不受基于网络的攻击者的攻击(即,没有端口或服务可以通过网络访问,因此没有什么可以攻击的)。

如果攻击者可以访问 docker 主机,那么无论是否链接,容器的安全性都可能出现问题,具体取决于攻击者可以获得的特权级别,就像访问 docker 主机上的特权帐户一样,所有赌注都是离开。

另一种可能的攻击场景是攻击者可以访问容器化应用程序的面向外部的部分。在这里,在没有额外安全性的情况下使用链接也没有太大的缺点,因为一旦他们可以访问前端应用程序服务器,他们很可能会获得访问后端服务所需的凭据,因为这些凭据将出现在前端服务器。

需要注意的一点是,如果您的设计依赖于容器链接安全性,如果您以后扩展解决方案以将应用程序的组件拆分到不同的虚拟机或不同的物理主机上,您可能会遇到问题,因为您可能会暴露这些服务到不受信任的网络。

总之,我想说容器链接应该被认为是一种相对安全的容器间通信方式。