Wie kann ich meine Anmeldeinformationen für ein privates Repository auf einem Amazon-ECS-Container-Agenten aktualisieren?

Lesedauer: 5 Minute
0

Ich möchte meine Anmeldeinformationen für ein privates Repository auf einem Container-Agenten in Amazon Elastic Container Service (Amazon ECS) aktualisieren, der über AWS Secrets Manager oder Umgebungsvariablen bereitgestellt wird.

Kurzbeschreibung

Sie können dem Amazon-ECS-Container-Agenten Anmeldeinformationen für ein privates Repository bereitstellen, indem Sie entweder Secrets Manager in Ihrer Aufgabendefinition oder Umgebungsvariablen verwenden.

Wählen Sie eine der folgenden Optionen:

  • Wenn Sie Secrets Manager verwenden, um Anmeldeinformationen für private Repositorys bereitzustellen, folgen Sie den Schritten im Abschnitt Aktualisieren der Anmeldeinformationen für Ihr privates Repository mit Secrets Manager.
  • Wenn Sie Instance-Benutzerdaten und Umgebungsvariablen verwenden, um Anmeldeinformationen für private Repositorys bereitzustellen, folgen Sie den Schritten im Abschnitt Aktualisieren der Anmeldeinformationen für Ihr privates Repository mit Umgebungsvariablen.

Hinweis: Es ist unter Sicherheitsgesichtspunkten nicht zu empfehlen, Anmeldeinformationen auf Container-Instances im Klartext zu speichern. Stattdessen hat sich die Verwendung von Secrets Manager bewährt, es sei denn, es besteht eine direkte architektonische Abhängigkeit von der Speicherung von Registry-Anmeldeinformationen in der Container-Instance.

Lösung

Aktualisieren der Anmeldeinformationen für Ihr privates Repository mit Secrets Manager

1.    Öffnen Sie die Secrets-Manager-Konsole.

2.    Wählen Sie Ihr Secret aus und klicken Sie dann auf Secret-Wert abrufen.

3.    Wählen Sie Bearbeiten.

4.    Aktualisieren Sie die gespeicherten Anmeldeinformationen für Ihr privates Registry und wählen Sie Speichern.

Um fortzufahren, folgen Sie den Schritten im Abschnitt Testen der aktualisierten Anmeldeinformationen für Ihr privates Repository.

Aktualisieren der Anmeldeinformationen für Ihr privates Repository mit Umgebungsvariablen

1.    Stellen Sie eine Verbindung zu Ihrer Container-Instance her.

2.    Führen Sie folgenden Befehl aus, um herauszufinden, wie Sie Docker-Anmeldeinformationen für Ihren ECS-Container-Agenten zur Verfügung stellen:

$ cat /etc/ecs/ecs.config

Dieser Befehl erzeugt eine Ausgabe des Inhalts der Datei /etc/ecs/ecs.config.

Wenn die Variable ECS_ENGINE_AUTH_TYPE auf docker gesetzt ist, übergeben Sie Ihre Docker-Anmeldeinformationen direkt im Klartext an Ihren ECS-Container-Agenten. Sie sollten diesen Ansatz vermeiden. Verwenden Sie stattdessen Secrets Manager oder den Ansatz mit dem dockercfg-Format, der im Abschnitt Abrufen eines neuen Docker-Authentifizierungswerts beschrieben wird.

Wenn die Variable ECS_ENGINE_AUTH_TYPE auf dockercfg gesetzt ist, übergeben Sie Ihre Docker-Anmeldeinformationen durch einen von Docker generierten Authentifizierungswert, der durch den Befehl docker login generiert wurde. Um mit diesem Ansatz fortzufahren, führen Sie die Schritte im Abschnitt Abrufen eines neuen Docker-Authentifizierungswerts aus.

Abrufen eines neuen Docker-Authentifizierungswerts

1.    Um sich lokal bei Docker anzumelden, führen Sie den folgenden Befehl aus und geben Sie Ihre neuen Anmeldeinformationen ein:

$ docker login

2.    Um Ihre config.json-Datei zu verketten, führen Sie folgenden Befehl aus und kopieren Sie den Wert des von Docker generierten Authentifizierungsschlüssels:

$ cat ~/.docker/config.json

3.    Führen Sie folgenden Befehl aus, um die Variable ECS_ENGINE_AUTH_DATA zu aktualisieren:

$ sudo vi /etc/ecs/ecs.config

4.    Ersetzen Sie im vi-Editor den Wert der Variablen ECS_ENGINE_AUTH_DATA mit dem Wert des Docker-Authentifizierungsschlüssels aus Schritt 2. Zum Beispiel:

ECS_CLUSTER=TestECSCluster
ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth","a2vpdGhhd3M6UGFzc3dvcmQ="}}

Um fortzufahren, folgen Sie den Schritten im Abschnitt Neustarten Ihres ECS-Container-Agenten.

Neustarten Ihres ECS-Container-Agenten

1.    Um Ihren ECS-Container-Agenten neu zu starten, führen Sie einen der folgenden Befehle auf Basis der Amazon Machine Images (AMIs) aus, auf denen Ihre Container-Instances ausgeführt werden.

ECS-optimierte AMIs auf Amazon Linux:

$ sudo stop ecs && sudo start ecs

ECS-optimierte AMIs auf Amazon Linux 2:

$ sudo systemctl restart ecs

Hinweis: Um die Datei /etc/ecs/ecs.config auf anderen Container-Instances in Ihrem ECS-Cluster zu aktualisieren, kehren Sie zurück zum Abschnitt Aktualisieren der Anmeldeinformationen für Ihr privates Repository mit Umgebungsvariablen. Folgen Sie dann dem Aktualisierungsprozess für jede Container-Instance.

Um fortzufahren, folgen Sie den Schritten im Abschnitt Testen der aktualisierten Anmeldeinformationen für Ihr privates Repository.

Testen der aktualisierten Anmeldeinformationen für Ihr privates Repository

Bei den folgenden Schritten wird davon ausgegangen, dass Sie in Ihrem Cluster durchgehend ein aktualisiertes Image bereitstellen.

1.    Öffnen Sie die Amazon-ECS-Konsole.

2.    Wählen Sie im Navigationsbereich Cluster und dann Ihren Cluster aus.

3.    Wählen Sie Ihren Service aus und klicken Sie auf Aktualisieren.

4.    Markieren Sie das Kontrollkästchen Neue Bereitstellung erzwingen.

5.    Geben Sie für Minimaler fehlerfreier Prozentsatz den Wert 50 ein.

6.    Führen Sie die verbleibenden Schritte im Einrichtungsassistenten aus und wählen Sie dann Service aktualisieren.

7.    Wählen Sie Service anzeigen.

8.    Sehen Sie sich auf der Registerkarte Bereitstellungen die neue Bereitstellung an. Amazon ECS stoppt nach und nach die Aufgaben in der vorherigen Bereitstellung und startet sie in der neuen Bereitstellung neu, während versucht wird, ein neues Image abzurufen.

Hinweis: In Schritt 8 wird davon ausgegangen, dass Ihr Cluster über genügend Ressourcen verfügt, um eine fortlaufende Aktualisierung als Bereitstellungstyp durchzuführen.

9.    Öffnen Sie den Tab Aufgaben und überprüfen Sie jede Aufgabe und ihren Status.

Wenn der Aufgabenstatus Wird ausgeführt ist, hat der Service diese Aufgabe erfolgreich und ohne Fehler aktualisiert.

Wenn der Aufgabenstatus Wird ausgeführt (CannotPullContainerError) ist, hat der Service diese Aufgabe aktualisiert, doch es ist ein Fehler aufgetreten. Der ECS-Container-Agent kann kein neues Container-Image abrufen und verwendet das alte zwischengespeicherte Image. Stellen Sie sicher, dass Ihre Anmeldeinformationen aktualisiert wurden, und führen Sie dann eine weitere Aktualisierung der Service-Bereitstellung durch.

Hinweis: Um die vollständigen Details Ihrer Aufgabe anzuzeigen und den Fehler „pull access denied“ zu sehen, klicken Sie auf den Dropdown-Pfeil für Ihren individuellen Aufgabenstatus. Zum Beispiel:

CannotPullContainerError: Error response from daemon: pull access denied for user/reponame, repository does not exist or may require 'docker login'

Ähnliche Informationen

Amazon ECS container agent configuration

Authentication formats

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren