我想對 Fargate 任務和其他 AWS 服務之間的連線問題進行疑難排解。
簡短說明
使用 Amazon Elastic Container Service (Amazon ECS) 在 Fargate 任務內執行的應用程式可能無法存取其他 AWS 服務,原因如下:
- AWS Identity and Access Management (IAM) 的權限不足
- 不正確的子網路路由
- 網路存取控制清單 (network ACL) 限制
- 安全群組規則不正確
- Amazon Virtual Private Cloud (Amazon VPC) 端點組態不正確
解決方法
注意: 如果您在執行 AWS Command Line Interface (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 端點路由,則端點的安全群組必須允許來自下列任一連接埠的連接埠 443 上的 TCP 流量:
- Amazon ECS 任務的安全群組
- VPC CIDR 區塊
設定任務的安全群組,以允許傳出流量到服務的 VPC 端點。
VPC 路由
對於公有子網路,Fargate 任務必須具有指向網際網路閘道的預設路由 0.0.0.0/0。
對於私有子網路,路由表必須根據您的架構具有指向 NAT 閘道或傳輸閘道的路由。
Proxy 設定
如果您的 Amazon ECS 任務使用 Proxy 伺服器,請確定 Proxy 組態允許傳送到服務端點的流量。
分析 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 權限。