我所在的公司和世界上大多数公司一样,受政府法规的约束,必须远程办公。我们的办公室位于市中心,但光纤连接速度很慢。
我们的所有环境都在 MS Azure 上。在办公室工作时代,Azure 防火墙的配置使得不需要公共互联网访问的服务(例如 SQL 数据库和密钥保管库)只能通过办公室的固定 IP 访问,效果很好。
可以设置一个指向 SQL Azure 开发实例并使用 SQL 身份验证进行身份验证的开发环境(参见注释 1)。SSMS 直接使用 AAD 身份。所有连接都来自办公室,因此 Azure 的配置考虑到了纵深防御。
现在开发人员在家工作,使用动态 IP 退出,麻烦开始出现。作为由 2 人组成的开发团队(详见注释 2),几个月以来,我们一直在做的事情是手动输入 Azure 门户中的 IP 地址,就像早上 whatsmyip.org 显示的一样。
从中期来看,我们想要扩大我们的软件开发团队,“早上更改你的 IP 地址”政策不利于扩展,并且需要太多人以适当的权限访问 Azure 门户来设置防火墙。
以下是我考虑过的选项以及它们不适用或不起作用的原因
解决方案 1:早上更改你的 IP 地址
不可扩展随着开发团队的壮大,Azure 防火墙中启用的 IP 地址白名单可能会引起混乱。开发人员需要在他们需要工作的项目的 SQL 实例和 Key Vault 中启用自己的 IP 地址,而且他们可能需要在同一天访问多个项目,这是很现实的。
解决方案 2:通过 VPN 接入办公室
目前不实用当时办公室里挤满了人,带宽使用率高到足以让一些人抱怨。VPN 和通过 VPN 路由所有流量需要带宽加倍。
购买额外的传输容量并不容易,既不便宜也不及时。我的意思是,问题可能不是价格,而是额外 Gbps 的技术可用性:你不能只是打电话给你的企业 ISP 并要求在一夜之间启用额外的 Gbps。
当我们将来获得更快的链接时,这将是我们的首选解决方案。
>>>> 解决方案 3:Azure VPN <<<<
这是我的理论偏好,也是问题的主题。开发人员每次需要运行应用程序时只需通过 VPN 连接到 Azure,这样与 Azure 资源的连接就会来自众所周知的白名单网络。
这是非常理想的,但不幸的是,当我们配置时example.database.windows.net
,流量通过公共互联网(即通过家庭链接)路由,然后退出 IP 未被列入白名单。
我检查了连接到 Azure VPN 的客户端的路由表,实际上只有私有子网通192.168.13.0/24
过 VPN 隧道进行路由。这是因为 SQL 主机解析为公共 IP 地址。
解决方案 4:研发
RD 代表“远程桌面”。在我看来这是自杀因为即使是点击小部件也会完全受到员工的影响家庭带宽并不是每个人都可以使用光纤通道家庭 (FTTH)。唯一的优势是 RD 机器已经位于已知的白名单网络中。我知道很多公司都使用这种方法,但我们谈论的是“在家工作”,尽管雇主出于良好的意图向员工支付互联网费用,但员工所在地却没有光纤。
更清楚地说,一件事是对云 SQL Server 运行 SQL 查询,另一件事是必须传输大量数据以呈现 Visual Studio 的 1920x1080 窗口,该窗口在调试会话期间显示特定记录的值(包括步进击键)。
[编辑:将评论总结为编辑]
我放弃这个解决方案是出于个人观点和经验。我和 CTO 都糟糕的工作经历过去我们做顾问的时候。那时,我在一家拥有 100Mbps DSL 链路的公司工作,有 30 多名程序员在 RDP 上工作。这真是太糟糕了,速度很慢。我工作的公司很难升级链路速度,但我在他们切换到更快的 ISP 之前就离开了。
因此,我必须考虑到那些不一定住在大城市中心的开发人员,他们通常必须从小城镇通勤。小城镇/村庄无法接入光纤链路,从中等到最差的情况,范围从 4G 连接的可用性(雇主可以决定提供)到只有 3G/HSDPA 的可用性。有些地方根本无法通过电缆或天线覆盖,这时唯一的假想解决方案是雇主提供某种形式的搬迁(“我们在更近的地方租了一间小公寓给你”)。不可行。
移动连接也存在风险。移动连接可能有效,雇主可以信赖员工会使用移动连接工作。但随着视频会议和远程教育, 有一个机会远程链接将不可用。
当然,间歇性或缓慢的链接首先会阻止对 Azure SQL 的访问,并且据称当开发人员由于上述原因无法可靠地连接到 Azure 时,他们就无法工作。
我们反对这个解决方案的原因是,在正常的开发过程中(✋ 我已经当了多年的程序员!)你不一定需要连续的和可靠的连接,因为您可以在没有稳定链接的情况下键入和阅读文档。但在 RDP 中编码要求每次击键和页面刷新都正确传输。
[编辑:轶事季节性例子]
以下当然只是 2020 年夏天的一个轶事,并不想做出任何统计数据或者规则。今年 8 月,我整个月都在一个完全不同的环境中工作,在那里我可以(滥用)使用 Docker 并工作100% 离线。这救了我一命,因为我整个夏天都在夏季地点,也就是说,一个小村庄在短短两个炎热的星期里就变得拥挤不堪。
确实如此热的从旅游的角度来看,这两个地方的 4G 网络基本瘫痪热的几周。我能工作完全是因为 Docker,我无法在个人时间观看在线视频在大多数人来度假之前和离开之后,我用自己的 SIM 卡体验到了极好的 4G 连接。当然,网络提供商不会为偏远地区提供更快的连接,并且在这些地区最拥挤的季节会限制带宽。只有两个星期。
再次强调,以上内容仅是我本人在社交方面的个人经历。
问题
我们如何才能让远程开发人员以安全的方式访问 Azure 资源?我们不能直接禁用 IP 白名单。是的,身份验证和 TLS 已经到位,但这是公司的要求(我也认为这是最佳实践)。
我们必须为开发人员保留工作能力。如果连接速度慢或断断续续,则访问远程资源的要求是明显地瓶颈。
我认为,根据解决方案 3,我们应该以某种方式告诉 VPN 通过其自身路由 Azure 流量。我不知道这是否可行,但 VPN 需要提前知道 Azure IP。
我对这个问题感到困惑。我想问一下其他公司是否已经找到了解决此类问题的优雅方法。
[注 1]:实际上,连接字符串在为 AAD 身份配置的 Azure Key Vault 中受到保护,因此开发人员不会共享其 EF Core 应用程序的连接字符串
[注 2]:我们目前聘请外部工厂的顾问,通过 VPN 进入他们的办公室(解决方案 2),但我们打算在未来聘请内部开发人员