概要
Docker環境でDBのパスワードやシークレットキーなどを利用する場合、enviroment/env_fileなどで環境変数として渡すことが多いと思が、ECS環境だとコンソール画面から環境変数で渡した値が丸見えになってしまうので、何かいい方法ないか調べた。
参考
https://aws.amazon.com/jp/blogs/news/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks/
現状、調べた限りコンテナ内からParameterStoreへアクセスさせるしかなさそうということが分かった。
ざっくりと以下のことをやる必要がありそう。(IAM設定・ParameterSotre設定済みの前提)
- コンテナにawscliインストールするようにDockerfile構成
- 環境変数をセットするスクリプトをコンテナに配置
- コンテナ起動時に2のスクリプトを実行させる
3については、
- Dockerfileのentrypointに上記のスクリプトを実行させる
- 実行時にentrypoint上書きして実行させる
- 実行時のcmdに追加する形で実行させる(command1 && command1みたいな感じ)
があると思う(他にもあるのかも?)
サンプルファイル
-
ParameterStoreから変数取得してそれを環境変数としてセットする
#!/bin/ash EC2_AVAIL_ZONE=`curl --connect-timeout 3 -s http://169.254.169.254/latest/meta-data/placement/availability-zone` if [[ "${EC2_AVAIL_ZONE}" != "" ]]; then export EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`" # Trying to retrieve parameters from the EC2 Parameter Store export PRD_DBPASSWORD=`aws ssm get-parameters --names "/prd/dbpassword" --with-decryption --region $EC2_REGION --output text 2>&1` export PRD_SECRETKEY=`aws ssm get-parameters --names "/prd/secretkey" --no-with-decryption --region $EC2_REGION --output text 2>&1` fi exec "$@"
-
AWSCLIインストールしてentrypointで上記のスクリプトを呼び出す
FROM alpine RUN apk --update add python curl groff && \ rm -rf /var/cache/apk/* RUN curl https://bootstrap.pypa.io/get-pip.py | python && pip install awscli COPY ./entrypoint.sh ./entrypoint.sh ENTRYPOINT ["./entrypoint.sh"] CMD ["env"]