AWS IMDS 版本(IMDSv1 vs IMDSv2)
1. 什么是 IMDS
AWS 提供的实例元数据服务(Instance Metadata Service,IMDS)用于在 EC2 实例内部获取运行时信息,例如:
-
实例 ID
-
Region / AZ
-
IAM Role 临时凭证
-
网络信息(IP / MAC)
访问地址固定为:
http://169.254.169.254/latest/meta-data/
2. IMDS 的版本分类
目前 IMDS 只有两个版本:
-
IMDSv1(早期版本)
-
IMDSv2(增强安全版本)
3. IMDSv1
3.1 基本用法
IMDSv1 访问非常简单,直接 HTTP 请求即可:
curl http://169.254.169.254/latest/meta-data/
获取 IAM 凭证示例:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
3.2 优点
-
简单易用
-
无需额外认证步骤
3.3 安全问题
IMDSv1 最大的问题是:没有任何认证机制
典型风险:
(1)SSRF 攻击
如果你的应用存在 SSRF 漏洞:
攻击者 → 你的服务 → 169.254.169.254 → 获取 IAM 凭证
(2)凭证泄露
攻击者可直接获取:
-
临时 Access Key
-
Secret Key
-
Session Token
进而访问 AWS 资源
4. IMDSv2
IMDSv2 是 AWS 为了解决安全问题推出的增强版本。
4.1 访问流程(两步)
Step 1:获取 Token
curl -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
返回:
<TOKEN>
Step 2:携带 Token 请求
curl -H "X-aws-ec2-metadata-token: <TOKEN>" \
http://169.254.169.254/latest/meta-data/
4.2 安全增强点
(1)Token 机制
-
必须先获取 token 才能访问 metadata
-
token 有 TTL(最长 6 小时)
(2)防 SSRF
攻击者无法直接构造:
http://169.254.169.254/...
因为缺少 token
(3)Hop Limit
可限制请求跳数(类似 TTL):
-
防止通过代理/转发访问 metadata
5. IMDSv1 vs IMDSv2 对比
| 对比项 | IMDSv1 | IMDSv2 |
|---|---|---|
| 认证机制 | 无 | Token |
| 请求方式 | 单次 | 两步 |
| 安全性 | 低 | 高 |
| 防 SSRF | ❌ | ✅ |
| 是否推荐 | ❌ | ✅ |
6. 最佳实践
6.1 强制使用 IMDSv2
推荐在 EC2 上设置:
aws ec2 modify-instance-metadata-options \
--instance-id <id> \
--http-tokens required \
--http-endpoint enabled
6.2 禁用 IMDSv1
关键参数:
-
HttpTokens = required(必须使用 token) -
HttpEndpoint = enabled
6.3 限制 Hop Limit
--http-put-response-hop-limit 1
避免通过代理访问 metadata
7. 常见问题
Q1:IMDSv2 会不会影响现有程序?
会。
如果你的程序还在使用 IMDSv1(无 token),在强制 IMDSv2 后:
👉 请求会失败(返回 401)
Q2:如何检测当前是否使用 IMDSv1?
可以尝试:
curl http://169.254.169.254/latest/meta-data/
-
成功:说明 IMDSv1 可用
-
失败:说明已禁用或强制 IMDSv2
Q3:IMDSv2 是否完全安全?
不是“绝对安全”,但大幅降低风险:
-
SSRF 攻击难度显著提高
-
需要额外漏洞才能利用
8. 总结
-
IMDS 只有两个版本:IMDSv1 和 IMDSv2
-
IMDSv1 简单但存在严重安全隐患
-
IMDSv2 通过 Token + Hop Limit 提升安全性
-
实际生产环境:必须强制使用 IMDSv2
9. 一句话结论
IMDSv1 是“裸奔”,IMDSv2 是“带锁”,生产环境不要再用 v1。
更多推荐


所有评论(0)