LoginSignup
1
0

GitHub Actionsとdockerを使用して、ECRのイメージに、安全にmaster.key を含める方法

Last updated at Posted at 2024-04-05

概要

Railsの環境をECSで作成する際、多くの開発者がmaster.keyをコンテナーに環境変変数として設置すると思います。この方法でも問題ないですが、コンテナーの環境変数を使用したくないと言う要望もあるかと思い、表題の方法について手順を書きたいと思います。

前提条件

  • Dockerのバージョンが18.09以上である
  • Ruby on Railsの環境がある
  • GitHub Actionsが導入されている
  • Dockerを使用して、Ruby on Railsの環境立ち上がっている

GitHubの設定

  • Settingsを押下すると、サイドバーにSecrets and variablesがある。その中にActionsがある為、そこに環境変数を入れる

githubの画像.png

  • GitHubの権限設定によっては、settingsの管理画面が見れない可能性があります。その場合は、管理者に問い合わせて下さい
  • 必要に応じて環境変数を作成して下さい

GitHub Actions

  • configのディレクトリーに、master.keyのファイルを作成する
  • master.keyのファイル内に、暗号化キーを書き込む
.github./workflows/deploy.yml
- name: Create rails master key for build
  run: |
    touch $GITHUB_WORKSPACE/config/master.key
    echo ${{ secrets.RAILS_MASTER_KEY }} > $GITHUB_WORKSPACE/config/master.key

# $GITHUB_WORKSPACE: .githubが置いてある場所をルートディレクトリーと定義している
  • envに 環境変数を設定する
  • Dockerのバージョンが18.09以降であれば、BuildKitと言う機能を使う事ができる
  • BuildKitの機能を使用する事で、秘密情報(今回の場合、master.key)をECRimageに安全に渡す事ができる
    (imgae内に、master.keyの情報が含まれない為、imageからmaster.keyの情報が漏洩しない)
.github./workflows/deploy.yml
- name: Build, tag, and push image to Amazon ECR
  id: build-image
  env:
    DOCKER_BUILDKIT: 1
    ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
    REPOSITORY: "<ECRリポジトリ名>"
    IMAGE_TAG: ${{ github.sha }}-${{ github.run_id }}
  run: |
    docker buildx create --use
    docker buildx build \
      --secret id=master_key,src=$GITHUB_WORKSPACE/config/master.key \
      -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \
      --push \
      -f containers/production/Dockerfile .
    echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_OUTPUT

# -f containers/production/Dockerfile . :各々のリポジトリーの構成に合わせて修正して下さい

REPOSITORYは環境変数に設定する事を推奨する

Dockerfile

  • DockerfileでもBuildKitを使用して、imageを作成する
# master.keyをコピー
RUN --mount=type=secret,id=master_key,target=master.key,required=true \
    rails assets:precompile RAILS_ENV=Production

参考資料

まとめ

GitHub Actionsの理解やBuildKitと言うDockerの新たな機能について知見が増えました。BuildKitに関して、セキュアなコンテナーを作成する以外にも様々使い道がありそうなので、いろいろい試して見たいと思います。

1
0
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
1
0