3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

credstash を使って Docker にクレデンシャル情報を渡す例2つ

Last updated at Posted at 2017-12-17

Docker の起動スクリプトや docker-compose.yml を git で管理していると、パスワードなどのクレデンシャル情報の扱いに困ることがよくあります。

もし実行環境がAWSにあるのなら、credstash というツールを使うとクレデンシャル情報の管理が簡単にできます。AWS以外の環境ではあまり使えません。

credstash はクレデンシャル情報を KMS を用いて暗号化した上で DynamoDB に保存してくれるツールです。
KMS や DynamoDB にアクセスする権限は IAM Role により制御できるため、例えば ansible vault のように、マスターパスワードを持つ必要がありません。

credstash については https://qiita.com/winebarrel/items/71e534f294a10224cbd3 などで詳しく紹介されているので、こちらをご覧ください。

この記事では docker と credstash を組み合わせて使う例を2つほど紹介します。

その1 ~ docker コマンドから渡す

docker run コマンドは -e オプションで環境変数を渡すことができます。

例えば、次のような起動スクリプトを書くことができます。

run.sh
docker run -e MY_PASSWORD=$(credstash get my-password) my-image

その2 ~ CMD 内部で取得する

docker 起動時にコンテナ内部でクレデンシャル情報を取得する方法です。

コンテナ内部から credstash を利用する場合、 credstash のGo版である gcredstash がバイナリ1つでインストールできるので便利です。

FROM ubuntu
...
RUN curl -L https://github.com/winebarrel/gcredstash/releases/download/v0.3.5/gcredstash-v0.3.5-linux-amd64.gz > /usr/local/bin/gcredstash \
 && chmod +x /usr/local/bin/gcredstash
...
CMD MY_PASSWORD=$(gcredstash get my-password) \
    ./run-my-app

docker build 時ではなく、コンテナ起動時に gcredstash を呼び出すため、ENV コマンドではなく CMD コマンドでクレデンシャルを取得する必要があることに注意です。

この方法は、特に docker-compose で ECS の実行環境を管理している場合に便利です。

例えば、次のような docker-comose.yml を用いると、dockerイメージに手を加えることなくクレデンシャルを渡すことができます。
ECS コンソールにもクレデンシャル情報は表示されません。

service: '2'
---
services:
  app:
    ...
    volumns:
    - /path/to/gcredstash:/usr/local/bin/gcredstash
    command: |
      bash -lc '
      MY_PASSWORD=$$(gcredstash get my-password) \
      ./run-my-app
      '
3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?