我想对我的 AWS Fargate 任务与其他 AWS 服务之间的连接问题进行故障排除。
简短描述
由于以下原因,使用 Amazon Elastic Container Service (Amazon ECS) 在 Fargate 任务内运行的应用程序可能无法访问其他 AWS 服务:
- AWS Identity and Access Management (IAM) 权限不足
- 子网路由不正确
- 网络访问控制列表(网络 ACL)限制
- 安全组规则不正确
- Amazon Virtual Private Cloud (Amazon VPC) 端点配置不正确
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
设置并使用 ECS Exec
使用 ECS Exec 与 Fargate 任务的应用程序容器进行交互。满足使用 ECS Exec 的先决条件。然后,为 Fargate 任务启用 ECS Exec。
如果您的应用程序容器不支持通过 Shell 会话来运行 ECS Exec,请使用 aws-cli Docker 映像来创建一个新的 Fargate 任务。新任务必须与当前的 Fargate 任务位于同一个子网和 VPC 中。
配置 Amazon ECS 与其他 AWS 服务端点之间的连接
如果您的 Amazon ECS 任务无法连接到其他服务,请验证您是否满足以下条件:
- 端点 URL 是否正确,包括协议(http:// 或 https://)、主机名和端口。使用与您的 Amazon ECS 服务子网配置一致的子网来配置您的 VPC 端点。
- Amazon ECS 服务使用的子网必须具有正确的 DNS 配置才能解析端点 URL,可以是 Amazon 提供的 DNS 或自定义解析器。
- 连接到 Amazon ECS 任务的安全组必须允许出站访问目标服务的端口和协议。
- 子网中的网络访问控制列表 (ACL) 必须允许流量流向/流出所需服务端点。
测试 Fargate 任务与 AWS 服务端点之间的连接
要测试您的 Fargate 任务与 AWS 服务端点和端口的连接,请从您的容器运行以下 telnet 命令:
telnet endpoint-url port
**注意:**在前面的命令中,请将 endpoint-url 替换为服务的端点 URL,将 port 替换为服务的端口号。
如果连接成功,则您会得到以下示例输出:
Trying 10.0.1.169...
Connected to sns.us-east-1.amazonaws.com.
Escape character is '^]'.
要测试您的端点的 DNS 解析,请运行以下 nslookup 命令:
nslookup example-endpoint
输出示例:
Name: sns.us-east-1.amazonaws.com
Address: 10.0.1.169
如果您没有在容器中安装 telnet 或 nslookup 命令,请运行以下命令之一进行安装。
基于 Debian 的容器:
apt-get update
apt-get install -y dnsutils telnet
Amazon Linux 容器:
yum install -y bind-utils telnet
对连接超时错误进行故障排除
如果您收到连接超时错误,请检查您的网络配置。
安全组规则
如果流量通过 VPC 端点路由,则该端点的安全组必须允许来自以下的 TCP 流量通过端口 443:
- Amazon ECS 任务的安全组
- VPC CIDR 块
配置任务的安全组,以允许出站流量流向该服务的 VPC 端点。
VPC 路由
对于公有子网,Fargate 任务必须具有指向互联网网关的默认路由 0.0.0.0/0。
对于私有子网,路由表必须具有指向 NAT 网关或中转网关的路由,具体取决于您的架构。
代理设置
如果您的 Amazon ECS 任务使用代理服务器,请确保代理配置允许流量流向您的服务端点。
分析 VPC 流日志
如果您仍然遇到连接问题,请使用 Amazon VPC 流日志查看流量流详细信息。
对 IAM 权限问题进行故障排除
检查 Amazon ECS 任务角色是否向应用程序容器授予与其他 AWS 服务交互的权限。
例如,当您尝试连接到 Amazon Simple Notification Service (Amazon SNS) 端点时,您可能会遇到以下错误。
VPC 端点策略错误消息示例:
“调用 ListTopics 操作时出现错误 (AuthorizationError): 用户 arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 未获得授权,无法对以下资源执行 SNS:ListTopics: arn:aws:sns:region-name:123456789012:*,且 VPC 端点策略中存在显式拒绝”
要解决此问题,请授予 Amazon VPC 端点对 AWS 服务执行必要操作的权限。在前面的示例错误消息中,Amazon VPC 端点必须具有 ListTopics 权限。
任务角色权限错误消息示例:
“调用 ListTopics 操作时出现错误 (AuthorizationError): 用户 arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 未获得授权,无法对以下资源执行 SNS:ListTopics: arn:aws:sns:region-name:123456789012:*,因为没有任何基于身份的策略允许 SNS:ListTopics 操作”
要解决此问题,请授予 Amazon ECS 任务的 IAM 角色对接收方服务执行必要操作的权限。在前面的示例错误消息中,IAM 角色必须具有 ListTopics 权限。