Comment puis-je autoriser un compte secondaire à transférer ou à extraire des images dans mon référentiel Amazon ECR ?

Lecture de 4 minute(s)
0

Je souhaite autoriser un compte secondaire à transférer ou à extraire des images dans mon référentiel d'images Amazon Elastic Container Registry (Amazon ECR).

Résolution

Vous pouvez transférer ou extraire les images d’un référentiel Amazon ECR vers ou depuis un autre compte. Vous devez tout d’abord créer une politique autorisant le compte secondaire à effectuer des appels d'API sur le référentiel. Utilisez ensuite un jeton d'authentification Docker généré à partir du compte secondaire pour utiliser des commandes push et pull sur le référentiel du compte principal.

Créez une politique autorisant le compte secondaire à effectuer des appels d'API sur le référentiel d'images

1.    Ouvrez la console Amazon ECR pour votre compte principal.

2.    Sélectionnez leNom du référentiel en lien hypertexte du référentiel que vous souhaitez modifier.

3.    Dans le volet de navigation de gauche, sous Amazon ECR - Référentiels, sélectionnez Autorisations.

4.    Pour ajouter une politique de référentiel à votre compte secondaire depuis votre compte principal, sélectionnez Modifier la politique JSON. Saisissez votre politique dans l'éditeur de code, puis sélectionnez Enregistrer.

Important : Dans votre politique, insérez le numéro du compte secondaire et les actions que le compte peut effectuer sur le référentiel. Pour autoriser l'accès à un rôle spécifique, configurez le rôle arncomme principal. Par exemple, AWS:arn:aws:iam::account-id:role/ecsInstanceRole. Le rôle doit déjà exister dans le compte secondaire afin d’enregistrer la politique du référentiel. Dans le cas contraire, vous recevez le message d'erreur suivant : politique de référentiel fournie non valide.

L'exemple de politique de référentiel suivant permet à un compte d'envoyer et extraire des images :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

5.    Dans la définition des tâches, définissez l'image que vous souhaitez utiliser avec Amazon ECS. Votre image est hébergée dans le référentiel Amazon ECR du compte principal.
Remarque : Vérifiez que votre compte secondaire dispose des autorisations Amazon ECR répertoriées dans la politique gérée de « AmazonEC2ContainerRegistryPowerUser ». Ces autorisations sont nécessaires pour extraire ou envoyer des données depuis votre compte principal.

Générez un jeton d'authentification Docker temporaire à partir du compte secondaire et effectuez un test push ou pull

Remarque : Si des erreurs surviennent durant l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la dernière version de l'interface de ligne de commande AWS.

Le compte secondaire ne peut effectuer aucune action de politique sur le référentiel tant qu'il n'a pas reçu un jeton d'authentification temporaire valable 12 heures. Le jeton permet au compte secondaire d'utiliser les commandes push et pull Docker sur le référentiel du compte principal. La commande get-login-password récupère et décode le jeton d'autorisation, que vous pouvez ensuite rediriger vers une commande de connexion Docker pour vous authentifier.

Remarque : Le compte destinataire du jeton doit disposer des autorisations d'API AWS Identify and Access Management (IAM) permettant de modifier le référentiel. Pour des exemples, consultez les politiques gérées par AWS pour Amazon Elastic Container Registry. Pour résoudre les problèmes liés à Docker, activez le mode de débogage sur votre démon Docker. Cette commande est prise en charge par la dernière version de la version 2 de l'interface de ligne de commande AWS, ou de la version v1.17.10 ou ultérieure de la version 1 de l'interface de ligne de commande AWS. Pour plus d'informations, consultez get-login-password.

1.    Pour générer un jeton d'authentification Docker pour un compte qui envoie et extrait des images à l’extérieur d'Amazon ECS, exécutez la commande suivante. Remplacez aws_account_id par votre identifiant de compte principal, et remplacez Region ID par votre identifiant de Région.

Utilisation de l'interface de ligne de commande AWS :

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Utilisation des outils AWS pour Windows PowerShell :

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

Le résultat sera le suivant :

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.    Effectuez un test d'extraction ou de transfert d'image avec le compte principal :

docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName

Remarque : Remplacez AccountID et Region par votre ID de compte et votre région. Remplacez ImageName et TagName par le nom de votre image et de votre balise.

3.    Vérifiez que l'image a bien été téléchargée :

docker images | grep ImageName

Remarque : Remplacez ImageName par le nom de votre image.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans