我花了一些时间在 AWS 中重构一个负载均衡的 Web 应用程序,以使其成为端到端的 HTTPS,CloudFront->ALB->EC2。这主要是为了好玩,看看我能不能做到。在经历了相当多的困难之后,我现在想知道是否值得升级生产基础设施来以这种方式工作。目前在生产中,它在前端和 CloudFront 与 ALB 之间只是 HTTPS,但在 ALB 和 EC2 之间是纯 HTTP。
在 Application Load Balancer 和 EC2 之间使用 HTTPS 是否有任何实际好处。
我原本希望它是端到端的 HTTP/2,但我无法让它在 EC2 上工作,所以那部分必须是 HTTP1.1
有关设置的一些详细信息。
EC2 正在运行 IIS,Win2022。我有一个带有 UserData 的启动模板,可以完全配置它们,包括为 IIS 创建自签名 SSL。
ALB 和 CloudFront 显然使用 ACM 作为证书。
设置看起来很稳定,但我对为支持 ALB->EC2 HTTPS 而引入的复杂性并不完全满意。这意味着它现在为健康检查提供了额外的 http 绑定,而不是只能对流量和健康检查使用单个绑定。
部署管道也变得更加复杂,需要一个额外的步骤来检索 SSL 证书以将其应用于 IIS 站点。
一个潜在的好处是,站点本身知道它正在通过安全连接运行,因此默认情况下将正确生成自引用 URL。但是,无论如何,我主要通过手动更新应用程序代码中的服务器变量来找到解决方法。
使用端到端 HTTPS 似乎被认为是一种好的做法,但我不完全确定为什么。我不想更改生产系统,除非这样做有一些特定的好处。
现代安全思想是您不认为您自己的网络/数据中心更值得信赖(比您的 WAN 或常规互联网)。
传统上,在您自己网络的“安全”范围内,数据中心会允许更宽松的安全标准。内部系统和用户都将受到信任,隐含地期望它们是安全的并且绝不会滥用或恶意。一个只添加了例如 TLS,用于跨越“安全”内部网络的边界和边界的连接。
您当前在负载均衡器上终止 TLS 并使用纯 HTTP 进行负载均衡器和后端服务器之间的通信的配置符合传统的世界观和安全概念。
如今越来越流行的安全概念是“零信任”和“无处不在的加密”,它抛弃了安全可信的内部网络/系统/用户的概念,并在任何地方都应用了同样严格的安全级别。
在云环境中,您没有自己的物理网络,但可能与云提供商的所有其他客户共享资源。
您希望云提供商不是恶意的,并且可以相信不会窃听您的通信。您希望并期望您的(内部)流量的逻辑分离是可靠的,并且您的数据也不会被其他客户拦截,但您在那里的保证要少得多。
您可以通过不隐含地信任(虚拟)内部网络的安全性和严格应用 TLS 加密来控制这些风险,用于从负载均衡器到您的应用程序服务器的流量,用于访问数据库的应用程序等。
作为现实世界的模拟:
您的家位于一个封闭的社区内,受到安全围栏和门口警卫的保护。也许你甚至有一个业主协会来审查潜在的新居民,只允许“合适的人”成为你的新邻居。
您需要在晚上和离开家时锁上前门吗?
在传统的安全思想中:不,你不需要在晚上锁门,因为你在你的封闭社区里是安全的,所有的“坏人”都会被栅栏和保安挡在外面。
而且您的邻居不会是八卦八卦的人,他们只会让自己进入您的家。
在现代安全思想中:是的,当然你会锁上你的前门,因为当(如果不是)围栏被破坏和/或警卫未能将“坏人”拒之门外,那么那个坏人就不能简单地进入每一个家庭,但仍然需要撬锁或强行进入,这都会延迟他们不需要的进入,增加被发现的几率,并减少他们可以入室盗窃的房屋数量。