云元数据地址风险是什么
云主机元数据服务在链路本地地址 169.254.169.254 提供实例信息与临时凭据,无需认证即可从实例内部访问。它本身是设计的一部分,问题在于一旦应用存在服务端请求伪造(SSRF),攻击者就能借应用的网络能力读取元数据,直接拿到具有云 API 权限的临时凭据。历史上多起云上入侵事件都以这一步为跳板,因此它同时是应用层漏洞问题与云侧配置问题。
基本信息
| 地址 | 169.254.169.254(链路本地地址,仅实例内可达) |
|---|---|
| 提供内容 | 实例元数据、用户数据、临时安全凭据 |
| 主要演进 | AWS 推出需会话令牌的 IMDSv2,替代可直接读取的 IMDSv1 |
| 风险组合 | 应用存在 SSRF + 元数据无需令牌 + 实例角色权限过大 |
典型使用场景
- 云主机上线时统一强制使用需要令牌的元数据访问方式
- 代码评审时检查发起外部请求的功能是否存在地址校验缺陷
- 收敛实例角色权限:按业务实际需要授予,而非沿用宽泛策略
- 在容器网络策略中阻断业务 Pod 对元数据地址的访问
- 怀疑命中后按凭据泄露流程处置:轮换密钥并审计云 API 调用记录
防护动作清单
防护动作清单
1. 启用需会话令牌的元数据访问(如 AWS IMDSv2)
2. 网络策略:业务容器与进程禁止直连 169.254.169.254
3. 最小化实例角色权限,限制临时凭据能做什么
4. 应用层 SSRF 修复同步推进:地址白名单、禁止跟随重定向
5. 出站代理统一出口,元数据地址不经过代理
6. 审计云 API 调用记录,异常来源立即排查强制 IMDSv2 示例(AWS CLI)
强制 IMDSv2 示例(AWS CLI)
# 要求所有元数据请求先获取会话令牌
aws ec2 modify-instance-metadata-options \
--instance-id i-xxxxxxxx \
--http-tokens required \
--http-endpoint enabled
# 批量核查存量实例当前的元数据配置
# aws ec2 describe-instances --query \
# 'Reservations[].Instances[].[InstanceId,MetadataOptions.HttpTokens]'控制层次
| 层次 | 措施 | 局限 |
|---|---|---|
| 云平台侧 | 强制令牌访问、限制跳数 | 仅覆盖该平台,多平台需逐一配置 |
| 网络侧 | 阻断到 169.254.169.254 的出站 | 内网横向时可能被其他路径绕过 |
| 权限侧 | 最小化实例角色权限 | 不阻止读取,只限制凭据能力 |
| 应用侧 | 修复 SSRF,校验目标地址 | 需要长期维护白名单 |
元数据凭据短期有效但仍可被滥用:确认疑似命中后,按凭据泄露流程轮换并审计调用记录,不要只关闭入口了事。
只堵应用层出口、不管实例角色权限,凭据一旦泄露风险面依然很大:真正决定损失上限的是角色被授予了多少权限。