动手实验 | 从 Amazon EC2 实例提取元数据


  实验目标

掌握安全获取 EC2实例元数据的核心技能。在 AWS 云环境中,EC2实例元数据(如实例 ID、公网 IP、AMI 类型、安全组规则等)是自动化运维、日志关联和安全审计的关键信息。本实验旨在通过 AWS 控制台,完成以下目标:使用 IMDSv2令牌机制防止未授权访问,通过获取的实例 ID 动态配置应用服务。

  技术要点

EC2实例元数据存储在 http://169.254.169.254的虚拟接口中,包含两类信息。实例属性:如 instance-id、public-ipv4、ami-id,用于标识实例身份和环境;动态令牌:IMDSv2通过会话令牌(Token)限制访问,防止 CSRF 攻击或内部数据泄露。

  作业步骤

本次采用 AWS Console 界面完成作业。
注意:根据项目的具体情况,可以采用不同的实施方法。比如使用命令行(CLI)部署、代码部署 (CloudFomation、Terraform 等)、以及其它开发语言(SDK)完成作业。

步骤一:通过 SSH 登录 EC2实例
在 AWS 控制台进入 EC2服务,选择目标实例,点击“连接”→“SSH 客户端”;
复制提供的 SSH 命令(如 ssh -i "key.pem" ec2-user@<公网 IP>),在本地终端执行并登录。

步骤二:生成 IMDSv2令牌并查询元数据
执行以下命令获取令牌(TTL 设为6小时):

TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

使用令牌查询实例 ID 和公网 IP:
echo "Instance ID: $(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id)"
echo "Public IP: $(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/public-ipv4)"


步骤三:通过 AWS 控制台直接查看元数据
返回 AWS 控制台,进入 EC2实例的“描述”选项卡;
向下滚动至“元数据”部分,点击“查看完整元数据”;
在弹出的 IMDSv2终端中粘贴之前生成的令牌,浏览所有可用字段(如 placement/availability-zone、security-groups)。

  结果验证

1. 对比控制台显示的实例 ID 与命令行输出结果,确认两者一致,将获取的实例 ID 写入临时文件(如/tmp/instance_info.txt)。
2. 尝试不使用令牌直接访问元数据(如 curl http://169.254.169.254/latest/meta-data/instance-id),返回401 Unauthorized 错误。
3. 检查 CloudTrail 日志,确认所有元数据访问请求均携带有效令牌。
通过本实验,可以快速掌握安全获取 EC2元数据的方法,并理解其在自动化运维中的关键作用。