如何通过AWS Config/Security Hub查找使用IMDSv1的公有子网EC2实例
查找公有子网内使用IMDSv1的EC2实例操作方案
你可以分别通过AWS Config、AWS Security Hub两类服务实现检测,两种方式的具体操作如下:
方法1:通过AWS Config实现自定义聚合查询
适合需要灵活调整筛选条件、持续跟踪资源配置合规性的场景:
- 提前确认AWS Config配置记录器已经开启,覆盖
AWS::EC2::Instance、AWS::EC2::Subnet、AWS::EC2::RouteTable三类资源的配置记录 - 进入AWS Config控制台的「高级查询」页面,直接输入以下查询语句执行:
SELECT i.resourceId, i.configuration.instanceId, i.configuration.metadataOptions.httpTokens AS imdsMode, s.configuration.subnetId, s.configuration.availabilityZone WHERE resourceType = 'AWS::EC2::Instance' AS i JOIN resourceType = 'AWS::EC2::Subnet' AS s ON i.configuration.subnetId = s.configuration.subnetId JOIN resourceType = 'AWS::EC2::RouteTable' AS r ON s.configuration.associations[*].routeTableId = r.configuration.routeTableId WHERE i.configuration.metadataOptions.httpTokens = 'optional' AND EXISTS ( SELECT 1 FROM r.configuration.routes AS rt WHERE rt.destinationCidrBlock = '0.0.0.0/0' AND rt.gatewayId LIKE 'igw-%' )
- 查询结果中返回的实例,就是位于绑定了互联网网关路由的公有子网内、允许IMDSv1调用的EC2实例,可以直接导出CSV格式列表。
- 如果不想写自定义查询,也可以直接启用AWS Config托管规则
ec2-imdsv1-check,先拿到所有允许IMDSv1的实例列表,再批量匹配实例所属子网的公网属性即可。
方法2:通过AWS Security Hub做安全控制集中筛查
适合已经启用Security Hub做统一安全运维的场景:
- 确认Security Hub已经启用AWS基础安全最佳实践(FSBP)标准
- 在控制项列表中找到ID为
EC2.8的控制项,该控制项默认会检查所有EC2实例是否强制使用IMDSv2,检查不通过的实例就是允许IMDSv1访问的资源 - 进入Security Hub的「发现」页面,添加以下筛选条件:
- 控制ID:等于
EC2.8 - 资源类型:等于
AwsEc2Instance - 资源属性:
VpcSubnetPublic等于true - 记录状态:等于
ACTIVE
- 控制ID:等于
- 筛选完成后展示的所有发现项,对应的就是目标实例,支持直接批量导出、触发自动修复工作流。
补充验证说明
- 实例元数据配置中
httpTokens参数值为optional时,代表实例同时支持IMDSv1、IMDSv2访问,属于风险项;参数值为required时代表强制使用IMDSv2,无相关风险 - 新创建的实例配置同步到Config、Security Hub通常有1-5分钟延迟,检测时建议预留同步窗口避免漏检
- 单实例快速验证可以直接调用CLI命令:
aws ec2 describe-instances --instance-ids <你的实例ID> --query 'Reservations[*].Instances[*].MetadataOptions',返回结果中直接可以看到IMDS版本配置。
内容的提问来源于stack exchange,提问作者Row
相关产品推荐
相关产品推荐

