跳至內容

我該如何對 Amazon ECS 與 Amazon S3 之間的連線問題進行疑難排解?

2 分的閱讀內容
0

我想要從 Amazon Elastic Container Service (Amazon ECS) 任務存取 Amazon Simple Storage Service (Amazon S3),但遇到連線問題。

解決方法

分析您的 CloudWatch Logs 以識別 Amazon S3 存取問題的原因

首先,設定對 CloudWatch Logs 的存取權。接著,使用 CloudWatch Logs Insights 來找出問題原因。

設定 CloudWatch Logs 存取權

若要為您的 Amazon ECS 任務定義設定 Amazon CloudWatch Logs,請完成以下步驟:

  1. 開啟 Amazon ECS console (Amazon ECS 主控台)。
  2. 在導覽窗格中,選擇 Task definitions (任務定義)。
  3. 選取您的任務定義,然後將以下程式碼加入任務定義:
    {
        "containerDefinitions": [
            {
                "name": "my-container",
                "image": "my-image:latest",
                "logConfiguration": {
                    "logDriver": "awslogs",
                    "options": {
                        "awslogs-group": "/ecs/my-task",
                        "awslogs-region": "region-code",
                        "awslogs-stream-prefix": "ecs"
                    }
                }
            }
        ]
    }
    **注意:**將 my-container 替換為您的容器執行個體名稱,my-image:latest 替換為您的映像名稱與標籤,region-code 替換為您的 AWS 區域。
  4. 更新 Amazon ECS 服務,使用最新版本的任務定義。

使用 CloudWatch Logs Insights 來確定問題的原因

若要搜尋一般的 Amazon S3 錯誤,請執行以下查詢:

filter @message like /S3|AccessDenied|NoSuchBucket/

若要搜尋特定儲存貯體的存取問題,請執行以下查詢:

filter @message like /my-bucket-name/

**注意:**將 my-bucket-name 替換為您的儲存貯體名稱。

使用這些資訊判斷問題是否與 AWS Identity and Access Management (IAM) 權限、網路連線、儲存貯體組態或應用程式問題有關。接著,完成相關的疑難排解步驟。

確認您的 IAM 角色組態

確認 Amazon ECS 任務的任務角色具有必要的 Amazon S3 權限,例如唯讀操作的 AmazonS3ReadOnlyAccess 政策。查看 AWS CloudTrail 日誌,找出與 Amazon S3 有關的拒絕動作。例如,如果您的 Amazon ECS 任務必須從 my-app-data 儲存貯體讀取物件,則將以下自訂政策附加到該任務:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-app-data",
                "arn:aws:s3:::my-app-data/*"
            ]
        }
    ]
}

**注意:**上述政策可讓任務列出 my-app-data 儲存貯體的內容並從中擷取物件。

檢查您的網路組態

位於公有子網路的任務

對於位於公有子網路的任務,請檢查虛擬私有雲端 (VPC) 中所屬執行個體的網路存取控制清單 (網路 ACL)。網路 ACL 必須允許連接埠 443 的傳出流量。此外,確認與您任務相關聯的安全群組允許對 Amazon S3 AWS 受管首碼清單執行連接埠 443 的傳出 HTTPS 流量。

位於私有子網路的任務

對於位於私有子網路的任務,請確認已將 NAT閘道與子網路的路由表建立關聯。NAT閘道會建立一條通往 Amazon S3 端點的網際網路路徑。如果您使用Amazon S3的VPC端點,請檢查與您 VPC 關聯的 Amazon S3 閘道端點路由表。確認路由表包含將流量導向至 Amazon S3 閘道端點的 Amazon S3 AWS 受管首碼清單的路由。此路由可確保對 Amazon S3 的請求不會經由公有網際網路傳送。

當您使用 Amazon S3 介面端點時,請確認附加於該端點的安全群組允許連接埠 443 的 HTTPS 傳入流量。另外,確保該端點的私有 DNS 設定,及 VPC 的啟用 DNS 主機名稱啟用 DNS 支援的 DNS 設定已啟用。最後,確認應用程式使用的是 s3.region.amazonaws.com 端點,而非 s3.amazonaws.com 全域端點。

測試 Amazon ECS 任務與 Amazon S3 端點的網路連線性

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

確認您的網路設定 (包括防火牆和安全群組) 允許流量通往 Amazon S3 端點。

**注意:**您可以使用 ECS Exec 執行以下命令。

若要測試與連接埠 443 上 Amazon S3 端點的 HTTPS 連線,請執行以下 telnetcurl 命令:

telnet s3.region-code.amazonaws.com 443
curl -v https://s3.region-code.amazonaws.com

**注意:**請將 region-code 替換為您的區域。您可能需要安裝 telnet 命令。

若要測試容器執行個體是否可以進行驗證並執行 Amazon S3 操作,請執行 ls AWS CLI 命令:

aws s3 ls

如果前述測試失敗,請檢查您的安全群組、網路 ACL 和防火牆規則是否封鎖了連接埠。

相關資訊

如何對來自 Amazon S3 的「403 存取遭拒」錯誤進行疑難排解?

如何從 Fargate 上的 Amazon ECS 任務存取其他 AWS 服務?

如何對在 Amazon S3 儲存貯體上執行 "cp" 或 命令時出現的連線錯誤進行疑難排解?"sync"

AWS 官方已更新 1 年前