Comment puis-je éliminer l'erreur Amazon ECR « CannotPullContainerError: API error » (« CannotPullContainerError : erreur d'API ») dans Amazon ECS ?

Dernière mise à jour : 20/08/2020

Si j'essaye d'extraire des images avec Amazon Elastic Container Registry (Amazon ECR), je reçois le message d'erreur suivant : « CannotPullContainerError: API error » (« CannotPullContainerError : erreur d'API »). Comment puis-je éliminer cette erreur dans Amazon Elastic Container Service (Amazon ECS) ?

Brève description

Vous pouvez recevoir cette erreur pour l'une des raisons suivantes :

  • Votre type de lancement n’a pas accès au point de terminaison Amazon ECR
  • Votre stratégie de référentiel Amazon ECR limite l'accès aux images du référentiel.
  • Votre rôle AWS Identity and Access Management (IAM) n'a pas les autorisations nécessaires pour extraire ou envoyer des images.
  • L'image est introuvable
  • L’accès à Amazon Simple Storage Service (Amazon S3) est refusé par la stratégie de point de terminaison de la passerelle de votre VPC Amazon (Amazon Virtual Private Cloud).

Pour extraire des images, Amazon ECS doit communiquer avec le point de terminaison Amazon ECR.

Solution

Choisissez une résolution en fonction du type de problème que vous rencontrez :

Votre type de lancement n'a pas accès au point de terminaison Amazon ECR.

1.    Si vous exécutez une tâche à l'aide d'un type de lancement Amazon Elastic Compute Cloud (Amazon EC2) et que votre instance de conteneur se trouve dans un sous-réseau privé, ou si vous exécutez une tâche à l'aide du type de lancement AWS Fargate dans un sous-réseau privé, vérifiez que votre sous-réseau comporte une route vers une passerelle NAT dans la table de routage.

2.    Si vous exécutez une tâche à l'aide d'un type de lancement EC2 et que votre instance de conteneur se trouve dans un sous-réseau public, vérifiez que l'instance possède une adresse IP publique.

-ou-

Si vous exécutez une tâche à l'aide du type de lancement Fargate dans un sous-réseau public, sélectionnez « ACTIVÉ » pour « Attribuer automatiquement une IP publique » au moment du lancement de la tâche. Cette action permet à votre tâche d'avoir un accès réseau sortant pour extraire une image.

3.    Configurez la passerelle NAT dans votre VPC pour acheminer les demandes à Internet.

Remarque : vous pouvez utiliser un modèle AWS PrivateLink plutôt qu'une passerelle NAT.

4.    Si vous utilisez AWS PrivateLink pour Amazon ECR, vérifiez que le groupe de sécurité associé aux points de terminaison d'un VPC d'interface pour Amazon ECR autorise le trafic entrant sur HTTPS (port 443) depuis le groupe de sécurité de votre CIDR VPC, de votre instance de conteneur ECS ou de votre tâche ou service Fargate.

5.    Vérifiez que le groupe de sécurité associé à votre instance et à la tâche Fargate autorisent l'accès sortant pour les éléments suivants : HTTPS sur le port 443, DNS (UDP et TCP) sur le port 53 et liste de contrôle d'accès réseau (ACL réseau) de votre sous-réseau.

Votre stratégie de référentiel Amazon ECR limite l'accès aux images du référentiel.

Vérifiez les restrictions d'accès au référentiel stipulées dans votre stratégie de référentiel Amazon ECR.

L'exemple de stratégie référentiel suivant permet aux utilisateurs IAM d'envoyer et d'extraire des images :

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/push-pull-user-1",
          "arn:aws:iam::123456789012:user/push-pull-user-2"
        ]
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

Votre rôle IAM n'a pas les autorisations nécessaires pour extraire des images.

Si vous exécutez une tâche à l'aide d'un type de lancement EC2, confirmez que le rôle IAM d'instance associé au profil d'instance dispose des autorisations pour accéder au référentiel Amazon ECR.

Remarque : la stratégie gérée AWS AmazonEC2ContainerRegistryReadOnly fournit les autorisations minimales requises pour extraire des images.

Si vous exécutez une tâche à l'aide d'un type de lancement Fargate, vérifiez que la AmazonECSTaskExecutionRolePolicy a les autorisations requises.

L'image est introuvable.

Pour confirmer le bon nom d'image dans l'URI, vérifiez le paramètre d’image dans la section des définitions de conteneur de votre définition de tâche.

Remarque : pour extraire par balise, utilisez le format de nom d'image suivant : registre/référentiel[:tag]. Pour extraire par hachage, utilisez le format suivant : registry/repository[@digest].

L'accès à Amazon S3 est refusé par la stratégie du point de terminaison de la passerelle de votre Amazon VPC.

Si vous avez une route vers un point de terminaison de la passerelle d'un Amazon VPC pour Amazon S3 dans la table de routage, effectuez les opérations suivantes :

1.    Vérifiez la stratégie d'accès point de terminaison de la passerelle du VPC Amazon.

2.    Vérifiez que le point de terminaison de la passerelle d'Amazon VPC a la bonne stratégie pour accéder au compartiment S3.


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


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