たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

コンテナと安全なクレデンシャル(パスワード)

シチュエーションごとに違う

ビルドそのものにクレデンシャルが必要な場合

ビルド時に、パスワードが必要な外部サービスから何かを取ってくる場合.
取ってきた何かは公開していいんだけど、取ってくるためのパスワードは残るとまずい、という場合.

docker build --secretが使える.
docs.docker.com

設定したcredentialsファイルを読んで利用してくれるけどlayerにはファイルが残らないという優れもの.
これでCOPY credentials.txt | RUN use_something | RUN rm -f crednetials.txtしたのにlayerに残っているという危険から逃れられる.

RUNしている間にクレデンシャルが必要な場合

クレデンシャルをログへダンプしたら一巻の終わりだが、何かを実行する以上それを100%避けるのはとても難しい.
最悪ダンプしてもいいように平文でクレデンシャルを持たないのがfail safeにするうえで重要.

ファイルマウントが安全な扱い方の1つ.
マウントはimageに入らないため、取り出したクレデンシャルをどこかに書き込まない限り安全。
クレデンシャルを読んだコンテナをcommitした場合でも新imageには残っておらず、ゆえにpushしても問題ない。imageに残らないので docker history も心配ない.

素朴な方法は環境変数に入れること.

AWS ECSは暗号化して管理されてる変数を環境変数に挿入できる

Refs