web-dev-qa-db-ja.com

「承認トークンの有効期限が切れました」MacOS SierraでのAWS-CLIの問題

Aws-cliを使用して、ドッカーイメージをAWS ECRリポジトリにプッシュしようとしています。

  • get-loginコマンドを実行するだけです
  • 出力を実行します(login succeededを返します)
  • dockerイメージをプッシュしようとすると、メッセージが表示されます:
    denied: Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one.

何が間違っているのかわかりません。正しいリポジトリにプッシュしています。Macの時刻は正しいです。これは以前は機能していましたが、Macを再インストールしてmacOS Sierraにアップグレードしたため、機能しなくなったため、おそらくそれに関連しています。

私のaws --version出力:

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

実行したコマンドの完全な出力:

$ 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.
33

上記のどちらのソリューションも機能しませんでしたが、ecr loginコマンドで領域を設定すると機能することがわかりました。

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

31
Kamil Wojcik

コマンドを実行しているだけで、そのコマンドから端末にエコーアウトされたコマンドを貼り付けていない可能性があります。簡単な間違い。実行したら:

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

実行する別のコマンドを出力します。完全に認証するには、そのコマンドをコピーして端末で実行する必要があります。

または、次のコマンドを使用して、エコーされたコマンドをシェルにパイプで戻すだけの簡単なショートカットがあります。
aws ecr get-login --no-include-email --region us-east-1 | sh

26
Dakota Hipp

Dockerの最新バージョンは、新しい資格情報ストレージ機能を使用します。これは、 バグがあります プロトコルを指定するURLでdocker loginを実行すると、トークンの有効期限エラーが発生します。この問題はDocker 1.13で修正される予定です。

とりあえず、回避策は、プロトコルを指定せずにログインコマンドを実行することです。

したがって、aws ecr get-loginによって返されるコマンドblobでは:

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 1234567890.dkr.ecr.eu-west-1.amazonaws.com

https://を省略すると、当分の間はdockerが動作するはずです。

20
wkl

〜/ .aws/credentials(OSに応じたパス)に複数の資格情報があり、-pフラグの追加を忘れると、「承認トークンの有効期限が切れました」というメッセージも表示されます。

ログインを取得するには、次のコマンドを使用します。

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

Linux Mint 18.1(Ubuntu 16.04)でAWS ECRと最新の Python Dockerクライアント 2.5.1を介して使用される最新のDocker 17.06.1-ceで同じ問題が発生しました。ログインは機能しましたが、プッシュは失敗しました。

~/.docker/config.jsonの削除が役立ちました。おそらく古いトークンのみが含まれていました。

基盤となるOSとは関係ないと思います。私の場合、以前は機能していましたが、思い出すことができる唯一の変更は、Ubuntuリポジトリのdocker.io 1.12からDockerリポジトリのdocker-ce 17.06へのアップグレードでした。

5
saaj

12時間ごとに認証トークンを更新する必要があります。

$(aws ecr get-login --no-include-email --region us-east-1)-設定に従って地域を変更

5
zooblin

私はevalを使って運が良かった。例えば、

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

うまくいきませんでした。

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

うまくいきました。

2
Ryan Dahlke

私も同じエラーを取得していました、以下は私が試した解決策であり、動作しています:1.コマンドを実行します:aws ecr get-login --no-include-email --region ap-southeast-1( 2. Docker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == https://youraccountid.dkr.ecr.ap-southeast-1.amazonaws.com のような出力が表示されます。

「https://」を削除してから、コマンドをdocker login -u AWS -p xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx == youraccountid.dkr.ecr.ap-southeast-1.amazonaws.comとして実行します

そしてそれは機能し、画像をプッシュすることができます。

2
rakhim

私の場合、問題は〜/ .aws/credentailsにある複数のクレデンシャルであったため、--profileを使用しました

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

これは私のために働いた。

1
Chetan kapoor

Mac用の安定版のdockerを使用していました_Version 1.12_

ベータ版Version 1.13.0-rc4-beta34.1 (14853)にアップグレードしたところ、すべて正常に機能するようになりました。

したがって、同じ問題を抱える人がいる場合は、Macバージョン1.13以降のdockerを使用してください。1.13がまだリリースされていない場合は、ベータ版に切り替えてください。

これは、別のAWSアカウントのレジストリからプッシュ/プルしようとしたときに発生しました。 get-loginフラグを指定して--registry-idsを実行し、ログインしたいレジストリのIDを渡す必要がありました。

0
spiffytech

警告: aws ecr get-loginは、AWSサーバーに接続していないようで、AWSアクセス/シークレットキーが正しくない場合や、AWSアクセス/シークレットキーを環境変数として入力するのを忘れた場合でも機能しているようです。

エラーを出さずに長いパスワードを喜んで提供します。したがって、AWSから取得するメッセージは、より正確で有用な「承認が正しくありません」ではなく、有効期限エラーです。

注:aws-cliバージョン1.11.112を使用

0
Mike Biglan

投稿がMacOS Sierraに関連していることは知っていますが、Windowsで問題がある人のために、以下を実行しました。

1)aws ecr get-login、このコマンドは長い文字列を出力します

docker login -u AWS -p eyJwYXlsb2FkIjoiUXBnQ2FTV1B6Q1JqZGlH .....。(理解を深めるために行全体を省略) -e none https://xxxxxxx.dkr.ecr.us-east -1.amazonaws.com

2)上記の行をコピーして貼り付けてください(おそらく-e noneは動作しないので、それも削除してください)。出力には、警告とそれに続く成功が表示されます:WARNING! CLIを介した--passwordの使用は安全ではありません。 --password-stdin Login Succeededを使用します

安全な方法を使用する必要がある場合は、-password-stdinを使用します

3)これで、イメージを安全にプッシュできます-docker Push 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

たぶん、このソリューションはMacでも動作します。

0
hlopezvg

問題は、aws ecr get-loginコマンドが指定されたレジストリに対して12時間有効なトークンを取得し、その承認トークンを使用してdockerログインコマンドを出力し、取得したコマンドを実行していないためです。

この印刷されたコマンドを実行して、Dockerでレジストリにログインする必要があります。私の場合、evalを使用して、次のようにaws ecr get-loginから返される印刷コマンドを実行しています。

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

0
umenon