Private Registrierungsauthentifizierung für Container-Instances - Amazon Elastic Container Service

Private Registrierungsauthentifizierung für Container-Instances

Der Amazon-ECS-Container-Agent kann sich unter Verwendung der Standardauthentifizierung bei privaten Registrys authentifizieren. Wenn Sie die Authentifizierung bei privaten Registrierungen aktivieren, können Sie private Docker-Images in Ihren Aufgabendefinitionen verwenden. Diese Funktion wird nur von Aufgaben unterstützt, die den Starttyp EC2 verwenden.

Eine andere Methode zur Aktivierung der privaten Registrierungsauthentifizierung verwendet AWS Secrets Manager, um Ihre privaten Registrierungsanmeldeinformationen sicher zu speichern und dann auf diese in Ihrer Containerdefinition zu verweisen. Auf diese Weise können Ihre Aufgaben Abbilder aus privaten Repositorys verwenden. Diese Methode unterstützt Aufgaben, die den Starttyp EC2 oder Fargate verwenden. Weitere Informationen finden Sie unter Private Registrierungsauthentifizierung für Aufgaben.

Der Amazon ECS-Container-Agent sucht nach zwei Umgebungsvariablen, wenn er gestartet wird:

  • ECS_ENGINE_AUTH_TYPE gibt die Art der gesendeten Authentifizierungsdaten an.

  • ECS_ENGINE_AUTH_DATA enthält die tatsächlichen Anmeldeinformationen für die Authentifizierung.

Das Amazon ECS-optimierte AMI durchsucht die /etc/ecs/ecs.config-Datei nach diesen Variablen, wenn die Container-Instance gestartet wird, sowie jedes Mal, wenn der Service gestartet wird (mit dem Befehl sudo start ecs). AMIs, die nicht für Amazon ECS optimiert sind, sollten diese Umgebungsvariablen in einer Datei speichern und mit der --env-file path_to_env_file-Option an den docker run-Befehl, der den Container-Agenten startet, weitergeben.

Wichtig

Wir raten davon ab, diese Umgebungsvariablen für die Authentifizierung beim Start der Instance mit Amazon EC2-Benutzerdaten einzufügen oder sie mit der Option --env an den Befehl docker run zu übergeben. Diese Methoden eigenen sich nicht für vertrauliche Daten wie z. B. Anmeldeinformationen für die Authentifizierung. Anweisungen dazu, wie Sie die Anmeldeinformationen für die Authentifizierung Ihrer Container-Instance sicher hinzufügen, finden Sie unter Speichern der Container-Instance-Konfiguration in Amazon S3.

Authentifizierungsformate

Es gibt zwei Formate der Authentifizierung bei privaten Registrierungen: dockercfg und docker.

dockercfg-Authentifizierungsformat

Das Format dockercfg verwendet die in der Konfigurationsdatei gespeicherten Authentifizierungsinformationen. Diese Konfigurationsdatei wird erstellt, wenn Sie den Befehl docker login ausführen. Sie können diese Datei durch die Ausführung von docker login auf Ihrem lokalen System erstellen, wobei Sie den registrierten Benutzernamen, das Passwort und die E-Mail-Adresse eingeben. Sie können sich auch bei einer Container-Instance anmelden und den Befehl dort ausführen. Je nachdem, welche Docker-Version Sie verwenden, wird diese Datei entweder als ~/.dockercfg oder ~/.docker/config.json gespeichert.

cat ~/.docker/config.json

Ausgabe:

{
  "auths": {
    "https://index.docker.io/v1/": {
      "auth": "zq212MzEXAMPLE7o6T25Dk0i"
    }
  }
}
Wichtig

Bei neueren Docker-Versionen wird, wie oben zu sehen, eine Konfigurationsdatei mit einem äußeren auths-Objekt erstellt. Der Amazon ECS-Agent unterstützt nur dockercfg-Authentifizierungsdaten im folgenden Format, ohne das auths-Objekt. Wenn das Dienstprogramm jq installiert ist, können Sie diese Daten mit dem folgenden Befehl extrahieren: cat ~/.docker/config.json | jq .auths.

cat ~/.docker/config.json | jq .auths

Ausgabe:

{
  "https://index.docker.io/v1/": {
    "auth": "zq212MzEXAMPLE7o6T25Dk0i",
    "email": "email@example.com"
  }
}

Im obigen Beispiel sollte die folgende Umgebungsvariable der Umgebungsvariablendatei (/etc/ecs/ecs.config für das Amazon ECS-optimierte AMI), die der Amazon ECS-Container-Agent während der Laufzeit lädt, hinzugefügt werden. Wenn Sie das Amazon ECS-optimierte AMI nicht verwenden und den Agenten manuell mit dem Befehl docker run starten, müssen Sie die Umgebungsvariablendatei beim Starten des Agenten mit der Option --env-file path_to_env_file festlegen.

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example.com"}}

Sie können mehrere private Registrierungen mit der folgenden Syntax konfigurieren:

ECS_ENGINE_AUTH_TYPE=dockercfg ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"auth":"zq212MzEXAMPLE7o6T25Dk0i","email":"email@example-01.com"},"repo.example-02.com":{"auth":"fQ172MzEXAMPLEoF7225DU0j","email":"email@example-02.com"}}

docker-Authentifizierungsformat

Das docker-Format verwendet eine JSON-Darstellung des Registrierungsservers, auf dem sich der Agent authentifizieren soll. Außerdem enthält es die Authentifizierungsparameter, die für diese Registrierung benötigt werden (z. B. Benutzername, Passwort und E-Mail-Adresse für dieses Konto). Für ein Docker Hub-Konto sieht die JSON-Darstellung wie folgt aus:

{ "https://index.docker.io/v1/": { "username": "my_name", "password": "my_password", "email": "email@example.com" } }

In diesem Beispiel sollte die folgende Umgebungsvariable der Umgebungsvariablendatei (/etc/ecs/ecs.config für das Amazon ECS-optimierte AMI), die der Amazon ECS-Container-Agent während der Laufzeit lädt, hinzugefügt werden. Wenn Sie das Amazon ECS-optimierte AMI nicht verwenden und den Agenten manuell mit dem Befehl docker run starten, müssen Sie die Umgebungsvariablendatei beim Starten des Agenten mit der Option --env-file path_to_env_file festlegen.

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}

Sie können mehrere private Registrierungen mit der folgenden Syntax konfigurieren:

ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"repo.example-01.com":{"username":"my_name","password":"my_password","email":"email@example-01.com"},"repo.example-02.com":{"username":"another_name","password":"another_password","email":"email@example-02.com"}}

Aktivieren von privaten Registrierungen

Gehen Sie wie folgt vor, um private Registrierungen für Ihre Container-Instances zu aktivieren.

So aktivieren Sie private Registrierungen im Amazon ECS-optimierten AMI

  1. Melden Sie sich mit SSH an Ihrer Container-Instance an.

  2. Öffnen Sie die Datei /etc/ecs/ecs.config und fügen Sie die Werte ECS_ENGINE_AUTH_TYPE und ECS_ENGINE_AUTH_DATA für Ihre Registrierung und Ihr Konto hinzu:

    sudo vi /etc/ecs/ecs.config

    Dieses Beispiel authentifiziert ein Docker Hub-Benutzerkonto:

    ECS_ENGINE_AUTH_TYPE=docker ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"username":"my_name","password":"my_password","email":"email@example.com"}}
  3. Überprüfen Sie, ob ihr Agent die Umgebungsvariable ECS_DATADIR nutzt, um seinen Status zu speichern:

    docker inspect ecs-agent | grep ECS_DATADIR

    Ausgabe:

    "ECS_DATADIR=/data",
    Wichtig

    Wenn der vorherige Befehl die Umgebungsvariable ECS_DATADIR nicht zurücksendet, müssen Sie sämtliche Aufgaben, die auf dieser Container-Instance ausgeführt werden, abbrechen, bevor Sie Ihren Agenten stoppen. Neuere Agenten mit der Umgebungsvariable ECS_DATADIR speichern ihren Status und Sie können sie stoppen und starten, während Aufgaben problemlos ausgeführt werden. Weitere Informationen finden Sie unter Überprüfen des Amazon ECS-Container-Agenten.

  4. Stoppen Sie den Service ecs:

    sudo stop ecs

    Ausgabe:

    ecs stop/waiting
  5. Den Service ecs neu starten.

    • Für das Amazon ECS-optimierte Amazon Linux 2-AMI:

      sudo systemctl restart ecs
    • Für das Amazon ECS-optimierte Amazon Linux AMI:

      sudo stop ecs && sudo start ecs
  6. (Optional) Durch Abfragen der Agenten-Introspektions-API-Operation können Sie überprüfen, ob der Agent ausgeführt wird und Sie können Informationen über Ihre neue Container-Instance einholen. Weitere Informationen finden Sie unter Amazon ECS-Container-Agent-Introspektion.

    curl http://localhost:51678/v1/metadata