房利美使用Terraform Enterprise和Sentinel开发策略即代码的流程
联邦国民抵押贷款协会(FNMA),通常被称为房利美,是美国最大的公司,也是全球第五大公司(按资产计算)。作为政府赞助的企业,他们需要遵守大量的IT安全和合规法规。
房利美没有陷入不断变化的监管环境中,而是通过使用Terraform Enterprise等IT基础设施生命周期管理产品来加速运营。具体来说,他们正在自动化大规模云基础设施配置,同时通过策略即代码(由Terraform的Sentinel框架支持)来减轻安全和合规风险。
本文基于Maksim Frenkel的演讲"在高度监管的金融行业中的Sentinel策略即代码",旨在为您的组织提供指导,学习房利美的策略即代码之旅,并构建自己的策略开发策略。
Terraform和Sentinel在房利美的应用
Terraform Enterprise已成为房利美数字化转型旅程中不可或缺的一部分。他们的IT环境包括:
- 700多个活跃的Terraform工作区
- 80多种AWS服务
- 450多个Sentinel策略
在房利美,Sentinel策略作为防护栏,确保AWS服务在受监管环境中安全使用。房利美从各种合规和数据保护框架中获取其云安全标准,例如:
- NIST 800-53和RMF
- CIS基准
- FIPS 140-2数据保护
- 国防部零信任
将这些标准集成到Sentinel策略中,确保开发环境在基础设施配置之前满足所有合规要求。
那么房利美在使用Sentinel进行策略即代码方面看到了哪些好处?
为什么选择Sentinel?
Sentinel策略即代码在管理基础设施合规性方面具有多个优势:
- 版本控制:使用常见的Git工作流以良好控制的方式编辑和管理策略。Sentinel策略通过策略集与Terraform和版本控制相关联。
- 自动化测试:版本控制Sentinel策略代码还使得通过常见的自动化测试框架和构建管道运行这些策略变得容易。Sentinel还有一个内置的测试框架。
- 嵌入Terraform工作流:Sentinel策略在基础设施配置的计划和应用阶段之间运行,作为预防性防护栏,确保在基础设施配置之前满足合规要求。
这种主动方法最大限度地减少了生产环境中不合规的风险,允许开发团队在将基础设施推广到生产环境之前,在开发环境测试过程中早期解决合规问题。
它还将更多的合规责任向左转移给开发人员。开发人员不再需要手动进行合规性或安全性审查,而是在其Terraform工作流中嵌入了防护栏,如果有策略违规,会立即给出反馈。
策略即代码可以用于什么?
您可以为几个类别开发Sentinel策略控制:
| 类别 | 示例 |
|---|---|
| 安全 | 确保DynamoDB服务器端加密和CMK已启用 |
| 日志记录 | 确保Amazon ECS任务日志记录到CloudWatch已启用 |
| 架构 | 确保Amazon负载均衡器使用已批准的子网和安全组 |
| 弹性 | 确保在生产环境中启用Amazon RDS的多可用区 |
| FinOps | 确保仅使用已批准的Amazon EC2实例类型 |
合作伙伴和社区在Terraform注册表中已经构建并共享了几个行业标准安全基准的合规策略。一个很好的例子是CIS基准Sentinel策略。
房利美构建策略即代码的流程
房利美使用一个全面的流程来开发Sentinel策略,许多组织的平台团队都可以实施。该流程包括五个阶段:
- 需求分析
- 开发
- 测试
- 评审
- 发布
需求分析
对于第一步,房利美建议指定一个跨部门的利益相关者小组,包括来自平台、安全、合规、应用开发以及任何其他相关部门(如FinOps)的代表。一旦利益相关者小组就位,他们就可以开始审查任何新Sentinel策略的需求规范。
当有人想在房利美提出策略时,他们通常会做的第一件事是前往Terraform注册表中的特定Terraform提供程序文档,查找他们想要构建策略的基础设施组件。下面的屏幕截图显示了您需要在文档中研究的内容。在此示例中,团队希望为Amazon DynamoDB配置制定策略。
使用此文档创建细粒度的Sentinel策略规范。房利美在每个规范中包含五个部分:资源类型、属性、允许值和执行级别。您自己的规范可以添加更多自定义区域,但下面的示例规范仅使用房利美的五个部分(填充了DynamoDB策略的内容):
资源类型 aws_dynamodb_table
属性 server_side_encryption.enabled server_side_encryption.kms_key_arn (这些强制启用服务器端加密并使用KMS密钥)
允许值
启用并使用SSM参数值。
/
执行级别 硬性强制。(参见Sentinel的三个执行级别。硬性强制意味着在满足策略中的所有要求之前,配置将被阻止。)
在进入下一阶段之前,您需要利益相关者和主题专家审查策略需求规范并提供反馈。
开发
房利美在构建Sentinel策略时使用标准的功能分支方法:
- 为每个策略或策略集的任何更改启动一个功能分支。
- 完成更改后,将功能分支合并回发布分支,Sentinel将从该分支获取策略。
房利美演讲的这一部分将带您了解四个方面的策略语法:
- 导入
- 资源
- 函数
- 规则
测试
构建策略后,您需要确保它实际工作。房利美定义了他们希望用给定策略覆盖的测试用例。在什么情况下通过?在什么情况下失败?房利美演讲的下一个嵌入部分展示了如何生成Sentinel策略测试来验证这些测试用例。
Sentinel中有两个实用程序有助于测试生成:
- Sentinel模拟:从Terraform计划导出的数据,用于模拟真实世界条件
- Sentinel CLI:一个实用程序,用于根据模拟数据评估Sentinel策略
为策略构建测试套件随着时间的推移变得更加重要,因为如果您没有验证方法,即使在修改策略后它们仍然能够产生安全、合规的配置,策略将变得更难维护。
评审
房利美有两个级别的策略代码评审:
- 同行评审
- 信息安全评审
评审阶段还将前一阶段构建的测试付诸实践。房利美演讲的这一部分将带您了解他们的评审和测试管道:
房利美在此阶段降低风险的一个关键方法是在每次测试每个策略的每个测试用例。这样做的原因是——如果更改了由多个策略共享的文件或函数,它可能会影响比当前正在处理的策略更多的策略。
发布
最后一步是将策略的功能分支合并回策略集的发布分支。房利美演讲的这最后一部分将带您了解他们的发布过程,并向您展示Sentinel防护栏在日常使用Terraform的开发人员看来是什么样子:
经验教训
在Terraform Enterprise中采用策略即代码多年后,房利美指出了其他采用者应关注的几个关键领域:
微调需求
需求收集是最重要的阶段。所有利益相关者应清晰准确地了解每个策略中将包含哪些组件,以及它们将如何减少合规性和安全风险,而不会成为开发人员的障碍。
考虑性能
随着策略的扩展,您需要开始收集性能和调试指标,同时使用模拟来性能测试策略。为什么这很重要?如果某些验证变得太大或效率低下,策略完成可能需要几分钟而不是几秒钟。
重用代码
在整个策略中重用函数以节省时间并传播策略编码最佳实践。
考虑向后兼容性
新策略通常应从咨询执行级别开始,然后当足够的基础设施部署通过策略检查时变为硬性强制。从硬性强制开始可能会阻止所有开发人员,因为当他们重新配置在策略到位之前编写的基础设施部分时,这些基础部分可能由于新策略而无法运行。
后续步骤
- 要尝试编写和运行一些自己的Sentinel策略代码,请访问我们的免费Sentinel playground网站。
- 有关Sentinel的更多信息,请访问我们的文档。
- 在Terraform注册表和此HashiCorp GitHub存储库上查找预编写和示例策略。HashiCorp和AWS最近合作开发了新的预编写CIS基准策略集,用于AWS服务。
- 要在Terraform工作流中测试Sentinel,请注册HCP Terraform的免费试用。
决策者的价值主张
策略即代码自动化帮助团队更快地工作、保持安全并达到预期的投资回报率。阅读我们的指南:使用基础设施云优化云运营和投资回报率,了解如何通过更智能的运营回收高达40%的云预算。
(最初发布于2025年1月,2025年10月更新)