AWS CloudFormation Guard
1# 什么是AWS CloudFormation Guard?
AWS CloudFormation Guard(cfn-guard) 为合规性管理员提供了一种简单的策略即代码语言,用于定义规则,检查要求的和强制的资源配置。它使开发人员能够根据这些规则验证他们的 CloudFormation 模板。
cfn-guard 可帮助企业最大限度地降低与运营成本超支、安全漏洞、法律问题等相关的风险。例如,管理员可以创建规则,确保开发人员始终创建加密的亚马逊 S3 存储桶。cfn-guard 采用轻量级声明式语法,管理员无需学习编程语言即可快速定义规则。开发人员可以在本地编辑模板时使用 cfn-guard,也可以作为 CI/CD 管道的一部分自动使用 cfn-guard,以停止部署不合规的资源。如果模板中的资源不符合规则,cfn-guard 会为开发人员提供信息,帮助识别不符合规则的资源。
它允许对 CloudFormation 模板资源进行部署前安全检查。您既可以要求包含设置,也可以禁止以前曾导致问题的配置。
可以嵌入到CI/CD的流程中。
可以在本地运行,也可在 AWS 账户中作为 lambdas 运行,以便与其他 AWS 服务集成。
上手很容易。你可以使用 cfn-guard 的规则生成功能,从现有的已知良好模板中提取你想要的规则。
2# 如何使用AWS CloudFormation Guard?
cfn-guard 是一个开源命令行界面(CLI),可使用简单的策略即代码声明式语言检查 CloudFormation 模板是否符合策略。安装后,您可以使用给定的模板输入和规则集运行命令行,cfn-guard 将根据模板评估规则并反馈结果。
安装最新版的cfn-guard
参考Github的安装说明:https://github.com/aws-cloudformation/cloudformation-guard/tree/Guard1.0?tab=readme-ov-file#installation
假设添加安全检查策略用于检查创建EC2的IMDS版本,是否是IMDSv2的:
IMDS 提供对经常轮换的临时凭证的访问,因此您无需手动或以编程方式将敏感凭证分发到实例。 IMDS 本地连接到每个 EC2 实例。它运行在特殊的IP地址169.254.169.254上。该 IP 地址仅可由实例上运行的软件访问。
IMDSv2 增加了对可用于访问 IMDS 的漏洞的保护,IMDSv1没有进行任何校验,因此很容易被攻击者获取EC2上的AKSK。IMDSv2引入了token,可以避免攻击者获取AKSK。
验证成功的模板
Within the LaunchTemplateData property, provide a MetadataOptions configuration and set the value of HttpTokens to required.以下分别是JSON和YAML格式的样例:
JSON 样例
YAML 样例
创建一个CloudFormation文件pass_template.yaml,填写上面的内容后保存:
再创建一个文件ec2_imds2_rule_set.guard,填写下面的内容后保存。
进入保存了这两个文件的文件夹,执行以下命令:
可以看到以下执行结果:
pass_template.yaml Status = PASS
PASS rules
ec2_imds2_rule_set.guard/ec2_launch_template_imdsv2_check PASS
验证失败的模板
如果模板中使用IMDSv1版本则使用以下内容创建文件fail_template.yaml:
然后执行以下命令:
将看到如下执行结果。
参考资料:[CT.EC2.PR.1] Require an Amazon EC2 launch template to have IMDSv2 configured
#3 如何嵌入到生产部署中
使用Control Tower
Control Tower预置了很多常用的Proactive controls,底层基于 AWS CloudFormation hooks。不需要写策略和进行繁琐的配置,激活使用即可。
使用AWS CloudFormation Hooks
如何使用AWS CloudFormation Hooks可以参见官方的帮助文档。
创建Lambda,CI/CD流程中引用这些lambda先检查,检查通过后才允许发版。
参考资料
最后更新于