IMDSv2强制执行:即将登陆您所在的区域!
2024年3月25日,AWS发布了一项新功能,可默认在区域级别对新启动的实例强制执行IMDSv2。这代表了一个期待已久的功能,但仍存在一些特点。
IMDSv2简介
IMDSv2是AWS于2019年11月发布的安全机制,此前发生了备受关注的Capital One数据泄露事件。该事件由类似SSRF的漏洞引起,导致美国参议员Ron Wyden致信AWS,询问为客户提供了哪些保护措施。
当强制执行时,IMDSv2可防止SSRF漏洞,否则攻击者可能通过这些漏洞从实例元数据服务(IMDS)泄露凭据。
2022年末和2021年末的过往研究表明,此类漏洞是公开记录的云安全事件最常见的原因之一。因此,IMDSv2被视为在AWS环境中强制执行的关键云安全控制措施。
发展历程
到目前为止,强制执行IMDSv2相对较为繁琐。
最初,您必须在实例级别通过设置实例本身或关联的EC2启动模板或启动配置上的metadata_options.http_tokens="required"选项来强制执行。尽管您可以使用ec2:MetadataHttpTokens条件键限制仅对强制执行IMDSv2的实例使用ec2:RunInstances,但这仍然是一个非常手动的过程,并且是不安全默认设置的典型例子。
2022年10月,AWS发布了一项新功能,允许我们声明"默认情况下,对从此特定AMI启动的所有实例强制执行IMDSv2"。
|
|
这方便他们在2023年3月推出默认强制执行IMDSv2的Amazon Linux 2023 AMI。
2023年11月,AWS控制台UI开始在最流行的"快速启动"EC2屏幕中默认强制执行IMDSv2。
现在,2024年3月,AWS引入了这项新功能,允许默认对区域中所有新实例强制执行IMDSv2!
认识GetInstanceMetadataDefaults和ModifyInstanceMetadataDefaults
这两个新的API调用于3月25日出现在我的RSS订阅中,随后很快发布了官方公告。顾名思义,这两个新功能允许您在区域级别设置默认的EC2实例元数据选项。
|
|
这里重要的部分是HttpTokens。将其设置为required意味着"强制执行IMDSv2"。因此,下面的代码是您希望在所有账户和区域中运行的:
|
|
在撰写本文时,AWS CLI尚未支持这些API调用,因此您必须使用Python或其他SDK。
更新:AWS CLI在1.32.70版(3月25日发布)和2.15.33版(3月27日发布)中发布了支持:
|
|
实现Terraform支持
任何没有IaC支持的云功能对于从业者来说都难以真正有用,特别是那些每天处理大量区域和账户的人员。
作为一个重度Terraform用户,我确保在问题中跟踪这一需求,并迅速跟进,利用HashiCorp贡献者指南自己实现了这个新的Terraform资源。
经过几个小时的痛苦调试Go代码和与CI斗争,拉取请求已准备就绪。现已被合并并在v5.43.0中发布。您现在可以使用aws_ec2_instance_metadata_defaults资源:
|
|
总结
这个新功能对于每天努力强制执行IMDSv2的从业者非常有用。这是在环境中启用安全默认设置的好方法——但仍然默认保留不安全的默认设置。根据AWS的公告,这种情况可能很快就会改变:
2024年中 - 新发布的Amazon EC2实例类型将默认仅使用IMDSv2。为了过渡支持,您仍然能够在启动时或在实例运行时启用/打开IMDSv1,无需重启或停止/启动。
同样重要的是要记住,此功能是关于默认设置的。使用它默认强制执行IMDSv2并不能阻止任何人启动允许使用IMDSv1的实例。为此,您可以使用SCP或使用ec2:MetadataHttpTokens条件键显式拒绝。