🔖
git-secrets を活用して、Discord Bot のトークンの混入を防ぐ
本記事は、Disocrd Botを開発する際についうっかりやってしまいがちな、シークレットトークンをGitHubに上げてしまい、Discordに怒られるということを減らすために書きました。これを実現するために、Gitの機能であるpre-commitと、AWSlabが開発した、git-secretsというスクリプトを用います。pre-commitというのは、コミットの直前に設定したスクリプトを実行してくれる機能です(Git Hook)。pre-commitの活用例には、例えば、linterの実行などがあります。git-secretsはAWSの秘密情報を漏らさないために開発されたものです。今回は、それをDiscord Bot向けに流用しています。
tl;dr
cd /want/to/path
sudo apt install git-secrets
git secrets --add '[A-z0-9_]{24}\.[A-z0-9_]{6}\.[A-z0-9_]{27}\.'
git secrets install
インストール
git-secretsのインストールを行います。git-secretではないので気をつけてください。公式のawslabs/git-secretsを参考に進めます。
Ubuntu
sudo apt install git-secrets
Mac
brew install git-secrets
Windows
git cloneしてから、PowerShellで開きます。
PS > ./install.ps1
設定
まずDiscord Botを開発しているリポジトリまで移動します。
cd /want/to/path
パターンを登録
検査したいパターンを正規表現で書きます。パターンは.git/configに書き込まれます。pre-commitの設定は.git/hooks/に書き込まれます。ファイルがすでに存在し、上書きしたい場合は、-fオプションをつけてください。
git secrets --add '[A-z0-9_]{24}\.[A-z0-9_]{6}\.[A-z0-9_]{27}\.'
git secrets install
余談:ファイルの更新を無視する方法
トークンを./secret.txtに配置しているとします。このとき、このファイルの更新を無視したいときは以下のコマンドを打ちます。
git update-index --assume-unchanged secret.txt
とすると、ある状態から更新されなくなります。.gitignoreにファイル名を書き込むのとは違い、リモートにファイル自体は存在させることができます。
Discussion