如何對 Amazon ECS 中的 "unable to pull secrets or registry auth" (無法提取密碼或登錄檔授權) 錯誤進行疑難排解?

上次更新日期:2022 年 4 月 7 日

我在啟動 Amazon Elastic Container Service (Amazon ECS) 任務時收到下列其中一個錯誤:

ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed (ResourceInitializationError:無法提取密碼或登錄檔授權:提取命令失敗::訊號:已刪除 )

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried (ResourceInitializationError:無法提取密碼或登錄檔授權:執行資源擷取失敗:無法從 ASM 擷取密碼:已重試服務呼叫)

簡短說明

AWS Fargate 平台版本 1.4.0 使用任務彈性網路介面來提取映像和密碼。所有網路流量都會通過您 Amazon Virtual Private Cloud (Amazon VPC) 內的彈性網路介面。您可檢視此通過 Amazon VPC Flow Logs 的流量。但是,該任務會使用您的網路組態,而非使用 Fargate 擁有的彈性網路介面。這是因為彈性網路介面放置於您的 Amazon VPC 中。

Amazon ECS 容器代理程式使用任務執行 AWS Identity and Access Management (IAM) 角色,從 AWS Systems Manager Parameter Store 或 AWS Secrets Manager 獲得資訊。若您使用客户託管的 AWS Key Management Service (AWS KMS) 金鑰對 Systems Manager Parameter Store 或 Secrets Manager 中的資料進行加密,則您必須對任務執行 IAM 角色授予下列動作的許可權限: ssm:GetParameterssecretsmanager:GetSecretValuekms:Decrypt

解析度

檢查從子網路到網際網路的路由

若您在公有子網路中具有 Fargate 任務,則請驗證您的任務是否具有至網際網路閘道的指派公有 IP 地址和預設路由 (0.0.0.0/0)。啟動新任務或建立新服務時,請務必啟用自動指派公有。若您在公有子網路中使用 Secrets Manager 或 Systems Manager VPC 端點,且在 Amazon VPC 的 DHCP 選項設定中啟用了 AmazonProvidedDNS,則 Amazon VPC 端點會用來觸及 Secrets Manager 或 Systems Manager,而非公有子網路中的網際網路閘道。

注意:您無法為現有任務啟用此選項。若為現有服務,您將無法使用 AWS 管理主控台來啟用此選項。但是,您可使用 AWS Command Line Interface (AWS CLI) 重新設定現有服務。如果您使用 AWS CloudFormation 堆疊建立 Amazon ECS 服務,則可透過修改 AWS::ECS::ServiceNetworkConfiguration 屬性來更新該服務。

如果您在私有子網路中具有 Fargate 任務,則請驗證您的任務是否具有到 NAT 閘道、AWS PrivateLink,或其他網際網路連線來源的預設路由 (0.0.0.0/0)。

  • 若您使用 NAT 閘道,則請將 NAT 閘道置於公有子網路中。如需更多資訊,請參閲具有網際網路閘道和 NAT 閘道的架構
  • 若您使用 PrivateLink,請確定您的 Fargate 基礎設施可使用 Amazon VPC 端點的安全群組。
  • 若使用自訂名稱網域伺服器,則請確保 DNS 查詢使用 UDP 和 TCP 通訊協定在連接埠 53 上具有對外存取權,且在連接埠 443 上具有 HTTPS 存取權。

檢查您的網路 ACL 和安全群組設定

驗證您的網路存取控制清單 (ACL) 和安全群組不會阻止從子網路對連接埠 443 的對外存取。如需詳細資訊,請參閱 VPC 的安全群組

注意: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 ECR VPC 端點的注意事項

注意:若您的任務定義使用 Secrets Manager、Systems Manager 參數,或 Amazon CloudWatch Logs,則可能需要定義端點。如需詳細資訊,請參閲使用 Secrets Manager 搭配 VPC 端點建立適用於 Amazon ECS 的 VPC 端點,以及使用 CloudWatch Logs 搭配介面 VPC 端點

如果您使用 PrivateLink,請確保連接至 Amazon VPC 端點的安全群組允許來自 TCP 連接埠 443 上 Fargate 任務安全群組或 Fargate 任務 VPC CIDR 範圍的流量。

檢查 VPC 端點政策Amazon Simple Storage Solution (Amazon S3) 的端點政策,以確保允許 Fargate 基礎設施存取服務。

檢查您的 IAM 角色和許可權限

任務執行角色授予 Amazon ECS 容器和 Fargate 代理程式對任務進行 API 呼叫所需的許可權限。執行以下作業時,Fargate 需要此角色:

  • 從 Amazon Elastic Container Registry (Amazon ECR) 提取容器的圖片。
  • 使用 awslog 記錄驅動程式。
  • 使用私有登錄檔身分驗證
  • 使用 Secrets Manager 密碼或 Systems Manager Parameter Store 參數參考敏感資料。

若您的使用案例涉及上述任何方案,則請確保您具有在任務執行角色中定義的所需許可權限。如需有關所需許可權限的完整清單,請參閲 Amazon ECS 任務執行 IAM 角色

檢查 Amazon ECS 任務定義中參考的敏感資料

檢查密碼/參數名稱是否與 Amazon ECS 任務定義中參考的名稱相符。然後,檢查任務定義中容器定義的值是否與 Amazon ECS 任務定義的值相符。如需詳細資訊,請參閱如何將密碼或敏感資訊安全地傳遞至 Amazon ECS 任務中的容器?

如果 Systems Manager Parameter Store 參數與要啟動的任務位於同一區域,則可以使用完整 ARN 或機密的名稱。如果參數存在於不同區域,則必須指定完整 ARN。

若要檢查 System Manager 參數名稱和 ARN,請執行以下操作:

1.    開啟 AWS Systems Manager 主控台

2.    在導覽窗格中,選擇 Parameter Store (參數存放區),並確認 Parameter store name (參數存放區名稱)。

3.    然後,若要取得參數相關的 ARN 資訊,請使用 AWS Command Line Interface (AWS CLI) 並執行以下命令:
注意:用您的參數存放區機密名稱取代 name_of_parameter_store_secret

$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

注意:參考 Secrets Manager 機密的參數不能使用 Parameter Store 版本控制或歷史記錄功能。如需詳細資訊,請參閲限制


此文章是否有幫助?


您是否需要帳單或技術支援?