Comment résoudre une erreur « ResourceInitializationError » lorsque j'essaie d'extraire des secrets ou de récupérer l'authentification Amazon ECR pour les tâches ECS ?

Lecture de 10 minute(s)
0

Lorsque je lance une tâche Amazon Elastic Container Service (Amazon ECS), je reçois un message ResourceInitializationError.

Brève description

Lorsque vous lancez une tâche Amazon ECS sur le type de lancement Fargate, l'un des messages d'erreur suivants peut s'afficher :

  • « ResourceInitializationError: unable to pull secrets or registry auth: pull command failed: : signal: killed »
  • « ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried. »
  • « ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr..amazonaws.com/": dial tcp …443: i/o timeout. Please check your task network configuration. »
  • « ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret arn:aws:secretsmanager… »
  • « ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret arn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: InvalidParameter: 1 validation error(s) found. – (minimum field size of 32/ maximum field size of 64), GetSecretValueInput.VersionId. »
  • « ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 1 time(s): failed to fetch secret rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> from secrets manager: AccessDeniedException: User: arn:aws:sts::<accountID>::assumed-role/<roleName> is not authorized to perform: secretsmanager:GetSecretValue on resource: rn:aws:secretsmanager:<region>:<accountID>:secret:<secretName> because no identity-based policy allows the secretsmanager:GetSecretValue action status code: 400) »

AWS Fargate version 1.4.0 utilise l'interface réseau Elastic de la tâche pour extraire l'image et les secrets. L’intégralité du trafic réseau passe par l'interface réseau Elastic de votre Amazon Virtual Private Cloud (Amazon VPC). Vous pouvez utiliser les journaux de flux VPC pour visualiser le trafic. Cependant, la tâche utilise votre configuration réseau car Fargate place les interfaces réseau dans votre Amazon VPC.

L'agent de conteneur Amazon ECS utilise le rôle d'exécution de tâches AWS Identity and Access Management (IAM) pour obtenir des informations auprès du Parameter Store, une fonctionnalité d'AWS Systems Manager et d'AWS Secrets Manager.

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

  • ssm:GetParameters
  • secretsmanager:GetSecretValue
  • kms:Decrypt

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

Utiliser le dossier d'exploitation TroubleshootECSTaskFailedToStart

Utilisez le dossier d'exploitation AWSSupport-TroubleshootECSTaskFailedToStart pour résoudre les échecs de démarrage des tâches Amazon ECS.

Important : Utilisez le dossier d'exploitation correspondant à la région AWS où sont situées vos ressources de cluster ECS. Utilisez l'ID de tâche ayant échoué le plus récemment afin que le nettoyage de l'état de la tâche n'interrompe pas l'analyse. Si la tâche en échec fait partie du service Amazon ECS, utilisez la dernière tâche qui a échoué dans le service. La tâche ayant échoué doit être visible dans ECS:DescribeTasks lorsque vous exécutez Automation. Par défaut, les tâches ECS arrêtées restent visibles 1 heure après le passage à l'état Arrêté.

Pour exécuter le dossier d'exploitation AWSSupport-TroubleshootECSTaskFailedToStart, procédez comme suit :

  1. Ouvrez la console AWS Systems Manager.
  2. Dans le volet de navigation, sous Change Management (Gestion des modifications), choisissez Automation (Automatisation).
  3. Choisissez Execute automation (Exécuter l’automatisation).
  4. Sélectionnez l'onglet Appartenant à Amazon.
  5. Dans Document Automation, saisissez TroubleshootECSTaskFailedToStart dans la barre de recherche.
  6. Sélectionnez la carte AWSSupport-TroubleshootECSTaskFailedToStart.
    Remarque : Ne sélectionnez pas le nom d'automatisation en lien hypertexte.
  7. Sélectionnez Suivant.
  8. Pour Exécuter le document Automation, choisissez Exécution simple.
  9. Dans la section Paramètres d'entrée, pour AutomationAssumeRole, saisissez l'ARN du rôle qui permet à Automation d'effectuer des actions.
    Remarque : Vérifiez que le rôle de service ou l'utilisateur ou rôle IAM dispose des autorisations IAM requises pour exécuter le dossier d'exploitation AWSSupport-TroubleshootECSTaskFailedToStart. Si vous ne spécifiez pas de rôle IAM, Automation utilisera les autorisations de l’utilisateur ou du rôle IAM qui exécute le dossier d'exploitation. Pour plus d'informations sur la création du rôle de service pour Automation, consultez la section Tâche 1 : Créer un rôle de service pour Automation.
  10. Dans ClusterName, saisissez le nom du cluster dans lequel la tâche n'a pas pu démarrer.
  11. Dans TaskID, saisissez l'identification de la tâche qui a récemment échoué.
  12. Sélectionnez Exécuter.
    Remarque : Après l’exécution, les résultats de l'analyse sont renseignés dans la section Sortie globale. Toutefois, attendez que le statut du document passe à Opération réussie. Consultez également la section Sortie pour rechercher d’éventuelles exceptions.

Vous pouvez également résoudre le problème manuellement.

Vérifier les routes entre vos sous-réseaux et Internet

Si votre tâche Fargate se trouve dans un sous-réseau public, vérifiez que vous lui avez attribué une adresse IP publique. Vérifiez également que la tâche présente une route 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'option Attribution publique automatique.

Si vous avez utilisé une pile AWS CloudFormation pour créer votre service Amazon ECS, modifiez la propriété NetworkConfiguration pour AWS::ECS::Service afin de mettre à jour le service. Pour mettre à jour la configuration des services existants, utilisez CloudFormation pour activer le paramètre AssignPublicIp. Vous pouvez également exécuter la commande update-service de l'interface de ligne de commande AWS suivante :

aws ecs update-service --service serviceName --region regionName "awsvpcConfiguration={subnets=[subnet-123,subnet-456],securityGroups=[sg-123,sg-456],assignPublicIp=ENABLED}"

Remarque : Remplacez regionName par votre région.

Si vous utilisez les configurations suivantes, vous ne pouvez pas utiliser la passerelle Internet du sous-réseau public pour accéder à Secrets Manager ou à Systems Manager :

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

Vous pouvez utiliser un point de terminaison de VPC Amazon à la place.

Remarque : Vous ne pouvez pas activer l'option Attribution publique automatique pour les tâches existantes. Pour reconfigurer les services existants, utilisez l'interface de ligne de commande AWS et non la console de gestion AWS.

Si votre tâche Fargate se trouve dans un sous-réseau privé, vérifiez qu’elle possède un routage 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 un serveur de domaine personnalisé.

Si vous utilisez une passerelle NAT, intégrez votre passerelle NAT à un sous-réseau public. Pour plus d'informations, consultez la section Architecture avec une passerelle Internet et une passerelle NAT à l’aide d’AWS Network Firewall. Si vous utilisez PrivateLink, vérifiez que les groupes de sécurité des points de terminaison de VPC Amazon autorisent le trafic vers les tâches Fargate. Si vous utilisez un serveur de noms de domaine personnalisés, confirmez les paramètres de la requête DNS. La requête doit disposer d'un accès sortant sur le port 53 et utiliser les protocoles UDP et TCP. La requête doit également disposer d'un accès HTTPS sur le port 443.

Vérifier 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 en savoir plus, consultez la page Contrôler le trafic vers vos ressources AWS à 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érifier vos points de terminaison de VPC Amazon

Si vous utilisez PrivateLink, vous devez créer les points de terminaison requis suivants 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 en savoir plus, consultez la page Considérations relatives aux points de terminaison d’un VPC Amazon Elastic Container Registry (Amazon ECR).

Remarque : Si votre définition de tâche utilise Secrets Manager, Parameter Store ou Amazon CloudWatch Logs, assurez-vous de définir des points de terminaison. Pour plus d'informations, consultez les sections Utilisation d'un point de terminaison de VPC AWS Secrets Manager et Création des points de terminaison de VPC pour Amazon ECS.

Pour PrivateLink, vérifiez que le groupe de sécurité de VPC Amazon autorise le trafic provenant du groupe de sécurité de tâches Fargate ou de la plage d'adresses CIDR du VPC 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 de VPC et les politiques de points de terminaison de passerelle Amazon Simple Storage Service (Amazon S3).

Vérifier vos autorisations et rôles 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 requiert le rôle d'exécution de tâches lorsque vous effectuez les actions suivantes :

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

Dans les scénarios précédents, définissez les autorisations requises dans votre rôle d'exécution de tâches. Lorsque vous accédez aux secrets Secrets Manager ou aux paramètres de Parameter Store pour récupérer les données sensibles, vérifiez que vous disposez des autorisations secretsmanager:GetSecretValue ou ssm:GetParameters. Pour obtenir la liste des autorisations requises, consultez la section Autorisations de Secrets Manager ou de Systems Manager.

Vérifier les données sensibles dans la définition de tâche Amazon ECS

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

Assurez-vous de configurer le secret ou le paramètre avec le même ARN ou le même nom que celui spécifié dans la définition de tâche. Si la ressource existe dans une autre région, vous devez fournir l'ARN complet.

Utilisez le paramètre VersionId dans GetSecretValueInput pour spécifier la version de la valeur secrète récupérée. Si vous n'avez pas besoin d'une version spécifique, supprimez le champ VersionId. Secrets Manager récupère la dernière version par défaut.

Si le paramètre de Parameter Store 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 et l'ARN, procédez comme suit :

  1. Ouvrez la console AWS Systems Manager.
  2. Dans le volet de navigation, sélectionnez Parameter Store, puis confirmez le nom de votre stockage de paramètres.
  3. Pour obtenir l'ARN du paramètre, exécutez la commande get-parameter de l'AWS CLI suivante :
    aws ssm get-parameter --name name_of_parameter_store_secret --with-decryption
    Remarque : Remplacez name_of_parameter_store_secret par le nom secret de votre stockage de paramètres : Les paramètres qui font référence aux secrets Secrets Manager ne peuvent pas utiliser les fonctionnalités de gestion des versions ou d'historique de Parameter Store. Pour plus d'informations, consultez la section Restrictions.

Informations connexes

Affichage des erreurs de tâches arrêtées Amazon ECS

Options de mise en réseau des tâches Amazon ECS pour le type de lancement Fargate

Points de terminaison de VPC de l’interface Amazon ECR (AWS PrivateLink)

Utilisation de CloudWatch Logs avec les points de terminaison de VPC d'interface

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 mois