内容目录
记录将AWS EC2 升级到 IMDSv2 的过程
背景
AWS Instance Metadata Service (IMDS) 是为EC2实例提供实例元数据的服务。为了提高安全性,AWS推出了IMDSv2版本。最近工作需要完成这个升级的工作,所以本文将详细介绍如何将EC2实例从IMDSv1升级到IMDSv2。
为什么要升级到 IMDSv2?
在深入了解升级步骤之前,让我们先理解为什么需要这次升级:
IMDSv1 存在的安全风险:
- 容易受到服务器端请求伪造(SSRF)攻击
- 缺乏请求验证机制
- 可能被恶意程序利用
IMDSv2 的优势:
- 引入了会话令牌机制,提高安全性
- 使用 PUT 请求获取临时令牌,更符合安全最佳实践
- 可以有效防止 SSRF 攻击
前提条件
在开始升级之前,请确保满足以下条件:
- EC2 实例状态为"正在运行"
- 当前 IMDSv2 设置为"可选"模式
- 已获取必要的 AWS 控制台访问权限
- 备份了重要数据(以防万一)
升级步骤详解
1. 检查实例当前状态
首先,我们需要确认实例是否已经准备好升级:
# 检查当前 IMDS 版本
curl -w "%{http_code}\n" http://169.254.169.254/latest/meta-data/
如果返回 200,说明当前还在使用 IMDSv1。
2. 在 AWS 控制台中修改设置
- 打开 AWS 管理控制台
- 导航到 EC2 服务
- 在左侧导航栏中选择"实例"
- 找到并选中目标实例
- 点击"操作" → "实例设置" → "修改实例元数据选项"
3. 验证 IMDSv1 使用情况
在修改设置之前,请检查是否仍有应用在使用 IMDSv1:
- 在 CloudWatch 中查看
MetadataNoToken
指标 - 确保该指标值为 0(表示没有 IMDSv1 请求)
- 建议观察至少 24 小时,确保没有遗漏的应用
4. 启用强制 IMDSv2
确认安全后,执行以下步骤:
- 在"修改实例元数据选项"页面
- 将"IMDSv2"设置更改为"必需"
- 点击"保存"确认更改
5. 验证升级结果
Linux 系统验证
# 1. 测试 IMDSv1(应返回 401 错误)
curl -v http://169.254.169.254/latest/meta-data/
# 2. 测试 IMDSv2(应成功获取数据)
TOKEN=curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"
curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/
Windows 系统验证
在 PowerShell 中执行:
# 1. 测试 IMDSv1
curl -v http://169.254.169.254/latest/meta-data/
# 2. 测试 IMDSv2
$TOKEN = (Invoke-WebRequest -UseBasicParsing -Method PUT -Headers @{"X-aws-ec2-metadata-token-ttl-seconds"="21600"} -Uri "http://169.254.169.254/latest/api/token").Content
Invoke-WebRequest -UseBasicParsing -Headers @{"X-aws-ec2-metadata-token"=$TOKEN} -Uri "http://169.254.169.254/latest/meta-data/"
常见问题解答
升级后无法访问元数据怎么办?
检查以下几点:
- 确认使用了正确的 IMDSv2 请求格式
- 验证 Token 是否过期(默认有效期为 6 小时)
- 检查网络安全组设置是否正确
应用程序报错怎么处理?
- 检查应用程序代码中的元数据访问方式
- 更新应用程序使用 IMDSv2 API
- 确保所有依赖库都支持 IMDSv2
如何监控升级后的状态?
- 定期检查 CloudWatch 中的
MetadataNoToken
指标 - 设置告警监控未授权的访问尝试
- 检查应用程序日志中的相关错误
总结
升级过程本身就是点一下选项,很简单,但是提前一定要确认好服务器没有在使用IMDSv1的情况下进行升级。