Comment résoudre l'erreur « Impossible d'extraire les secrets ou l'authentification du registre » dans Amazon ECS ?

Lecture de 9 minute(s)
0

J'ai reçu l'une des erreurs suivantes lors du lancement d’une tâche Amazon Elastic Container Service (Amazon ECS) : « ResourceInitializationError : impossible d'extraire les secrets ou l’authentification du registre : échec de la commande d'extraction : signal : killed » ou « ResourceInitializationError : impossible d'extraire les secrets ou l'authentification du registre : échec de la récupération de la ressource d'exécution : impossible de récupérer le secret depuis asm : l'appel de service a été renvoyé. »

Brève description

La version 1.4.0 de la plateforme AWS Fargate utilise l'interface réseau élastique des tâches pour extraire l'image et les secrets. Tout le trafic réseau passe par l'interface réseau élastique de votre Amazon Virtual Private Cloud (Amazon VPC). Vous pouvez consulter ce trafic via vos journaux de flux Amazon VPC. La tâche utilise dans ce cas votre configuration réseau au lieu d'utiliser les interfaces réseau élastiques de Fargate. La raison est que les interfaces réseau élastiques sont situées dans votre Amazon VPC.

L'agent de conteneur Amazon ECS utilise le rôle exécution des tâches AWS Identity and Access Management (IAM) pour obtenir des informations auprès des services suivants :

  • AWS Systems Manager Parameter Store
  • Gestionnaire de secrets AWS

Si vous chiffrez des données à l'aide d'une clé AWS Key Management Service (AWS KMS) gérée par le client, accordez les autorisations suivantes au rôle IAM d'exécution des tâches :

  • SSM : Obtenir les paramètres
  • SecretsManager:getSecretValue
  • kms:Decrypt.

Utilisez le runbook AWS Support-TroubleshooTECSTaskFailedToStart pour résoudre les problèmes liés aux tâches Amazon ECS qui ne démarrent pas. Cette automatisation examine les configurations suivantes :

  • Connectivité réseau au registre de conteneurs configuré
  • Autorisations IAM manquantes requises par le rôle d'exécution de la tâche
  • Connectivité des points de terminaison du cloud privé virtuel (VPC)
  • Configuration des règles du groupe de sécurité
  • Références relatives aux secrets d'AWS Secrets Manager
  • Configuration de la journalisation

Si la sortie du runbook ne fournit aucune recommandation, utilisez les approches de dépannage manuelles décrites dans la section suivante.

Résolution

Important :

  • Utilisez le runbook dans la région AWS où sont situées vos ressources de cluster ECS.
  • Lorsque vous utilisez le runbook, vous devez utiliser également le dernier ID de tâche ayant échoué. Si la tâche ayant échoué fait partie du service Amazon ECS, utilisez la dernière tâche ayant échoué dans le service. La tâche ayant échoué doit être visible dans ecs:DescribeTasks lors de l'exécution de l'automatisation. Par défaut, les tâches ECS interrompues sont visibles pendant 1 heure suivant leur passage à l'étatInterrompu. L'utilisation du dernier identifiant de tâche ayant échoué permet d'éviter que le nettoyage de l'état de la tâche n'interrompe l'analyse durant l'automatisation.

Pour exécuter le runbook AWS Support-TroubleshooTecsTaskFailedToStart, procédez comme suit :

  1. Ouvrez la console AWS Systems Manager.
  2. Dans le volet de navigation, sous Gestion des modifications, choisissez Automatisation.
  3. Sélectionnez Exécuter l'automatisation.
  4. Sélectionnez l'onglet Appartenant à Amazon.
  5. Dans le document Automatisation, recherchez TroubleshootTaskFailedToStart.
  6. Sélectionnez la carte AWS Support-Troubleshooter ECSTask Failed to Start.
    Remarque : Sélectionnez le bouton radio, et non le nom de l'automatisation en lien hypertexte.
  7. Sélectionnez Suivant.
    Remarque : Après exécution, les résultats de l'analyse sont renseignés dans la section Sortie globale. Attendez néanmoins que le statut du document devienne Succès. Surveillez également les éventuelles exceptions dans la section Sortie.
  8. Pour Exécuter le document d’automatisation, choisissez Exécution simple.
  9. Dans la section Paramètres d'entrée, pour AutomationAssumeRole, entrez l'ARN du rôle qui permet à Systems Manager Automation d'effectuer des actions.
    **Remarque :**Assurez-vous que le rôle AutomationAssumeRole ou l'utilisateur ou le rôle IAM dispose des autorisations IAM requises pour exécuter le runbook AWS Support-TroubleshooTECSTaskFailedToStart. Si vous ne spécifiez aucun rôle IAM, Systems Manager Automation utilise les autorisations de l'utilisateur ou du rôle IAM qui exécute le runbook. Pour plus d'informations sur la création du rôle d'utilisateur pour Systems Manager Automation, consultez Tâche 1 : Créer une fonction du service pour Automatisation.
  10. Pour ClusterName, tapez le nom du cluster dans lequel la tâche n'a pas pu démarrer.
  11. Pour TaskID, entrez l'identification de la tâche qui a récemment échoué.
  12. Sélectionnez Exécuter.

En fonction des résultats de l'automatisation, utilisez l'une des étapes de dépannage manuel suivantes.

Vérifiez les itinéraires entre vos sous-réseaux et Internet

Si vous avez une tâche Fargate dans un sous-réseau public, vérifiez qu'une adresse IP publique est attribuée à votre tâche. Vérifiez également que la tâche présente un itinéraire par défaut (0.0.0.0/0) vers une passerelle Internet. Si vous lancez une nouvelle tâche ou créez un nouveau service, activez l'Attribution automatique du public.

Si vous utilisez les configurations suivantes, n'utilisez pas la passerelle Internet du sous-réseau public pour accéder au gestionnaire de secrets ou au gestionnaire de systèmes. Utilisez plutôt un point de terminaison Amazon VPC :

  • Les points de terminaison du VPC Secrets Manager ou Systems Manager sont placés dans un sous-réseau public.
  • Vous avez activé Amazon ProvidedDNS dans vos paramètres DHCP Amazon VPC.

Remarque : Vous ne pouvez pas activer l'Attribution automatique de tâches publiques pour les tâches existantes. Pour les services existants, vous pouvez uniquement utiliser l'interface de ligne de commande AWS (AWS CLI) pour reconfigurer les services. Vous ne pouvez pas utiliser la console de gestion AWS. Si vous avez utilisé une pile AWS CloudFormation pour créer votre service Amazon ECS, modifiez la propriété NetworkConfiguration AWS:ECS::Service pour actualiser le service.

Si vous avez une tâche Fargate dans un sous-réseau privé, vérifiez que votre tâche possède un itinéraire par défaut (0.0.0.0/0) vers la source de connectivité Internet. La source de connectivité Internet peut être une passerelle NAT, AWS PrivateLink ou une autre source.

  • Si vous utilisez une passerelle NAT, intégrez votre passerelle NAT à un sous-réseau public. Pour plus d'informations, consultez Architecture avec passerelle Internet et passerelle NAT.
  • Si vous utilisez PrivateLink, vérifiez que votre infrastructure Fargate peut utiliser les groupes de sécurité pour vos points de terminaison Amazon VPC.
  • Si vous utilisez un serveur de noms de domaine personnalisé, confirmez les paramètres de la requête DNS. La requête doit disposer d'un accès sortant sur le port 53 au moyen des protocoles UDP et TCP. Un accès HTTPS sur le port 443 est également nécessaire.

Vérifiez les paramètres de votre ACL réseau et de votre groupe de sécurité

Vérifiez que votre liste de contrôle d'accès au réseau (ACL réseau) et vos groupes de sécurité ne bloquent pas l'accès sortant au port 443 depuis le sous-réseau. Pour plus d'informations, voir Contrôler le trafic vers les ressources à l'aide de groupes de sécurité.

Remarque : Les tâches Fargate doivent disposer d'un accès sortant au port 443 pour autoriser le trafic sortant et accéder aux points de terminaison Amazon ECS.

Vérifiez vos points de terminaison Amazon VPC

Si vous utilisez PrivateLink, vous devez créer les points de terminaison requis.

Les points de terminaison suivants sont requis pour les versions 1.4.0 ou ultérieures de la plateforme Fargate :

  • com.amazonaws.region.ecr.dkr
  • com.amazonaws.region.ecr.api
  • Point de terminaison de passerelle S3
  • com.amazonaws.region.logs

Pour plus d'informations, consultez la section Considérations relatives aux points de terminaison Amazon ECR VPC.

Remarque : Si votre définition de tâche utilise Secrets Manager, les paramètres de Systems Manager ou Amazon CloudWatch Logs, vous devrez probablement définir des points de terminaison. Pour plus d'informations, consultez la documentation suivante :

Si vous utilisez PrivateLink, vérifiez que le groupe de sécurité d'Amazon VPC autorise un trafic adéquat. Le groupe doit autoriser le trafic provenant du groupe de sécurité des tâches Fargate ou de la plage CIDR VPC des tâches Fargate sur le port TCP 443.

Pour vérifier que l'infrastructure Fargate dispose d'un accès au service, consultez les politiques de points de terminaison VPC et les politiques de points de terminaison pour Amazon Simple Storage Solution (Amazon S3).

Vérifiez vos rôles et autorisations IAM

Le rôle d'exécution de la tâche accorde les autorisations requises au conteneur Amazon ECS et aux agents Fargate pour effectuer des appels d'API pour la tâche. Fargate exige ce rôle lorsque vous effectuez les actions suivantes :

  • Extraction d’une image de conteneur depuis Amazon Elastic Container Registry (Amazon ECR).
  • Utilisation du pilote de journalisation awslogs.
  • Utilisation de l'authentification du registre privé.
  • Utilisation des secrets de Secrets Manager ou des paramètres du magasin de paramètres de Systems Manager pour référencer des données sensibles.

Si votre cas d'utilisation prévoit l'un des scénarios précédents, définissez les autorisations requises dans votre rôle d'exécution de tâches. Pour obtenir la liste complète des autorisations requises, consultez la section Rôle IAM d'exécution de tâches Amazon ECS.

Vérifiez les informations sensibles référencées dans la définition des tâches Amazon ECS

Vérifiez si les noms du secret et des paramètres correspondent aux noms référencés dans votre définition de tâche Amazon ECS. Vérifiez ensuite si les valeurs de la définition du conteneur de votre définition de tâche correspondent aux valeurs de votre définition de tâche Amazon ECS. Pour plus d'informations, consultez Comment puis-je transmettre des secrets ou des informations sensibles en toute sécurité à des conteneurs dans le cadre d'une tâche Amazon ECS ?

Si le paramètre du magasin de paramètres de Systems Manager et la tâche sont situés dans la même Région, utilisez l'ARN complet ou le nom du secret. Si le paramètre est situé dans une autre Région, vous devez spécifier l'ARN complet.

Pour vérifier le nom du paramètre Systems Manager et l'ARN, procédez comme suit :

Remarque : En cas de réception d’erreurs durant l'exécution des commandes de l'AWS CLI, vérifiez que vous utilisez la dernière version de l'AWS CLI.

  1. Ouvrez la console AWS Systems Manager.
  2. Dans le volet de navigation, sélectionnezParameter Store, puis confirmez le nom de votre Parameter Store.
  3. Pour obtenir l'ARN du paramètre, utilisez l'interface de ligne de commande AWS pour exécuter la commande suivante. Remplacez le name_of_parameter_store_secret par le nom secret de votre Parameter Store.
$ aws ssm get-parameter —name <name_of_parameter_store_secret> —with-decryption

Remarque : Les paramètres relatifs aux secrets du gestionnaire de secrets ne peuvent pas utiliser les fonctionnalités de gestion des versions ou d'historique du Parameter Store. Pour plus d'informations, consultez la section Restrictions.

Informations connexes

Vérifier les erreurs liées aux tâches interrompues

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an