You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建无需强制IMDSv2的AL2023 AMI?

解决方法:通过Cloud-Init自动配置IMDS选项

因为IMDS的强制要求是实例级属性,无法直接在AMI中固化,但可以通过在AMI中预置Cloud-Init脚本,让实例启动后自动修改自身的IMDS配置,绕过Terraform启动配置的限制。

具体步骤如下:

  1. 在Packer构建过程中添加Cloud-Init脚本
    在Packer的provisioner阶段添加shell脚本,将自定义Cloud-Init配置写入实例的Cloud-Init配置目录:

    cat <<EOF > /etc/cloud/cloud.cfg.d/01-disable-imdsv2-force.cfg
    runcmd:
      - >
        INSTANCE_ID=\$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
        aws ec2 modify-instance-metadata-options --instance-id \$INSTANCE_ID --require-imdsv2 false --http-endpoint enabled --http-put-response-hop-limit 2
    EOF
    

    该脚本会在实例启动时自动获取自身ID,调用AWS CLI修改IMDS选项,禁用IMDSv2强制要求。

  2. 确保实例具备修改权限
    构建AMI的临时实例需要拥有ec2:ModifyInstanceMetadataOptions权限,可通过指定具备该权限的IAM实例配置文件,或在实例的IAM角色中添加对应权限策略。

  3. 构建并验证AMI
    完成Packer构建后,启动测试实例,执行以下命令验证配置是否生效:

    aws ec2 describe-instance-metadata-options --instance-id <你的实例ID>
    

    检查输出中RequireImdsv2字段是否为false。

替代方案(若适用)

如果你的旧Terraform版本支持EC2 Launch Template,可创建Launch Template并配置:

resource "aws_launch_template" "example" {
  # 其他配置...
  metadata_options {
    require_imdsv2 = false
  }
}

之后让Terraform通过Launch Template创建实例,替代原有的Launch Config。

注意:Cloud-Init脚本执行需要实例能访问EC2 API,需确保实例有公网访问权限或配置了EC2 VPC端点。

内容的提问来源于stack exchange,提问作者Tien Dung Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:42:34