LoginSignup
2
2

More than 3 years have passed since last update.

Dockerfile内におけるGitの秘密鍵のこと

Last updated at Posted at 2020-01-07

背景

開発環境での作業時、Docker使ってプライベートリポジトリcloneした時に、秘密鍵見れちゃうのがとても気になって。とりあえず色々調べてみたのでその結果を書いてみる。

参考サイト

やったこと

以下の2つの対応をしてみた。

1. マルチステージビルド

  • 何故?

    docker history で不要なステージが表示されないようにするため

  • やり方、方法

    as で中間成果物を保存して、最後にそこからコピーすることで、中間成果物の内容が見れない模様

# syntax = docker/dockerfile:experimental
FROM ruby:2.5 as intermediate

# 処理諸々
[・・・]

# マルチステージビルド
FROM ruby:2.5
COPY --from=intermediate / /
  • 注意点

    COPY前までに行った作業(ex. bundle install)で何かしらディレクトリに変更があった場合、対象ディレクトリをしっかりCOPYする必要がある。

    最初、/root /root のみを対象にしていたのだが、bundle install で /usr/local/bundle にインストールされるので、COPY対象外で、gemがないよと怒られた。

  • 確認
    docer-history.png

2. BuildKitの利用

  • 何故?

    ~/.ssh/id_rsa などの秘密鍵をコンテナ内に残さないようにするため

  • やり方、方法

    --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa git clone オプションをつけてgit cloneする

 # Git
 ARG SSH_PRIVATE_KEY
 RUN mkdir /root/.ssh/
 RUN touch /root/.ssh/id_rsa
 RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa

 RUN touch /root/.ssh/known_hosts
 RUN ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts
 RUN chmod 600 /root/.ssh/*

 # プロジェクトclone
 WORKDIR /root/
 RUN --mount=type=secret,id=ssh,target=/root/.ssh/id_rsa
 RUN git clone [プロジェクト]
 RUN rm /root/.ssh/id_rsa #→ rm しないと残ったままっぽい
↓
$ docker build -t yaga0429/ruby-chromedriver --build-arg SSH_PRIVATE_KEY="$(cat ~/.ssh/id_rsa)" --no-cache
  • 確認 docker-run.png

まとめ

ECRとかでimageをプライベートに管理してたりすると、あんま気にならないのかな。
その辺はいまいちわからんけど、なんとなくスッキリしたのでオーケー。
まぁやってみたので忘れないうちに。

2
2
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
2
2