課題

DockerコンテナからAWSのAPIにアクセスしたい場合、ホストがEC2ならIAMロールが使える。 しかしホストがローカルのMacの場合は、アクセスキーとシークレットアクセスキーを、どうにかしてコンテナに渡す必要がある。

結論

aws cliのconfigure getサブコマンドを使う。 具体的には下記のようにする。

#!/usr/bin/env sh
AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)

docker run --rm \
 -e AWS_REGION=ap-northeast-1 \
 -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
 -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
 ()

このようにすればコンテナ内のAWC CLI指定の環境変数にアクセスキー等が格納されるので、そのままaws cliコマンドなどが使える。 プロファイルが複数ある場合は下記のようにして切り替えることもできる。

AWS_ACCESS_KEY_ID=$(aws --profile (プロファイル名) configure get aws_access_key_id)
AWS_SECRET_ACCESS_KEY=$(aws --profile (プロファイル名) configure get aws_secret_access_key)

参考 get — AWS CLI 1.16.174 Command Reference

AWS CLI の設定 - AWS Command Line Interface