如何通过Terraform设置Fargate实例的IMDSv2元数据跳数
Fargate IMDSv2 跳数配置(Terraform实现)
问题原因
报错根源在于Fargate默认的IMDSv2 HTTP响应跳数(http_put_response_hop_limit)为1,而你使用的InstanceProfileAWSCredentials在请求元数据服务器时,内部请求链路存在额外跳转,超出了默认跳数限制,导致无法连接凭据服务器。
Terraform 配置方案
1. 针对单个ECS任务配置
在aws_ecs_task_definition资源中添加metadata_options块,将http_put_response_hop_limit设为2:
resource "aws_ecs_task_definition" "target_task" { family = "your-task-family" network_mode = "awsvpc" # Fargate 强制要求 awsvpc 网络模式 requires_compatibilities = ["FARGATE"] cpu = "256" memory = "512" execution_role_arn = aws_iam_role.ecs_execution_role.arn task_role_arn = aws_iam_role.ecs_task_role.arn # 配置 IMDSv2 跳数限制 metadata_options { http_endpoint = "ENABLED" http_put_response_hop_limit = 2 http_tokens = "REQUIRED" # 可选,强制使用 IMDSv2,增强安全性 } container_definitions = jsonencode([ { name = "your-container" image = "your-image:tag" essential = true # 容器相关配置 } ]) }
2. 全局ECS集群配置(所有任务默认继承)
若需要集群内所有Fargate任务统一应用该配置,可在aws_ecs_cluster资源中设置metadata_configuration:
resource "aws_ecs_cluster" "target_cluster" { name = "your-cluster-name" configuration { metadata_configuration { http_put_response_hop_limit = 2 } # 其他集群配置(如执行命令、Service Connect等) } }
注意事项
- 必须确保任务网络模式为
awsvpc,这是Fargate的硬性要求,也是IMDS功能生效的前提。 - 开启
http_tokens = "REQUIRED"可强制任务使用IMDSv2,避免回退到安全性较低的IMDSv1,建议启用。 - 配置修改后,需重新部署对应ECS任务,新配置才会生效。
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

