概要
DockerコンテナにAWS認証情報を手軽に渡す方法
結論
環境変数にアクセスキー・シークレットキーを入れる
1
2
|
AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
|
コンテナ起動時に環境変数を渡す
1
|
docker run --rm -it -e AWS_REGION=ap-northeast-1 -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY [コンテナ名:タグ] sh
|
環境
1
2
|
> aws --version
aws-cli/1.16.309 Python/3.7.5 Linux/5.3.0-24-generic botocore/1.13.45
|
状況
ECS Fargateで動かすコンテナを作成した際にローカルでテストしたかった
コンテナはalpineイメージにGoのバイナリを載せたシンプル構成
Goのコード自体はローカルの端末で~/.aws/credentials
の資格情報からAWSのリソースを扱えていた
コンテナの動作テストしたら当然資格情報がなくて弾かれる
ECS Fargateではタスクに割り当てたIAMロールで権限は管理するので、
ロールの権限設定以外の部分に手間をかけたくなかった
手順
aws-cliが動けば簡単に設定ができる
aws configure get
コマンドを利用して設定済みの認証情報を拾って、
環境変数にそのまま入れることができる
1
2
|
$ AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
$ AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)
|
ECRからdocker pull
してきたイメージでテストする
これはCodeBuildでビルドされたイメージ
1
2
3
4
|
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xxx.dkr.ecr.ap-northeast-1.amazonaws.com/dmm-sent-line latest 885391ac6096 51 minutes ago 17.5MB
bash
|
コンテナ起動時に-e
オプションで環境変数を渡す
alpineのイメージを利用しているのでsh
でログインする
dmm-sent-lineはECRに作成したリポジトリ名です
1
|
$ docker run --rm -it -e AWS_REGION=ap-northeast-1 -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY xxx.dkr.ecr.ap-northeast-1.amazonaws.com/dmm-sent-line:latest sh
|
コンテナ内の様子
env
コマンドで見てみるとアクセスキーが設定されている
GoのバイナリもSDKを通してAWSのリソースにアクセスできることを確認できた
1
2
3
4
5
6
7
8
9
10
|
/app # env
HOSTNAME=b47a3b488f77
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=xxx
PWD=/app
|
感想
Fargateで上手く動作しなくてローカルで動くかテストしたくて試してみた
すごく手軽だったから最初からやるべきだったと反省
参考
https://qiita.com/kter/items/be1d0a08aa39fb4cddc7