Gitリポジトリから機密ファイルを削除する方法

ファイルにインデックスが付けられ、コミットメッセージが書き込まれ、データがサーバーに送信されます...そして突然クロックを戻したいと思います。コミットには、そこにあるべきではないファイルが含まれています。それが起こったら、検索エンジンに行く時が来ました。



すべての開発者は、機密情報を含むファイルを誤ってパブリックリポジトリにコミットしていました。そのような問題にどのように対処するのですか?このようなことが二度と起こらないようにするにはどうすればよいですか?



この記事では、ファイルが誤ってリポジトリに侵入し、そこではまったく関係がない場合の対処方法について説明します。ここでは、履歴を修正できるGitコマンドを提供し、機密情報を使用して安全な作業を整理するためのいくつかの推奨事項を共有します。





Gitリポジトリからの機密ファイルの削除(大きな画像



ダメージを最小限に抑える



そのため、機密情報を含むファイルを誤ってコミットしました。このファイルを呼び出しましょう.envこれが起こった直後に、あなたは自分自身にいくつかの質問をする必要があります:



  • コミットはリモートリポジトリにプッシュされましたか?
  • リモートリポジトリは公開されていますか?


▍コミットはまだリモートリポジトリに送信されていません



リポジトリへのコミットをまだ送信していない場合、一般に、発生した状況は脅威を引き起こしません。すべてを修正するには、前のコミットに戻る必要があります。



git reset HEAD^ --soft


ファイルはリポジトリの作業コピーに残ります。プロジェクトに必要な変更を加えることができます。



コミットを保持したいが、コミットから特定のファイルを削除する必要がある場合は、次のようにします。



git rm .env --cached
git commit --amend


このパラメーター--amendは、最新のコミットを処理するためにのみ使用できますコミットが失敗した後にさらにいくつか追加した場合は、次のコマンドを使用します。



git rebase -i HEAD~{    ?}


これにより、間違ったコミットが修正され、他のコミットによってプロジェクトに加えられた変更が失われないようになります。



▍コミットがリモートリポジトリに送信されました



すでにリモートリポジトリにコミットをプッシュしている場合は、まず、パブリックリポジトリとプライベートリポジトリの違いについて知っておく必要があります。



リポジトリがプライベートで、信頼できないボットやユーザーがアクセスできない場合は、上記のいくつかのコマンドを使用して、最後のコミットを微調整するだけです。



問題のあるコミットの後に他のコミットをリポジトリにプッシュした場合、これにより、gitfilter-branchコマンドまたはBFGRepo-Cleanerツールを使用してGit履歴から機密ファイルを削除できます



使用例はgit filter-branch次のとおりです。



git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all


ただし、これを行うときは、リポジトリに加えられたそのような変更の2つの重要な側面に留意してください。



  • Git. , - , , PR, . .
  • . , , . , , , , . , ID, , .


現在のバージョンがパブリックリポジトリにある場合、新しい秘密鍵を作成する必要がありますか?



タイトルの質問に簡単に答えるなら、それは必要です。リポジトリが公開されている場合、または何らかの理由で機密データを保存する場所ではないと思われる場合は、リポジトリに侵入した機密データが危険にさらされていると見なす必要があります。



このデータをリポジトリから削除した場合でも、ボットとリポジトリフォークでは何もできません。どうやって進める?



  • すべてのキーまたはパスワードを無効にします。これを最初に行う必要があります。キーを無効にすると、公開された機密情報は役に立たなくなります。
  • ファイルをカスタマイズします.gitignore.gitignore機密情報を含むファイルレコードをGitに取り込むと、それらのファイルのステータスは監視されません。
  • 機密ファイルを含まないコミットを準備します。
  • 変更をリポジトリに送信し、状況についての説明をコミットに提供します。エラーを隠そうとしないでください。あなたを含め、プロジェクトに取り組んでいるすべてのプログラマーは、状況の説明とこのコミットで正確に修正されたものの説明とともに、コミットのリポジトリに存在することを高く評価します。


バージョン制御にGitを使用するプロジェクトで機密ファイルを保持するためのベストプラクティス



機密情報の漏洩を防ぐために、以下の推奨事項を遵守する必要があります。



▍機密データを.envファイル(または他の同様のファイル)に保存する



APIキーと同様の情報を1つのファイルに保存します.envこのアプローチでは、Gitがファイルの状態を追跡しない場合.env、このファイルに新しいキーを追加することで、誤ってリポジトリにプッシュすることはありません。



このアプローチのもう1つの利点は、この方法でグローバル変数を介してすべてのキーにアクセスできることですprocess



▍可能であればAPIキーを使用する



侵害されたAPIキーは、簡単に非アクティブ化でき、簡単に再作成できます。可能であれば、ログインやパスワードのようなものではなく、それらを使用してください。



▍ビルドツールを使用してAPIキーを保存する



APIキーは通常、アプリケーションを構築するときに必要です。Netlifyのようなビルドツールを使用すると、キーを安全な保管庫に保管できます。このようなキーは、グローバル変数を使用してアプリケーションに自動的に挿入されますprocess





環境変数管理



▍.envファイルエントリを.gitignoreファイルに追加します



Gitが機密ファイルを追跡しないようにします。



▍テンプレート.env.templateファイルを準備します



このようなテンプレートファイルがあると、プロジェクトで作業している人がプロジェクトにAPIキーを追加するのに役立ち、ドキュメントを読む必要がなくなります。



▍リモートリポジトリのGit履歴を変更しないでください



このルールを厳守してください。上記のガイドラインに従っている場合は、Gitの履歴を変更する必要はありません。



結果



私の資料が機密データを安全に扱うのに役立つことを願っています。



公開リポジトリに移動してはいけないものを送信したことがありますか?










All Articles