Comment mettre à jour les informations d'identification de mon référentiel privé sur un agent de conteneur Amazon ECS ?

Dernière mise à jour : 18/11/2020

Je souhaite mettre à jour les informations d'identification de mon référentiel privé sur un agent de conteneur Amazon Elastic Container Service (Amazon ECS) fourni par des variables d'environnement ou AWS Secrets Manager ?

Brève description

Vous pouvez fournir des informations d'identification de référentiel privé à l'agent de conteneur Amazon ECS en utilisant Secrets Manager dans votre définition de tâche ou des variables d'environnement.

Choisissez l'une des options suivantes :

  • Si vous utilisez Secrets Manager pour fournir les informations d'identification de référentiel privé, suivez les étapes de la section Mettre à jour des informations d'identification de votre référentiel avec Secrets Manager.
  • Si vous utilisez des données d’utilisateur d'instance et des variables d'environnement pour fournir les informations d'identification de référentiel privé, suivez les étapes de la section Mettre à jour des informations d'identification de votre référentiel privé avec des variables d'environnement.

Remarque : Ce n'est pas une bonne pratique en matière de sécurité de stocker les informations d'identification en texte brut sur des instances de conteneur. Il est recommandé d'utiliser Secrets Manager à la place, sauf s'il existe une dépendance architecturale directe sur le stockage des informations d'identification du registre dans l'instance de conteneur.

Résolution

Mettre à jour les informations d'identification de votre référentiel privé avec Secrets Manager

1.    Ouvrez la console Secrets Manager.

2.    Choisissez votre secret, puis Retrieve secret value (Récupérer la valeur secrète).

3.    Choisissez Edit (Modifier).

4.    Mettez à jour les informations d'identification stockées pour votre registre privé, puis choisissez Save (Enregistrer).

Pour continuer, suivez les étapes de la section Tester les informations d'identification de votre référentiel privé.

Mettre à jour les informations d'identification de votre référentiel privé avec des variables d'environnement

1.    Connectez-vous à votre instance de conteneur.

2.    Pour savoir comment fournir les informations d'identification Docker à votre agent de conteneur ECS, exécutez la commande suivante :

$ cat /etc/ecs/ecs.config

Cette commande renvoie le contenu du fichier /etc/ecs/ecs.config.

Si la variable ECS_ENGINE_AUTH_TYPE est définie sur docker, cela implique que vous transmettez directement vos informations d'identification Docker en texte brut à votre agent de conteneur ECS. Vous devriez éviter cette approche. Utilisez plutôt Secrets Manager ou l'approche de format dockercfg de la section Obtenir une nouvelle valeur d'authentification Docker.

Si la variable ECS_ENGINE_AUTH_TYPE est définie sur dockercfg, cela implique que vous transmettez vos informations d'identification Docker en fonction d'une valeur d'authentification générée par Docker générée par la commande docker login. Pour continuer avec cette approche, suivez les étapes de la section Obtenir une nouvelle valeur d'authentification Docker.

Obtenir une nouvelle valeur d'authentification Docker

1.    Pour vous connecter à Docker localement, exécutez la commande suivante, puis saisissez les nouvelles informations d'identification :

$ docker login

2.    Pour concaténer votre fichier config.json, exécutez la commande suivante, puis copiez la valeur de clé d'authentification générée par Docker :

$ cat ~/.docker/config.json

3.    Pour mettre à jour la variable ECS_ENGINE_AUTH_DATA, exécutez la commande suivante :

$ sudo vi /etc/ecs/ecs.config

4.    Dans l'éditeur vi, remplacez la valeur de la variable ECS_ENGINE_AUTH_DATA par la valeur de clé d'authentification Docker de l'étape 2. Par exemple :

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

Pour continuer, suivez les étapes de la section Redémarrer votre agent de conteneur ECS.

Redémarrer votre agent de conteneur ECS

1.    Pour redémarrer votre agent de conteneur ECS, exécutez l'une des commandes suivantes en fonction des Amazon Machine Images (AMI) dans lesquelles vos instances de conteneur s'exécutent.

AMI optimisées pour Amazon Linux ECS :

$ sudo stop ecs && sudo start ecs

AMI optimisées pour Amazon Linux 2 ECS :

$ sudo systemctl restart ecs

Remarque : Pour mettre à jour le fichier /etc/ecs/ecs.config sur d'autres instances de conteneur dans votre cluster ECS, revenez à la section Mettre à jour les informations d'identification de votre référentiel privé avec des variables d'environnement. Ensuite, suivez la procédure de mise à jour pour chaque instance de conteneur.

Pour continuer, suivez les étapes de la section Tester les informations d'identification de votre référentiel privé mises à jour.

Tester les informations d'identification de votre référentiel privé mises à jour

Les étapes suivantes supposent que vous déployez une image mise à jour dans votre cluster.

1.    Ouvrez la console Amazon ECS.

2.    Dans le volet de navigation, choisissez Clusters, puis sélectionnez votre cluster.

3.    Sélectionnez votre service, puis choisissez Update (Mettre à jour).

4.    Cochez la case à Force new deployment (Forcer un nouveau déploiement).

5.    Pour Minimum healthy percent (Pourcentage de salubrité minimum), saisissez 50.

6.    Exécutez les étapes restantes dans l'assistant de configuration, puis choisissez Update Service (Mettre à jour le service).

7.    Choisissez View Service (Afficher le service).

8.    Sur l'onglet Deployments (Déploiements), affichez le nouveau déploiement. Amazon ECS arrête progressivement les tâches sous le déploiement antérieur, puis les redémarre sous le nouveau déploiement en essayant d'extraire une nouvelle image.

Remarque : L'étape 8 suppose que votre cluster dispose de suffisamment de ressources pour effectuer un type de déploiement de mise à jour progressive.

9.    Choisissez l'onglet Tasks (Tâches), puis vérifiez chaque tâche et son état.

Si le statut d'une tâche est Running (En cours d'exécution), cela implique que le service a mis à jour la tâche correctement.

Si le statut de la tâche est défini sur En cours d’exécution (CannotPullContainerError), cela implique que le service a mis à jour la tâche, mais qu'une erreur s'est produite. L'agent de conteneur ECS ne peut pas extraire une nouvelle image de conteneur et utilise l'ancienne image mise en cache. Vérifiez que vos informations d'identification ont été mises à jour, puis effectuez une autre mise à jour de déploiement de service.

Remarque : Pour afficher toutes les informations de la tâche et voir l'erreur « accès pull refusé », choisissez la flèche de la zone déroulante correspondant au statut de votre tâche individuelle. Par exemple :

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

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?