GPGで.envファイルを暗号化して安全にコミットする方法
この記事は韓国語で執筆され、AIを用いて日本語に自動翻訳されました。
要約: .envファイルをGitにコミットする必要がある場合に、GPGで暗号化して機密情報の漏洩を防ぐ方法をまとめました。.gitignoreの設定からgpg encrypt/decryptコマンド、recipientのデフォルト設定まで適用して、安全なリポジトリ運用を始めましょう。

概要
アプリケーションの設定ファイルや環境変数定義ファイルをGitにコミットしなければならない場合があります。
開発環境のパスワードだからと不用意にコミットしてしまったり、本番(プロダクション)環境のパスワードが含まれたままコミットされてしまうこともよくあります。
この記事では、機密情報が含まれるファイルをコミットする際に、内容を暗号化して隠す方法をまとめます。
代表的なアプローチはいくつかありますが、ここではGPGを直接使用する方式のみを扱います。
ファイル内容の暗号化によく使われるおすすめの方法
- gpg
- age
- git-crypt(Gitフィルターベースの暗号化)
- sops(+age)
なぜGPGなのか?
GitHubのコミット/タグ署名のためにすでにGPGを使っているケースが多いです。
同じキーでファイルの暗号化まで拡張できる点がメリットです。
インストール/キー生成についてはGitでGPGによるコミット署名を行うの記事を参考にしてください。
ファイル暗号化だけが目的なら、ageのほうがシンプルに感じられるかもしれません。
ファイルの暗号化/復号化
事前要件: 以下の手順を進める前に、GPGキーが発行されている必要があります。
最初に確認すべき点(重要)
- すでに過去のコミットに含まれたことがある場合、
.gitignoreに追加しても過去のコミットから機密情報を閲覧できてしまいます。 - 完全に取り除くには、機密情報を失効/再発行し、gitコミットを書き換える必要があります。
git filter-repoまたは BFG Repo-Cleaner- (必要な場合)force push
元のファイルをGitから除外する
1# .gitignoreに.envを追加
2echo ".env" >> .gitignore
3
4# もしすでに追跡されている場合はインデックスから削除
5# (ローカルファイルは残し、Gitの追跡のみ解除)
6git rm --cached .env
ファイルの暗号化
注意事項
gpg --encryptは既存ファイルを更新する概念ではなく、実行のたびに出力ファイルを新規作成します。- ファイルがすでに存在する場合、上書きするか確認されます。自動的に同意するには
--yesオプションを使用します。
.envファイルの例:
機密情報が含まれる.envファイルから、暗号化された.envファイルを作成します。
1# 指定したrecipient(受信者)のキーで暗号化して.env.encを生成
2gpg --encrypt -r [email protected] --output .env.enc .env
3
4# 上書きまで自動化したい場合は
5# gpg --yes --encrypt -r [email protected] --output .env.enc .env
ファイルの復号化
.env.encファイルから機密情報を含む.envファイルを作成します。
1gpg --decrypt .env.enc > .env
その他
デフォルトrecipientの指定
- 毎回
-rを指定するのが面倒な場合に使用できます。 default-recipient:-rオプションがない場合にデフォルトで使用encrypt-to:-rオプションに関係なく必ず含める- 設定ファイル:
~/.gnupg/gpg.conf
1# デフォルトキー
2default-key {pub uuid}
3
4# デフォルトrecipient
5default-recipient {pub uuid}
6
7# 必ず含めるrecipient(必要な場合のみ)
8#encrypt-to {pub uuid}
関連記事
この記事はNotionで執筆され、Github Actionを通じてHugoに変換されました。
Copyright © plzhans. All Rights Reserved. | Powered by github.com/plzhans/hans-blog