如何對 Amazon ECS 中的錯誤訊息 "unable to pull secrets or registry auth" 進行疑難排解?
當我啟動 Amazon Elastic Container Service (Amazon ECS) 任務時,收到 "unable to pull secrets or registry auth" 錯誤訊息。
簡短描述
啟動 Amazon ECS 任務時,您會收到下列其中一個錯誤訊息:
- "ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed"
- "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried."
AWS Fargate 平台版本 1.4.0 使用任務彈性網路介面來提取映像檔和密碼。所有網路流量都會流經 Amazon Virtual Private Cloud (Amazon VPC) 內的彈性網路介面。可以透過 Amazon VPC 流程日誌檢視此流量。不過,該任務會使用您的網路組態,因為彈性網路介面放置在 Amazon VPC 中。
Amazon ECS 容器代理程式使用任務執行 AWS Identity and Access Management (IAM) 角色,以從下列服務取得資訊:
- AWS Systems Manager Parameter Store
- AWS Secrets Manager
對於使用客戶受管的 AWS Key Management Service (KMS) 金鑰加密的資料,請將下列許可授予任務執行 IAM 角色:
- ssm:GetParameters
- secretsmanager:GetSecretValue
- kms:Decrypt
解決方法
使用 AWSSupport-TroubleshootECSTaskFailedToStart 執行手冊,對無法啟動的 Amazon ECS 任務進行疑難排解。如果執行手冊的輸出不提供建議,則使用下列區段中的手動疑難排解方法。
重要事項:
- 在 ECS 叢集資源所在的相同 AWS 區域中使用執行手冊。
- 使用執行手冊時,請使用最近失敗的任務 ID,以便任務狀態清理不會在自動化期間中斷分析。如果失敗的任務屬於 Amazon ECS 服務的一部分,請在服務中使用最近失敗的任務。失敗的任務在自動化執行期間必須顯示於 ECS:DescribeTasks 中。依預設,停止的 ECS 任務會在任務進入已停止狀態後顯示 1 小時。
使用 TroubleshootECSTaskFailedToStart 執行手冊
若要執行 AWSSupport-TroubleshootECSTaskFailedToStart 執行手冊,請完成下列步驟:
- 開啟 AWS Systems Manager 主控台。
- 在導覽窗格的 Change Management(變更管理)下,選擇Automation(自動化)。
- 選擇 Execute automation(執行自動化)。
- 選擇「Amazon 所有」索引標籤。
- 在「自動化文件」下,搜尋「TroubleshootECSTaskFailedToStart」。
- 選取「AWSSupport-TroubleshootECSTaskFailedToStart」卡片。
**注意事項:**請確定您選取的是卡片上的選項按鈕,而不是超連結的自動化名稱。 - 選擇「下一步」。
**注意事項:**執行之後,分析結果會填入「全域輸出」區段。但是,請仍等待文件狀態移至「成功」。另請注意在「輸出」區段的任何例外情況。 - 針對「執行自動化文件」,選擇「簡單執行」。
- 在輸入參數區段中,對於 AutomationAssumeRole,輸入允許 Systems Manager Automation 執行動作的角色 ARN。
**注意事項:**請確保 AutomationAssumeRole 或 IAM 使用者或角色具有執行 AWSSupport-TroubleshootECSTaskFailedToStart 執行手冊所需的 IAM 許可。如果您未指定 IAM 角色,則 Systems Manager Automation 會使用可對執行手冊進行執行的 IAM 使用者或角色的許可。如需如何建立 Systems Manager Automation 擔任角色的詳細資訊,請參閱任務 1: 建立服務角色以進行自動化。 - 對於 ClusterName,輸入任務在其中無法啟動的叢集名稱。
- 對於 TaskId,輸入最近失敗的任務身分。
- 選擇執行。
根據自動化的輸出,使用下列其中一個手動疑難排解步驟。
檢查從子網路到網際網路的路由
如果您的 Fargate 任務在公有子網路中,請確認您的任務已指派公用 IP 位址。另請確認任務具有連線至網際網路閘道的預設路由 (0.0.0.0/0)。當您啟動新任務或建立新服務時,請開啟「公用自動指派」。
如果您使用下列組態,則請勿使用公有子網路中的網際網路閘道來連線 Secret Manager 或 Systems Manager:
- Secrets Manager 或 Systems Manager VPC 端點位於公有子網路中。
- 您在 Amazon VPC DHCP 設定中開啟了 AmazonProvidedDNS。
而是使用 Amazon VPC 端點。
**注意事項:**您無法為現有任務開啟「公用自動指派」。若要重新設定現有服務,請使用 AWS Command Line Interface (AWS CLI)。請勿使用 AWS 管理主控台。如果使用 AWS CloudFormation 堆疊建立 Amazon ECS 服務,請對 AWS::ECS::Service 修改 NetworkConfiguration 內容以更新服務。
如果您的 Fargate 任務在私有子網路中,請確認您的任務具有連線至網際網路連線來源的預設路由 (0.0.0.0/0)。
網際網路連線來源可以是 NAT 閘道、AWS PrivateLink 或其他來源:
- 如果您使用 NAT 閘道,請將 NAT 閘道置於公用子網路中。如需詳細資訊,請參閱使用網際網路閘道和 NAT 閘道的架構。
- 如果您使用 PrivateLink,則請確保您的 Fargate 基礎架構可以將安全群組用於 Amazon VPC 端點。
- 如果您使用自訂名稱網域伺服器,則請確認 DNS 查詢的設定。查詢必須對連接埠 53 具有出埠存取權,並使用 UDP 和 TCP 通訊協定。此外,它必須對連接埠 443 具有 HTTPS 存取權。
檢查您的網路 ACL 和安全群組設定
確認您的網路存取控制清單 (網路 ACL) 和安全群組不會封鎖子網路對連接埠 443 的出埠存取。如需詳細資訊,請參閱使用安全群組控制 AWS 資源的流量。
**注意事項:**Fargate 任務必須具有連接埠 443 的出埠存取權,以允許送出流量和存取 Amazon ECS 端點。
檢查您的 Amazon VPC 端點
如果您使用 PrivateLink,則您必須建立所需的端點。Fargate 平台 1.4.0 版或更新版本需要下列端點:
- com.amazonaws.region.ecr.dkr
- com.amazonaws.region.ecr.api
- S3 閘道端點
- com.amazonaws.region.logs
如需詳細資訊,請參閱 Amazon Elastic Container Registry (Amazon ECR) VPC 端點考量事項。
注意事項: 如果您的任務定義使用 Secrets Manager、System Manager 參數或 Amazon CloudWatch Logs,則您可能需要定義端點。如需詳細資訊,請參閱下列文件:
對於 PrivateLink,請檢查 Amazon VPC 的安全群組是否允許來自 TCP 連接埠 443 上的 Fargate 任務安全群組或 Fargate 任務 VPC CIDR 範圍的流量。
若要確認 Fargate 基礎架構具有服務存取權,請檢查 VPC 端點政策和 Amazon Simple Storage Service (Amazon S3) 的端點政策。
檢查您的 IAM 角色和許可
任務執行角色授予 Amazon ECS 容器和 Fargate 代理程式所需的許可,以便對任務進行 API 呼叫。Fargate 在您執行下列動作時需要此角色:
- 從 Amazon ECR 中提取容器映像。
- 使用 awslogs 日誌驅動程式。
- 使用私有登錄身分驗證。
- 使用 Secret Manager 密碼或 Systems Manager Parameter Store 參數來參照機密資料。
如果您的使用案例涉及前述任何範例,則請在任務執行角色中定義所需的許可。如需必要許可的完整清單,請參閱 Amazon ECS 任務執行 IAM 角色。
檢查 Amazon ECS 任務定義中參照的機密資訊
**注意事項:**如果您在執行 AWS CLI 命令時收到錯誤,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
檢查密碼和參數名稱是否與 Amazon ECS 任務定義中的參照名稱相符。然後,檢查容器定義中的值是否與 Amazon ECS 任務定義中的值相符。如需詳細資訊,請參閱如何將機密或敏感資訊安全地傳遞至 Amazon ECS 任務中的容器?
如果 Systems Manager Parameter Store 參數和任務位於相同的區域中,則使用完整的 ARN 或密碼名稱。如果參數存在於不同的「區域」中,則必須指定完整 ARN。
若要檢查 Systems Manager 參數名稱和 ARN,請完成以下步驟:
- 開啟 AWS Systems Manager 主控台。
- 在導覽窗格中,選擇 Parameter Store,然後確認您的 Parameter Store 名稱。
- 若要取得參數的 ARN,請使用 AWS CLI 執行下列命令。將 name_of_parameter_store_secret 取代為 Parameter Store 密碼名稱:
**注意事項:**參考 Secrets Manager 密碼的參數無法使用 Parameter Store 版本控制或歷史記錄功能。如需詳細資訊,請參閱限制。$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前