Configuration des instances de conteneur Amazon ECS pour les images Docker privées - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration des instances de conteneur Amazon ECS pour les images Docker privées

L'agent de conteneur Amazon ECS peut authentifier au moyen de registres privés, à l'aide de l'authentification de base. Lorsque vous activez l'authentification de registres privés, vous pouvez utiliser des images Docker privées dans vos définitions de tâche. Cette fonction est prise en charge uniquement pour les tâches lorsque vous utilisez le type de lancement EC2 .

Une autre méthode d'activation de l'authentification du registre privé consiste AWS Secrets Manager à stocker vos informations d'identification de registre privé en toute sécurité, puis à les référencer dans la définition de votre conteneur. Cela permet à vos tâches d'utiliser des images de référentiels privés. Cette méthode prend en charge les tâches utilisant le type de lancement Fargate EC2 ou le type de lancement Fargate. Pour de plus amples informations, veuillez consulter Utilisation d'images autres que des AWS conteneurs dans Amazon ECS.

Au lancement, l'agent de conteneur Amazon ECS recherche deux variables d'environnement :

  • ECS_ENGINE_AUTH_TYPE, qui spécifie le type des données d'authentification envoyées.

  • ECS_ENGINE_AUTH_DATA, qui contient les informations d'authentification réelles.

Les variantes Linux de l'AMI optimisée pour Amazon ECS analysent le /etc/ecs/ecs.config fichier à la recherche de ces variables au lancement de l'instance de conteneur et à chaque démarrage du service (avec la sudo start ecs commande). AMIs qui ne sont pas optimisés pour Amazon ECS doivent stocker ces variables d'environnement dans un fichier et les transmettre avec l'--env-file path_to_env_fileoption à la docker run commande qui démarre l'agent de conteneur.

Important

Nous vous déconseillons d'injecter ces variables d'environnement d'authentification au lancement de l'instance avec les données EC2 utilisateur Amazon ou de les transmettre avec l'--envoption à la docker run commande. Ces méthodes ne sont pas appropriées pour les données sensibles, par exemple les informations d'authentification. Pour plus d'informations sur l'ajout en toute sécurité d'informations d'authentification à vos instances de conteneur, consultez Stockage de la configuration de l'instance de conteneur Amazon ECS dans Amazon S3.

Formats d'authentification

Il existe deux formats disponibles pour une authentification de registre privé, dockercfg et docker.

Format d'authentification dockercfg

Le format dockercfg utilise les informations d'authentification stockées dans le fichier de configuration qui est créé lorsque vous exécutez la commande docker login. Pour créer ce fichier, exécutez docker login sur votre système local et saisissez votre nom d'utilisateur de registre, votre mot de passe et une adresse e-mail. Vous pouvez également vous connecter à une instance de conteneur et y exécuter la commande. Selon votre version de Docker, ce fichier est enregistré sous la forme ~/.dockercfg ou ~/.docker/config.json.

cat ~/.docker/config.json

Sortie :

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

Les versions les plus récentes de Docker créent un fichier de configuration comme illustré ci-après avec un objet auths externe. L'agent Amazon ECS prend en charge les données d'authentification dockercfg au format ci-dessous uniquement, sans l'objet auths. Si l'utilitaire jq est installé, vous pouvez extraire ces données à l'aide de la commande suivante : cat ~/.docker/config.json | jq .auths

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

Sortie :

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

Dans l'exemple ci-dessus, les variables d'environnement suivantes doivent être ajoutées au fichier de variables d'environnement (/etc/ecs/ecs.config pour l'AMI optimisée pour Amazon ECS) que l'agent de conteneur Amazon ECS charge au moment de l'exécution. Si vous n'utilisez pas l'AMI optimisée pour Amazon ECS et que vous démarrez l'agent manuellement avec docker run, spécifiez le fichier de variables d'environnement avec l'option --env-file path_to_env_file lorsque vous démarrez l'agent.

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

Vous pouvez configurer plusieurs registres privés avec la syntaxe suivante :

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"}}
Format d'authentification docker

Le format docker utilise une représentation JSON du serveur de registre que l'agent doit utiliser pour l'authentification. Il inclut également les paramètres d'authentification requis par ce registre (par exemple, nom d'utilisateur, mot de passe et adresse e-mail pour ce compte). Pour un compte Docker Hub, la représentation JSON se présente comme suit :

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

Dans cet exemple, les variables d'environnement suivantes doivent être ajoutées au fichier de variables d'environnement (/etc/ecs/ecs.config pour l'AMI optimisée pour Amazon ECS) que l'agent de conteneur Amazon ECS charge au moment de l'exécution. Si vous n'utilisez pas l'AMI optimisée pour Amazon ECS et que vous démarrez l'agent manuellement avec docker run, spécifiez le fichier de variables d'environnement avec l'option --env-file path_to_env_file lorsque vous démarrez l'agent.

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

Vous pouvez configurer plusieurs registres privés avec la syntaxe suivante :

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"}}

Procédure

Utilisez la procédure suivante pour activer les registres privés pour vos instances de conteneur.

Pour activer les registres privés dans l'AMI optimisée pour Amazon ECS
  1. Connectez-vous à votre instance de conteneur à l'aide de SSH.

  2. Ouvrez le fichier /etc/ecs/ecs.config et ajoutez les valeurs ECS_ENGINE_AUTH_TYPE et ECS_ENGINE_AUTH_DATA pour votre registre et votre compte :

    sudo vi /etc/ecs/ecs.config

    Cet exemple authentifie un compte d'utilisateur Docker Hub :

    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. Vérifiez si votre agent utilise la variable d'environnement ECS_DATADIR pour enregistrer son état :

    docker inspect ecs-agent | grep ECS_DATADIR

    Sortie :

    "ECS_DATADIR=/data",
    Important

    Si la commande précédente ne renvoie pas la variable d'environnement ECS_DATADIR, vous devez arrêter toutes les tâches en cours d'exécution sur cette instance de conteneur avant d'arrêter l'agent. Les agents les plus récents avec la variable d'environnement ECS_DATADIR enregistrent leur état et peuvent être arrêtés et démarrés sans problèmes tandis que des tâches sont en cours d'exécution. Pour de plus amples informations, veuillez consulter Mise à jour de l'agent de conteneur Amazon ECS.

  4. Arrêtez le service ecs :

    sudo stop ecs

    Sortie :

    ecs stop/waiting
  5. Redémarrez le service ecs.

    • Pour l'AMI Amazon Linux 2 optimisée pour Amazon ECS :

      sudo systemctl restart ecs
    • Pour l'AMI Amazon Linux optimisée pour Amazon ECS :

      sudo stop ecs && sudo start ecs
  6. (Facultatif) Vous pouvez vérifier que l'agent est en cours d'exécution et consulter des informations sur votre nouvelle instance de conteneur en interrogeant l'opération API d'introspection d'agent. Pour de plus amples informations, veuillez consulter Introspection des conteneurs Amazon ECS.

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