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

如何查找AWS ECS Fargate服务使用的端口及协议以优化NACL配置?

解决ECS Fargate服务NACL端口限制问题的实操方案

一、先搞清楚Fargate需要的两类端口

Fargate服务的流量分两种,漏了任何一种都会断流:

  • 业务对外暴露的端口:用户访问你服务的端口
  • 内部依赖的通信端口:Fargate和AWS服务、其他内部服务通信的端口,这也是你之前只加IP范围没用的核心原因

1. 快速获取业务端口

  • 直接查看ECS任务定义:打开ECS控制台,找到对应任务定义的容器定义,里面的端口映射就是业务要用到的端口(比如80、443)。
  • 用AWS CLI批量查询:
    aws ecs describe-task-definitions --task-definition <你的任务定义名> --query 'taskDefinitions[*].containerDefinitions[*].portMappings'
    
    这个命令会返回所有容器的端口映射,包括容器端口和主机端口(如果配置了的话)。

2. 必须放行的内部通信端口

Fargate要正常运行,这些端口绝对不能拦截:

  • ECS控制平面通信:TCP 443(Fargate任务要和ECS服务端交互)
  • 日志推送:TCP 443(往CloudWatch Logs发送日志)
  • 密钥/配置拉取:TCP 443(访问Secrets Manager或Parameter Store)
  • 其他依赖服务:比如你的服务连接RDS就要放行3306(MySQL)或5432(PostgreSQL),连接Redis放行6379,依此类推。

二、确定Fargate任务的IP范围

Fargate任务的IP来自你VPC里的子网CIDR,不用找AWS的Fargate全局IP范围,直接用你自己子网的CIDR即可(比如10.0.1.0/24、10.0.2.0/24)。

三、NACL配置要点(无状态规则要双向放行)

NACL是无状态的,入站和出站规则都要配置,不然会出现能进不能出或者反过来的情况:

  1. 入站规则:
    • 放行外部访问业务端口:比如允许指定IP段(或0.0.0.0/0如果是公网服务)访问TCP 80/443
    • 放行子网内部的必要通信:比如子网CIDR访问TCP 443,以及服务间互访的端口(如果有)
  2. 出站规则:
    • 放行子网CIDR访问TCP 443(和AWS服务通信)
    • 放行任务访问依赖服务的端口(比如RDS的3306)
    • 如果服务要调用外部API,放行TCP 443

四、测试和排查技巧

  • 不要直接删除全放行规则:先添加限制规则,把优先级设得比全放行规则高(数字越小优先级越高),测试服务正常后再删除全放行规则。
  • 用VPC Flow Logs定位问题:开启子网的Flow Logs,查看里面的REJECT记录,里面会显示被拒绝的IP、端口和协议,照着补全规则即可。

内容的提问来源于stack exchange,提问作者Naveed Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:35:12