web-dev-qa-db-fra.com

Le "jeton d’autorisation a expiré", l’émission AWS-CLI sur MacOS Sierra

J'essaie de transférer une image de menu fixe dans le référentiel AWS ECR à l'aide de l'aws-cli.

  • Je viens d'exécuter la commande get-login
  • exécuter la sortie (qui retourne login succeeded
  • puis essayez de pousser une image de docker alors je reçois le message :
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

Je ne sais pas ce qui ne va pas, je pousse vers le bon repo, le temps sur mon mac est correct. Cela fonctionnait auparavant, mais depuis que j'ai réinstallé mon mac et mis à niveau vers macOS Sierra, il ne fonctionne plus, donc probablement lié à cela.

Ma sortie aws --version:

aws-cli/1.11.34 Python/2.7.10 Darwin/16.3.0 botocore/1.4.91

La sortie complète des commandes que je lance:

$ aws ecr get-login --region eu-west-1
docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
$ docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded
$ docker Push 1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web:latest
The Push refers to a repository [1234567890.dkr.ecr.eu-west-1.amazonaws.com/service-web]
c1f87971dfa9: Preparing 
2eb644aea3de: Preparing 
9c8843ffe48e: Preparing 
39bb58d049d4: Preparing 
f053bc969599: Preparing 
7169084246b8: Waiting 
bb134a1936fd: Waiting 
184e76848a1c: Waiting 
75c8fcf65748: Waiting 
eb9b9ee1ea58: Waiting 
f4bf35723edd: Waiting 
ddffe1a64b3c: Waiting 
fd1a1154db16: Waiting 
b542e946067a: Waiting 
d49ed2a5e1ed: Waiting 
bb39b980367a: Waiting 
25b8358d062f: Waiting 
997eee521fc7: Waiting 
50b5447183a8: Waiting 
4339b5cb0e1d: Waiting 
3dbd4a53b21b: Waiting 
2bec16216500: Waiting 
b9fd8e264df6: Waiting 
b6ca02dfe5e6: Waiting 
denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.
23

Aucune des solutions ci-dessus ne fonctionnait pour moi, mais j'ai constaté que lorsque je définissais une région dans la commande ecr login, cela fonctionnait.

aws ecr get-login --region us-west-2

24
Kamil Wojcik

Les dernières versions de Docker utilisent une nouvelle fonctionnalité de stockage des informations d'identification qui a un bogue où exécuter un docker login avec une URL spécifiant un protocole entraîne des erreurs d'expiration du jeton. Ce problème sera corrigé dans Docker 1.13.

Pour le moment, la solution consiste à exécuter vos commandes de connexion sans spécifier le protocole.

Donc, dans la commande blob renvoyée par aws ecr get-login:

docker login -u AWS -p AQECAHh....b6Wk -e none https://1234567890.dkr.ecr.eu-west-1.amazonaws.com

Devrait être remplacé par ceci:

docker login -u AWS -p AQECAHh....b6Wk -e none 1234567890.dkr.ecr.eu-west-1.amazonaws.com

Si vous omettez le https://, le menu fixe doit fonctionner pour le moment.

17
wkl

Vous pouvez simplement exécuter la commande et ne pas coller la commande renvoyée par cette commande dans le terminal. Erreur facile à faire. Une fois que vous courez: 

aws ecr get-login --no-include-email --region us-east-1 

Il va imprimer une autre commande à exécuter, vous devrez copier cette commande et l'exécuter dans votre terminal pour vous authentifier complètement. 

Ou un raccourci intéressant consiste simplement à rediriger la commande echo'd vers le shell avec:
aws ecr get-login --no-include-email --region us-east-1 | sh

12
Dakota Hipp

Je viens d'avoir le même problème sous Linux Mint 18.1 (Ubuntu 16.04) avec AWS ECR et le dernier Docker 17.06.1-ce utilisé via le dernier client Python Docker 2.5.1. La connexion a fonctionné, le push a échoué.

Enlèvement de ~/.docker/config.json aidé. Il ne contenait que, probablement obsolète, un jeton d'autorisation.

Je ne pense pas que cela a quelque chose à voir avec le système d'exploitation sous-jacent. Dans mon cas, cela fonctionnait auparavant et le seul changement dont je me souvienne est la mise à niveau du docker.io 1.12 du référentiel d'Ubuntu au docker-ce 17.06 du référentiel de Docker.

4
saaj

Vous obtenez également le message "Votre jeton d'autorisation a expiré" si vous avez plus d'un identifiant dans ~/.aws/credentials (chemin dépendant de votre système d'exploitation) et oubliez d'ajouter l'indicateur --p.

Utilisez cette commande pour vous connecter:

aws ecr get-login --region eu-west-1 --p <yourprofilename>
3
Nik

Vous devez actualiser votre jeton d'autorisation toutes les 12 heures. Essayez: 

$(aws ecr get-login --no-include-email --region us-east-1) - change de région en fonction de votre configuration

3
zooblin

J'ai eu de la chance en utilisant eval. Par exemple,

$ aws ecr get-login --region us-east-1 --no-include-email --profile username_env 

N'a pas fonctionné.

$ eval $(aws ecr get-login --region us-east-1 --no-include-email --profile username_env)

A travaillé.

1
Ryan Dahlke

J'utilisais la version stable de docker pour mac Version 1.12

Je viens de passer à la version bêta de la version Version 1.13.0-rc4-beta34.1 (14853).__ et tout fonctionne comme prévu.

Donc, s'il y a des personnes qui ont le même problème, assurez-vous d'utiliser Docker pour Mac version 1.13 ou supérieure, si la version 1.13 n'est pas encore sortie, passez à la version bêta.

1

Dans mon cas, le problème était lié aux informations d'identification multiples dans ~/.aws/credentials. J'ai donc utilisé --profile.

aws ecr get-login --no-include-email --region us-east-2 --profile xxxx

Cela a fonctionné pour moi. 

0
Chetan kapoor

Cela s'est produit lorsque j'essayais de transférer/extraire un registre d'un autre compte AWS. Je devais exécuter get-login avec l'indicateur --registry-ids, en transmettant l'ID du registre auquel je voulais me connecter.

0
spiffytech

Avertissement: aws ecr get-login ne semble pas se connecter aux serveurs AWS et semble fonctionner même si vos clés d'accès/secrètes AWS sont incorrectes ou même si vous avez oublié d'entrer vos clés d'accès/secrètes AWS en tant que variables d'environnement. 

Il vous donnera toujours un mot de passe long sans fournir d'erreur. Le message que vous recevez d'AWS est une erreur d'expiration au lieu d'une "autorisation incorrecte" plus correcte et plus utile.

Remarque: Utilisation de la version 1.11.112 de aws-cli.

0
Mike Biglan

Je sais que le poste est lié à MacOS Sierra, mais pour ceux qui ont le problème sous Windows, j’ai effectué les opérations suivantes:

1) aws ecr get-login, cette commande affichera une longue chaîne 

connexion docker -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH ...... (Omis la ligne entière pour une meilleure compréhension) -e none https: //xxxxxx.dkr.ecr.ecr.us-east-1. amazonaws.com .

2) Copiez et collez la ligne ci-dessus (peut-être que -e ne fonctionnera pas, supprimez-la aussi)}. La sortie affichera un avertissement suivi d'un succès: AVERTISSEMENT! L'utilisation de --password via la CLI n'est pas sécurisée. Utilisez --password-stdin Login Succeeded

Si vous devez utiliser un moyen sécurisé, utilisez le --password-stdin

3) Maintenant, vous pouvez pousser l'image en toute sécurité - docker Appuyez sur xxxxxxx.dkr.ecr.us-east-1.amazonaws.com/ecfs-test

0429f33dd264: Pushed
48accfb13167: Pushed
f3bb6dd29c05: Pushed
e58ae65fa4eb: Pushed
3c6037fae296: Pushed
3efd1f7c01f6: Pushed
73b4683e66e8: Pushed
ee60293db08f: Pushed
9dc188d975fd: Pushed
58bcc73dcf40: Pushed
latest: digest: sha256:4354d137733c98a1bc8609d2d2f8e97316373904e size: 2404

Peut-être que cette solution fonctionnera aussi sur Mac.

0
hlopezvg

Le problème vient du fait que la commande aws ecr get-login récupère un jeton valide pendant 12 heures pour un registre spécifié, puis imprime une commande de connexion docker avec ce jeton d'autorisation et que nous n'exécutons pas cette commande.

Nous devons exécuter cette commande imprimée pour vous connecter à votre registre avec Docker. Dans mon cas, j'utilise eval pour exécuter la commande imprimée que je reçois depuis aws ecr get-login comme ceci:

eval $ (aws ecr get-login --region eu-west-1 --profile)

0
umenon