https://a.storyblok.com/f/270183/1368x665/f7d37747ed/25feb_dev-blog_secret-token-git-history.png

Git の履歴から秘密のトークンを削除する方法

最終更新日 February 11, 2025

所要時間:1 分

はじめに

この記事では、公開されている認証トークンを Git リポジトリの全履歴から安全に削除する方法について説明します。 BFGを使って Git リポジトリの履歴全体から認証トークンを安全に削除する方法を学びます。また、コミットされた秘密のセキュリティリスクを理解し、コードリポジトリをサニタイズして組織のデジタル資産を守るためのステップバイステップのプロセスをマスターします。さっそく始めましょう!

予期せぬセキュリティ警告

想像してみてください:あなたは開発者で、有意義なスプリントの真っ最中だ。ある日突然、JIRAチケットがあなたの受信トレイに届いた。件名に背筋が凍る:「重大なセキュリティ問題 - リポジトリ履歴に公開された NPM トークン」。

数年前に誤ってリポジトリにコミットされた認証トークンが、4年、7年、8年前のコミットに埋もれていたのだ。古い歴史のように思えるかもしれないが、サイバーセキュリティの世界では、古い秘密は時限爆弾になりうる。そして、あなたのCISOはそのような問題を解決することに非常に執着することがある(功罪はあるが...)。

Vonageでも同じようなことがありました。ありがたいことに、私たちの経験から学ぶことができます。

暴露されたトークンの隠れたリスク

認証トークンの露出は、単なる些細な見落としではありません。潜在的に重大なセキュリティの脆弱性を意味する:

  • プライベート・パッケージ・レジストリへの不正アクセスを許可する。

  • 機密性の高い企業インフラの露出

  • 悪意ある行為者に潜在的な侵入口を提供する。

  • リスク企業の知的財産

  • コンプライアンス要件に違反する可能性

セキュリティー違反による風評被害は、急いでトークンを投入した瞬間の利便性をはるかに上回る可能性がある。

このような場合、まずやりたいことは、関係する秘密鍵を「ローテーション」することだ。鍵を無効にして、新しい鍵を作るのだ。というのも、JavaScriptのグループ・ディスカッションで誰かが言っていたように、古くなった鍵は鍵ジェネレーターのアルゴリズムそのものを知る手がかりになるかもしれないからだ。私はサイバーセキュリティの専門家ではないので、専門家の意見に従うことにする。では、レポで公開されているキーを取り除くにはどうすればいいのでしょうか?

BFGの登場:あなたのGit履歴クリーンアップのBFF

解決策は?BFG (Big Fast Git) は、Git リポジトリの履歴を素早く効率的にクリーンアップするための強力なツールです。トークン削除の手順を説明します:

  1. リポジトリで作業している人全員に、あなたが変更をプッシュするまで数分間作業を中断するよう伝えてください。

  2. BFGをダウンロードをダウンロードし、そのフォルダにcdを入れる。

  3. リポジトリをミラーでクローンする:

    git clone --mirror https://github.com/your-name/your-repo.git

    2つの異なるフォルダに2回行うことをお勧めします。そうすれば、何か問題が発生したときに「古い」リポジトリのバックアップを取ることができます。

  4. 置換構文でtokens.txtファイルを作成する:

    old_token1==>PLACE_HOLDER1
    old_token2==>PLACE_HOLDER2
    ...

    これはBFGに、古いトークンのインスタンスをプレースホルダーに置き換えるよう指示する。

    例えば、こんな感じだ:

    ab23234-89723c-aa7b7c==>${NPM_TOKEN}
    
  5. 置換ファイルを使ってBFGを実行します(リポジトリの親フォルダにいることを確認してください):

    java -jar bfg-1.14.0.jar --replace-text tokens.txt your-repo.git --no-blob-protection
  6. リポジトリをクリーンアップする:

    cd your-repo.git
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  7. ローカルのミラーをクローンして "grep "することで、トークンが置き換えられたことを確認する:

    cd .. && git clone your-repo.git && cd your-repo && git grep -n "REPLACE _WITH_YOUR_TOKEN

    これで結果が0なら、うまくいったということだ。

  8. 変更を強制的にプッシュする:

    cd your-repo.git
    git push --mirror

  9. チームメイトに変更を取得し、適用するよう伝えてください:

    git fetch
    git reset --hard origin/main 

これで完了です。これであなたのリポジトリはクリーンになりました。今後は、トークンを警告したのと同じツールで、PR プロセス中にトークンがメインブランチに「広がる」前に警告を発することができます。そうなっていることを確認してください。 😉

トークン管理のプロフェッショナル

  • トークンを直接リポジトリにコミットしない

  • 環境変数または安全な秘密管理ツールを使用する

  • トークンによる偶発的なコミットを防止するためのプレコミットフックの実装

  • リポジトリの履歴を定期的に監査する

  • 特に被ばくが疑われる場合は、トークンを定期的に交換する。

最終的な感想

サイバーセキュリティの脅威が増大する時代において、積極的なリポジトリ管理は単に良い習慣というだけでなく、必要不可欠なものです。BFGのようなツールは、過去のミスを一掃し、コード・リポジトリの整合性を維持するための強力なメカニズムを開発者に提供します。

トークン交換に焦点を当ててきたが、BFGは多目的に使えるツールだ:

  • リポジトリ履歴から大きなファイルを削除する

  • 機密情報のクリーニング

  • リポジトリサイズの削減

  • プロジェクトをオープンソース化する前にコミットをサニタイズする

を使うべき理由に従うなら、次のようになる。 従来のコミットBFG を使えば、古いコミットに意味のあるバージョンや変更履歴を追加することができます。

ソフトウェア開発では、BFGのようなツールのおかげで、コミットされたものが永遠とは限らないことを覚えておいてください。

Git に関するその他の問題については、私たちの Vonage コミュニティ Slackにメッセージを送ってください。 X(旧 Twitter.

シェア:

https://a.storyblok.com/f/270183/400x400/7bf76cb05c/yonatankra.png
Yonatan Kraボネージ・ソフトウェア・アーキテクト

ヨナタンは、C/C++からMatlab、PHP、javascriptまで、アカデミーや業界で素晴らしいプロジェクトに携わってきた。元Webiks社CTO、WalkMe社ソフトウェアアーキテクト。現在はVonageのソフトウェア・アーキテクトであり、eggheadのインストラクターでもある。