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

Date de la dernière mise à jour : 28/03/2022

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 politique de référentiel Amazon ECR limite l'accès aux images de 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

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é, confirmez que votre sous-réseau comporte un acheminement 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 ENABLED (ACTIVÉ) pour Auto-assign public IP (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, confirmez 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.    Confirmez que le groupe de sécurité associé à votre instance et à la tâche Fargate autorise l'accès sortant pour les éléments suivants : HTTPS sur le port 443, DNS (UDP et TCP) sur le port 53, ainsi que la liste de contrôle d'accès réseau (ACL réseau) de votre sous-réseau.

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

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

L'exemple de politique de référentiel suivant permet aux utilisateurs IAM de transférer 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 politique 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, confirmez que la politique AmazonECSTaskExecutionRolePolicy possède les autorisations requises.

L'image est introuvable

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

Remarque : pour extraire par identification, utilisez le format de nom d'image suivant : registre/référentiel[:identification]. Afin d'extraire par version d'image, utilisez le format suivant : registre/référentiel[@version].

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

Si vous avez un acheminement vers un point de terminaison de passerelle Amazon VPC pour Simple Storage Service (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.    Confirmez que le point de terminaison de la passerelle d'Amazon VPC a la bonne politique pour accéder au compartiment S3.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?