2
2

【AWS】buildspec.yamlで使う「aws ecr get-login」と「aws ecr get-login-password」の違い

Posted at

概要

buildspec.yamlを利用してAWS CodeBuildでビルドする際の、
DockerイメージをAWSのECRにプッシュするために使用するコマンドについて。

以下のようにyamlに記載していましたが、これは古い認証方法とのこと。
(CLIコマンドとして使うときも同様)

  - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)

以下のように書き換えることが推奨されています。

  - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com

なぜか?今回調べてみました。

aws ecr get-loginaws ecr get-login-passwordの違い

1つ目のコマンドでは、aws ecr get-loginを使用してDockerログインコマンドを生成し、そのコマンドを実行しています。この方法は、AWS CLI v1では使われていたようですが、AWS CLI v2では非推奨とのこと。パスワードがシェルのhistoryやログファイルに残ってしまうリスクがあったためです。

2つ目のコマンドでは、aws ecr get-login-passwordを使用してECRからDocker認証トークンを取得し、そのトークンを使用してDockerにログインします。パスワードを標準入力(--password-stdin)を通じてDockerに渡すため、コマンドラインやシェルの履歴にパスワードが残らないようになりました。こちらはAWS CLI v2で推奨されていますし、セキュリティの観点からも好ましいでしょう。

どちらも一時的な認証トークンではありますが、パスワードをパイプラインを通じてdocker loginコマンドに渡せる2番目の方が良い、ということになります。

公式ドキュメントから引用

get-login-password を使用して Amazon ECR レジストリに対して Docker を認証するには、aws ecr get-login-password コマンドを実行します。認証トークンを docker login コマンドに渡すとき、ユーザー名に AWS 値を使用し、認証先の Amazon ECR レジストリの URI を指定します。

補足

ちなみに、一つ目の方法の際、aws ecr get-login-password --region ap-northeast-1というように$()がない場合だとno basic auth credentialsというログが出ます。これは以前記事にしたのでご参考までに。

そのほか参考:

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2