RSS DEV 社区
关注
将 Terraform 状态从公共互联网移除(无需搭建 VPN)
Terraform 状态文件是云管理中最敏感的资产,其中包含基础设施映射以及可能以明文形式存在的密钥。默认情况下,它存储于云存储中,其公共端点仅通过访问密钥进行保护。若该密钥遭到泄露,攻击者将立即获得对整个基础设施的访问权限。认证供应商尤其需要“先固守己方阵地,再管理客户环境”。
其生产环境状态账户无法通过公共网络访问,需采用三阶段方案进行加固。首个挑战是一个“先有鸡还是先有蛋”的问题:远程状态需要现有的后端,而后端本身又是由 Terraform 管理的基础设施。该问题通过两阶段引导解决:首先,本地状态创建基础存储账户和网络;其次,将后端切换为远程模式,并迁移状态。
第二个陷阱是“可达性问题”:通过禁用公共访问来保护存储账户,会导致其与 CI 流水线及虚拟网络外的用户断开连接。常见的解决方案是使用 VPN 网关,但这成本高且复杂。取而代之的是,在容器中部署零信任连接器,加入身份感知网格,使授权实体能够通过网格安全地访问私有端点。此举消除了对常驻基础设施、VPN 或跳板机的需求。
第三个挑战涉及多步骤的锁定流程。若在初始 Terraform apply 中尝试将账户设为私有,会在私有路径尚未建立之前将 Terraform 自身锁死。因此,锁定是一个独立的后续步骤,仅在网络、私有端点和连接器运行正常后才执行。该最终命令禁用公共网络访问,使账户仅可通过私有网格访问。
叠加上述措施,静态凭证已被消除。CI 流水线通过工作负载身份联邦进行身份验证,获取用于访问的短期 OIDC 令牌,且该令牌有效期极短。Terraform 本身在执行状态操作时使用临时目录令牌,而非持久性访问密钥。此方法确保即使攻击者获得访问权限,所使用的凭证也是瞬态且无效的。
归根结底,状态文件泄露往往源于公共访问和密钥泄露,而非加密漏洞。移除公共端点消除了主要攻击向量,使得泄露的密钥在没有网格访问的情况下失效。这种对全面安全的承诺体现了公司的产品理念,为所有客户提供强大的安全功能,而不仅限于更高级别的用户。