概要
Docker version 1.11 で実装された credential-helper を利用し
ECR へのプッシュを安全に簡易的に行う仕組みを実装します。
Docker ver 1.11 以上にアップグレード
1 2 3 4 5 6 7
| $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D $ sudo sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main\ > /etc/apt/sources.list.d/docker.list" $ sudo apt-get purge lxc-docker docker $ sudo apt-get update $ sudo apt-get install docker-engine $ sudo service docker restart
|
pull Dockerized ECR credential helper
1
| $ docker pull pottava/amazon-ecr-credential-helper
|
認証設定
以下 3 つの中から 1 つ利用ください。
EC2 であれば、1. インスタンスロールで認証
が一番すっきりしていてコードの見通しが良いです。
- インスタンスロールで認証
- credential で認証
- 環境変数で認証
1. インスタンスロールで認証
1 2 3
| docker run --rm \ -e REGISTRY=123457689012.dkr.ecr.us-east-1.amazonaws.com \ pottava/amazon-ecr-credential-helper
|
1 2 3 4 5 6 7 8 9 10
| sudo sh -c 'cat << EOF > /usr/bin/docker-credential-ecr-login #!/bin/sh SECRET=\$(docker run --rm \\ -e METHOD=\$1 \\ -e REGISTRY=\$(cat -) \\ pottava/amazon-ecr-credential-helper) echo \$SECRET | grep Secret EOF'
sudo chmod +x /usr/bin/docker-credential-ecr-login
|
2. credential で認証
1 2 3 4
| docker run --rm \ -e REGISTRY=123457689012.dkr.ecr.us-east-1.amazonaws.com \ -v $HOME/.aws/credentials:/root/.aws/credentials \ pottava/amazon-ecr-credential-helper
|
1 2 3 4 5 6 7 8 9 10 11
| sudo sh -c 'cat << EOF > /usr/bin/docker-credential-ecr-login #!/bin/sh SECRET=\$(docker run --rm \\ -e METHOD=\$1 \\ -e REGISTRY=\$(cat -) \\ -v $HOME/.aws/credentials:/root/.aws/credentials \\ pottava/amazon-ecr-credential-helper) echo \$SECRET | grep Secret EOF'
sudo chmod +x /usr/bin/docker-credential-ecr-login
|
3. 環境変数で認証
1 2
| export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
|
1 2 3 4 5
| docker run --rm \ -e REGISTRY=123457689012.dkr.ecr.us-east-1.amazonaws.com \ -e AWS_ACCESS_KEY_ID \ -e AWS_SECRET_ACCESS_KEY \ pottava/amazon-ecr-credential-helper
|
1 2 3 4 5 6 7 8 9 10 11
| sudo sh -c 'cat << EOF > /usr/bin/docker-credential-ecr-login #!/bin/sh SECRET=\$(docker run --rm \\ -e METHOD=\$1 \\ -e REGISTRY=\$(cat -) \\ -e AWS_ACCESS_KEY_ID \\ -e AWS_SECRET_ACCESS_KEY \\ pottava/amazon-ecr-credential-helper) echo \$SECRET | grep Secret EOF' sudo chmod +x /usr/bin/docker-credential-ecr-login
|
credential 保存設定
1 2 3 4 5 6 7
| mv $HOME/.docker/config.json $HOME/.docker/config.json.org
cat << EOF > $HOME/.docker/config.json { "credsStore": "ecr-login" } EOF
|
これで aws ecr get-login
から解放されます ♪