Wie behebe ich den Fehler „Secrets oder Registry Auth können nicht abgerufen werden“ in Amazon ECS?

Lesedauer: 8 Minute
0

Ich habe einen der folgenden Fehler erhalten, als ich eine Amazon Elastic Container Service (Amazon ECS)-Aufgabe gestartet habe: „ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed" or "ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried."

Kurzbeschreibung

Die AWS Fargate-Plattform-Version 1.4.0 verwendet die Task Elastic Network-Schnittstelle, um das Image und die Geheimnisse abzurufen. Der gesamte Netzwerkverkehr fließt über die elastische Netzwerkschnittstelle innerhalb Ihrer Amazon Virtual Private Cloud (Amazon VPC). Sie können diesen Datenverkehr in Ihren Amazon VPC Flow-Protokollen einsehen. Die Aufgabe verwendet jedoch Ihre Netzwerkkonfiguration anstelle der elastischen Netzwerkschnittstellen, die Fargate besitzt. Dies liegt daran, dass die elastischen Netzwerkschnittstellen in Ihrer Amazon VPC platziert sind.

Der Amazon ECS-Container-Agent verwendet die Rolle „AWS Identity and Access Management“ (IAM) zur Aufgabenausführung, um Informationen von den folgenden Diensten abzurufen:

  • AWS Systems Manager Parameter Store
  • AWS Secrets Manager

Wenn Sie Daten mithilfe eines vom Kunden verwalteten AWS Key Management Service (AWS KMS)-Schlüssels verschlüsseln, erteilen Sie der IAM-Rolle für die Aufgabenausführung die folgenden Berechtigungen:

  • ssm:GetParameters
  • secretsmanager:GetSecretValue
  • kms:Decrypt.

Verwenden Sie das Runbook AWSSupport-TroubleshootECSTaskFailedToStart, um Fehler bei Amazon ECS-Aufgaben zu beheben, die nicht gestartet werden können. Diese Automatisierung überprüft die folgenden Konfigurationen:

  • Netzwerkkonnektivität zur konfigurierten Container-Registry
  • Fehlende IAM-Berechtigungen, die für die Rolle zur Aufgabenausführung erforderlich sind
  • Endpunktkonnektivität für Virtual Private Cloud (VPC)
  • Konfiguration von Sicherheitsgruppenregeln
  • Referenzen zu Geheimnissen von AWS Secrets Manager
  • Konfiguration protokollieren

Wenn die Ausgabe des Runbooks keine Empfehlungen enthält, verwenden Sie die manuellen Ansätze zur Fehlerbehebung im folgenden Abschnitt. 

Behebung

Wichtig:

  • Verwenden Sie das Runbook in derselben AWS-Region, in der sich Ihre ECS-Cluster-Ressourcen befinden.
  • Wenn Sie das Runbook verwenden, müssen Sie die Task-ID verwenden, die zuletzt ausgefallen ist. Wenn die fehlgeschlagene Aufgabe Teil des Amazon ECS-Service ist, verwenden Sie die zuletzt fehlgeschlagene Aufgabe im Service. Die fehlgeschlagene Aufgabe muss während der Ausführung der Automatisierung in ECS:DescribeTasks sichtbar sein. Standardmäßig sind gestoppte ECS-Aufgaben 1 Stunde lang sichtbar, nachdem sie in den Status Gestoppt gewechselt sind. Die Verwendung der ID der zuletzt fehlgeschlagenen Aufgabe verhindert, dass die Bereinigung des Aufgabenstatus die Analyse während der Automatisierung unterbricht.

Führen Sie die folgenden Schritte aus, um das Runbook AWSSupport-TroubleshootECSTaskFailedToStart auszuführen:

  1. Öffnen Sie die AWS Systems Manager-Konsole.
  2. Wählen Sie im Navigationsbereich unter Management ändern die Option Automatisierung aus.
  3. Wählen Sie Automatisierung ausführen aus.
  4. Wählen Sie die Registerkarte Owned by Amazon aus.
  5. Suchen Sie unter Automatisierungsdokument nach TroubleshootECSTaskFailedToStart.
  6. Wählen Sie die Karte AWSSupport-TroubleshootECSTaskFailedToStart aus.
    **Hinweis:**Stellen Sie sicher, dass Sie das Optionsfeld auf der Karte auswählen und nicht den mit dem Hyperlink verknüpften Automatisierungsnamen.
  7. Wählen Sie Weiter aus.
    **Hinweis:**Nach der Ausführung werden die Analyseergebnisse in den Abschnitt Globale Ausgabe eingetragen. Warten Sie jedoch, bis der Status des Dokuments auf Erfolgreich wechselt. Achten Sie außerdem auf Ausnahmen im Abschnitt Ausgabe.
  8. Wählen Sie bei Automatisierungsdokument ausführen die Option Einfache Ausführung.
  9. Geben Sie im Abschnitt Eingabeparameter für AutomationAssumeRole den ARN der Rolle ein, die Systems Manager Automation das Ausführen von Aktionen ermöglicht.
    Hinweis: Stellen Sie sicher, dass entweder der AutomationAssumeRole- oder der IAM-Benutzer oder die IAM-Rolle über die erforderlichen IAM-Berechtigungen verfügt, um das Runbook „AWSSupport-TroubleshootECSTaskFailedToStart“ auszuführen. Wenn Sie keine IAM-Rolle angeben, verwendet Systems Manager Automation die Berechtigungen des IAM-Benutzers oder der IAM-Rolle, die das Runbook ausführt. Weitere Informationen zum Erstellen der zu übernehmenden Rolle für Systems Manager Automation finden Sie unter Aufgabe 1: Erstellen Sie Servicerolle für Automation.
  10. Geben Sie für ClusterName den Namen des Clusters ein, in dem die Aufgabe nicht gestartet werden konnte.
  11. Geben Sie für TaskId die Identifikation der zuletzt fehlgeschlagenen Aufgabe ein.
  12. Wählen Sie Ausführen aus. 

Verwenden Sie basierend auf der Ausgabe der Automatisierung einen der folgenden manuellen Schritte zur Fehlerbehebung.

Überprüfen der Routen von Ihren Subnetzen zum Internet

Wenn Sie eine Fargate-Aufgabe in einem öffentlichen Subnetz haben, stellen Sie sicher, dass Ihrer Aufgabe eine öffentliche IP-Adresse zugewiesen ist. Stellen Sie außerdem sicher, dass die Aufgabe eine Standardroute (0.0.0.0/0) zu einem Internet-Gateway hat. Wenn Sie eine neue Aufgabe starten oder einen neuen Dienst erstellen, aktivieren Sie Öffentlich automatisch zuweisen.

Wenn Sie die folgenden Konfigurationen verwenden, verwenden Sie nicht das Internet-Gateway im öffentlichen Subnetz, um den Secrets Manager oder Systems Manager zu erreichen. Verwenden Sie stattdessen einen Amazon VPC-Endpunkt:

  • Die VPC-Endpunkte von Secrets Manager oder Systems Manager befinden sich in einem öffentlichen Subnetz.
  • Sie haben AmazonProvidedDNS in den DHCP-Einstellungen Ihrer Amazon VPC aktiviert.

Hinweis: Sie können Öffentlich automatisch zuweisen für vorhandene Aufgaben nicht aktivieren. Für bestehende Services können Sie zum Neukonfigurieren der Services nur die AWS Command Line Interface (AWS CLI) verwenden. Sie können die AWS-Managementkonsole nicht verwenden. Wenn Sie einen AWS CloudFormation-Stack zum Erstellen Ihres Amazon ECS-Dienstes verwendet haben, ändern Sie die NetworkConfiguration-Eigenschaft AWS::ECS::Service, um den Dienst zu aktualisieren.

Wenn Sie eine Fargate-Aufgabe in einem privaten Subnetz haben, stellen Sie sicher, dass Ihre Aufgabe über eine Standardroute (0.0.0.0/0) zur Internetverbindungsquelle verfügt. Die Internetverbindungsquelle kann ein NAT-Gateway, AWS PrivateLink oder eine andere Quelle sein.

  • Wenn Sie ein NAT-Gateway verwenden, platzieren Sie Ihr NAT-Gateway in einem öffentlichen Subnetz. Weitere Informationen finden Sie unter Architektur mit einem Internet-Gateway und einem NAT-Gateway.
  • Wenn Sie PrivateLink verwenden, stellen Sie sicher, dass Ihre Fargate-Infrastruktur die Sicherheitsgruppen für Ihre Amazon VPC-Endpunkte verwenden kann.
  • Wenn Sie einen Domain-Server mit benutzerdefiniertem Namen verwenden, bestätigen Sie die Einstellungen der DNS-Abfrage. Die Abfrage muss über das UDP- und TCP-Protokoll ausgehenden Zugriff auf Port 53 haben. Außerdem muss HTTPS-Zugriff auf Port 443 vorhanden sein.

Überprüfen der Einstellungen Ihrer Netzwerk-ACL und Sicherheitsgruppe

Stellen Sie sicher, dass Ihre Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL) und Sicherheitsgruppen den ausgehenden Zugriff auf Port 443 aus dem Subnetz nicht blockieren. Weitere Informationen finden Sie unter Steuern des Datenverkehrs zu Ressourcen mithilfe von Sicherheitsgruppen.

**Hinweis:**Fargate-Aufgaben müssen ausgehenden Zugriff auf Port 443 haben, um ausgehenden Datenverkehr zu ermöglichen und auf Amazon ECS-Endpunkte zuzugreifen.

Überprüfen Ihrer Amazon VPC-Endpunkte

Wenn Sie PrivateLink verwenden, müssen Sie die erforderlichen Endpunkte erstellen.

Die folgenden Endpunkte sind für die Fargate-Plattformversionen 1.4.0 oder höher erforderlich:

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • S3 Gateway-Endpunkt
  • com.amazonaws.region.logs

Weitere Informationen finden Sie unter Überlegungen zu Amazon ECR VPC-Endpunkten.

Hinweis: Wenn Ihre Aufgabendefinition Secrets Manager, Systems Manager-Parameter oder Amazon CloudWatch Logs verwendet, müssen Sie möglicherweise Endpunkte definieren. Weitere Informationen finden Sie in der folgenden Dokumentation:

Wenn Sie PrivateLink verwenden, überprüfen Sie, ob die Sicherheitsgruppe von Amazon VPC den richtigen Datenverkehr zulässt. Die Gruppe muss Datenverkehr aus der Fargate-Task-Sicherheitsgruppe oder dem Fargate-Task-VPC CIDR-Bereich auf TCP-Port 443 zulassen.

Um zu bestätigen, dass die Fargate-Infrastruktur Service-Zugriff hat, überprüfen Sie die VPC-Endpunktrichtlinien und Endpunktrichtlinien für Amazon Simple Storage Solution (Amazon S3).

Überprüfen Ihrer IAM-Rollen und -Berechtigungen

Die Rolle „Aufgabenausführung“ erteilt dem Amazon ECS-Container und den Fargate-Agents die erforderlichen Berechtigungen, um API-Aufrufe für die Aufgabe durchzuführen. Fargate benötigt diese Rolle, wenn Sie die folgenden Aktionen ausführen:

  • Rufen Sie ein Container-Image aus Amazon Elastic Container Registry (Amazon ECR) ab.
  • Verwenden Sie den awslogs-Protokolltreiber.
  • Verwenden Sie die private Registrierungsauthentifizierung.
  • Verwenden Sie Secrets Manager-Geheimnisse oder Systems Manager-Parameter Store-Parameter, um auf vertrauliche Daten zu verweisen.

Wenn Ihr Anwendungsfall eines der oben genannten Szenarien beinhaltet, definieren Sie die erforderlichen Berechtigungen in Ihrer Rolle „Aufgabenausführung“. Eine vollständige Liste der erforderlichen Berechtigungen finden Sie unter IAM-Rolle für die Amazon ECS-Aufgabenausführung.

Überprüfen der referenzierten vertraulichen Informationen in der Amazon ECS-Aufgabendefinition

Überprüfen Sie, ob die Namen des Geheimnisses und der Parameter mit den referenzierten Namen in Ihrer Amazon ECS-Aufgabendefinition übereinstimmen. Überprüfen Sie dann, ob die Werte in der Container-Definition in Ihrer Aufgabendefinition mit den Werten in Ihrer Amazon ECS-Aufgabendefinition übereinstimmen. Weitere Informationen finden Sie unter Wie kann ich in einer Amazon ECS-Aufgabe geheime oder vertrauliche Informationen sicher an Container weitergeben?

Wenn sich der Parameter Store-Parameter von Systems Manager und die Aufgabe in derselben Region befinden, verwenden Sie den vollständigen ARN oder den Namen des Geheimnisses. Wenn der Parameter in einer anderen Region vorhanden ist, müssen Sie den vollständigen ARN angeben.

Führen Sie die folgenden Schritte aus, um den Systems Manager-Parameternamen und den ARN zu überprüfen:

**Hinweis:**Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

  1. Öffnen Sie die AWS Systems Manager-Konsole.
  2. Wählen Sie im Navigationsbereich Parameter Store und bestätigen Sie dann den Namen Ihres Parameter Stores.
  3. Um den ARN des Parameters zu erhalten, führen Sie mit der AWS CLI den folgenden Befehl aus. Ersetzen Sie name_of_parameter_store_secret durch den geheimen Namen Ihres Parameter Stores.
$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

**Hinweis:**Parameter, die auf Geheimnisse des Secrets Manager verweisen, können die Versionsverwaltung oder die Verlaufsfunktionen des Parameter Stores nicht verwenden. Weitere Informationen finden Sie unter Einschränkungen.

Verwandte Informationen

Überprüfen gestoppter Aufgaben auf Fehler

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr